2016-09-08 8 views
-1

私の注文に問題があります。人がF5を押しすぎると、複数回注文を送ることができます。 order_idをファイルに書きたいと思います。PHP読み込みファイルが機能しない

ご注文を送信してorder_idが既に保存されているかどうかを確認してください。そうでない場合は、もう一度注文を送信しないでください。

orders.txtファイルにあるかどうかを確認するよりも、order_idが届きます。そのファイルに見つかった場合は "mysite"にリダイレクトします。格納されていない場合は、orders.txtに書き込んでください。

order_idorders.txtに書き込まれた後、order_id-XXXX.xmlをURLに送信します。

事は:else部分のみが動作します。

F5キーを何度か押すと、毎回orders.txtファイルにorder_idが書き込まれます。既にそこにいるかどうかはチェックしていません。また、注文を複数回送信します。

内側のif (file_exists($filename))else{}部分を削除してもうまく動作します。

HERESに私のコード:

$order_id= $order->get_order_number(); 
$filename = $_SERVER['DOCUMENT_ROOT']."/xml/order_id-".$order_id.".xml"; 
$_cassa_point_url='some_url'; 

$orders_txt = $_SERVER['DOCUMENT_ROOT']."/xml/orders.txt"; 

$contents = file_get_contents($orders_txt); 
$pattern = preg_quote($order_id, '/'); 
$pattern = "/^(".$pattern.")/m"; 

    if(strpos(file_get_contents($orders_txt),$order_id) !== false) { 
     header("refresh:0;url=mysite); 
    }else{ 
     $myfile = file_put_contents($orders_txt, $order_id."\r\n" , FILE_APPEND | LOCK_EX); 
     if (file_exists($filename)) { 

      $url = $_cassa_point_url . $order_id; 
      file_get_contents($url); 
      header("refresh:0;url=mysite); 
      return true;    
     } else { 
      $url = $_cassa_point_url . $order_id; 
      file_get_contents($url); 
      header("refresh:0;url=mysite); 
      return true; 
     } 
    } 
+1

これにデータベースを使用していない理由は何ですか?普通のファイルに注文情報を保存することは素晴らしい考えではありません。 –

+0

注文情報は保存されません。ちょうど4桁の数字です。 –

+0

「/xml/order_id-".$order_id.".xml」にありますか?とにかく私は本当に気にしない、ちょうどヒントだった。このようなソリューションは多くの問題を抱えているため、人々は一般的にデータベースを使用しています。 –

答えて

1
header("refresh:0;url=mysite); 

あなたがそうあなたが同様にelseに同じ方法でそれを行っている

header("refresh:0;url=mysite"); 

に変更し、それに"を忘れてしまいました。

+0

私はちょうど敏感なサイトのリンクを削除し、実際のコードで間違いを犯しました。 –

関連する問題