1

基本的に、単一のフォームがタブに分割された 1 つのページである Web アプリがあり、それぞれに個別のデータベース テーブルのデータが含まれています。フォーム アクションは、フォーム データを取得してデータベースに保存する save.php スクリプトを指します。

save.php スクリプトは、データベース テーブルごとに 1 つずつ、複数の SQL INSERT/UPDATE ステートメントで構成されるように構成されています。ユーザー設定などに基づいて一部のフォーム タブが非表示になっているため、この方法で実行されます。これらのステートメントの変数は、実際にはいつでも実行されます。

ユーザーを別のページにリダイレクトできるように、すべての SQL クエリの実行がいつ終了したかを判断する方法はありますか?

簡単な例として、save.php スクリプトは、基本的に次のようないくつかのコード ブロックで構成されています。

 $updQuery = "UPDATE exampletable SET row=1 WHERE x=y";
 try { 
  $updResult = odbc_exec($connect,$updQuery); 
 } 
 catch (RuntimeException $e) { 
   ExceptionHandlingStuff();
 }

通常、リダイレクトの場合、次のようにメタリフレッシュを使用します。

<meta http-equiv="refresh" content="10; URL=homepage.php">

更新が開始されるまでにすべての SQL クエリが実行されることを「合理的に」確実にするために、10 秒などの長い遅延に設定できますが、これは保証を提供せず、ユーザーに不必要な遅延を引き起こす恐ろしいハックのように思えます。ほとんどの場合、クエリは 10 秒の遅延が終わるずっと前に完了しているためです。

ページ上のすべての SQL INSERT/UPDATE ステートメントの実行が終了したことを検出して、その後すぐにユーザーをリダイレクトできるようにする最善の方法は何ですか?

参考までに、PHP と ODBC を使用して 4D SQL ANSI-92 データベースに接続しています。

4

1 に答える 1

2

その exec コマンドは、他のクエリと並行して実行されません。この更新は、例外をキャッチするか、catch ブロックの後の次のコード行に進むと終了します。したがって、ここでの限られた情報を考えると、次のように save.php の下部でリダイレクトすると言えます。

$statusCode = ($statusCode ?: 200);
$statusCodeMessage = ($statusCodeMessage ?: '');    
$forwardingUrl = ($forwardingUrl ?: 'http://www.google.com/');
header(sprintf("HTTP/1.1 %d %s", $statusCode, $statusCodeMessage));    
header('Location: ' . $forwardingUrl);
于 2013-11-07T16:24:44.130 に答える