0

人々がリリースに評価を付けて意見を残すことができる Web サイトを作成しています。これは、PHP によって駆動される MySQL データベースに保存されます。

特定のリリースのフィードバック フォームがあります (この例では、ID は 35 です)。ユーザーに ID が 36 の別のフォームを送信し、ユーザーが両方のウィンドウを開いていると、PHP 処理コードが格納されます。 ID 35 からの応答ですが、ID は 36 です。データベースの「reaction_reacted」値が「1」である場合、ページは前のページにリダイレクトされます。

これを解決する方法はありますか?

これが私のコードの例です。$promo_id、reaction_id、およびユーザー名は、送信時に前のページから渡されます。

session_start(); 

include 'connect.php'; 
mysql_connect($host,$db_user,$db_password);
mysql_select_db($database);     

$promo_id = $_SESSION['promo_id'];
$reaction_id = $_SESSION[reaction_id];
$username = $_SESSION['username'];

if(isset($_SESSION['username']))
{

// Check to see if Receipt and DJID values are entered

$queryb = "select reaction_ID from reactiondata where reaction_ID='$reaction_id' AND reaction_username='$username' AND reaction_promoID='$promo_id' and reaction_reacted='1'";
$result2 = mysql_query($queryb) or die(mysql_error());

while($row = mysql_fetch_array($result2)){
header('Location: ' . $_SERVER['HTTP_REFERER']);
// session_destroy();
// exit;
}

if ($reaction_id && $promo_id != null) 
{

$p4support = $_POST['DJsupport'];
$p4favouritemix = $_POST['FavMix'];
$p4score = $_POST['score'];
$p4comment = $_POST['DJcomment'];

$query = "UPDATE reactiondata SET reaction_username='$username', reaction_promoID='$promo_id', reaction_support='$p4support', reaction_favouritemix='$p4favouritemix', reaction_score='$p4score', reaction_comment='".mysql_real_escape_string($p4comment)."', reaction_reacted='1' WHERE reaction_ID='$reaction_id'";
mysql_query($query) or die('Error in MySQL query. Here is the error message: '.mysql_error());

$query7 = "UPDATE reactiondata SET reaction_time=NOW() WHERE reaction_ID='$reaction_id'";
mysql_query($query7) or die('Error in MySQL query. Here is the error message: '.mysql_error());
}

ありがとう

CP

PS 減価償却済みの mysql_query メソッドを使用していることはわかっています。SQL インジェクション攻撃の防止を開始する前に、ページを適切に機能させたいだけです。

4

1 に答える 1

0

最も簡単な解決策 (... の 1 つ) はreaction_id、セッションを使用する代わりに、非表示のフォーム フィールドとしてフォームに追加することです。そうすれば、フォームが投稿されたときに、反応は常に正しい ID にリンクされます。

セッションはブラウザで開いているすべてのウィンドウとタブにまたがるため、特定のタブの状態を維持するのには適していないため、セッションを使用しないでください。

于 2013-10-11T04:24:52.990 に答える