私の注文に問題があります。人がF5を押しすぎると、複数回注文を送ることができます。 order_id
をファイルに書きたいと思います。PHP読み込みファイルが機能しない
ご注文を送信してorder_id
が既に保存されているかどうかを確認してください。そうでない場合は、もう一度注文を送信しないでください。
orders.txt
ファイルにあるかどうかを確認するよりも、order_id
が届きます。そのファイルに見つかった場合は "mysite"にリダイレクトします。格納されていない場合は、orders.txt
に書き込んでください。
order_id
がorders.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;
}
}
これにデータベースを使用していない理由は何ですか?普通のファイルに注文情報を保存することは素晴らしい考えではありません。 –
注文情報は保存されません。ちょうど4桁の数字です。 –
「/xml/order_id-".$order_id.".xml」にありますか?とにかく私は本当に気にしない、ちょうどヒントだった。このようなソリューションは多くの問題を抱えているため、人々は一般的にデータベースを使用しています。 –