3

私の Web サイトには、個人の詳細がメンバーと呼ばれるテーブルにある場合にのみ表示できるページがあり、値は前のページのフォームから投稿されます。これは私が持っていた元のコードで、うまくいきました:

$query = "SELECT * FROM Members WHERE firstname='" . $firstname . "' and surname='" . 
$surname. "'"; 
$result = mysql_query($query);
$rows = mysql_num_rows($result);

if ($rows == 1) 
{ 
   //user continues loading page
} 
else 
{ 
   header ('location: signup.html'); //user is redirected to sign up page 
}

サイトにいくつかの変更を加えた後、同じユーザーがページの読み込みを続行するには、Members テーブルに payed='TRUE' を設定する必要があります。これは私が思いついたコードです:

$query = "SELECT * FROM Members WHERE firstname='" . $firstname . "' and surname='" . 
$surname. "'"; 
$result = mysql_query($query);
$rows = mysql_num_rows($result);

$query = "SELECT paid FROM Members WHERE firstname='" . $firstname . "' and surname='" . 
$surname. "'"; 
$result = mysql_query($query);
$paid = mysql_num_rows($result);


if ($rows == 1 && $paid=='TRUE') 
{ 
   //user continues loading page
} 
else 
{ 
   header ('location: signup.html'); //user is redirected to sign up page 
 }

この新しいコードを使用すると、ユーザーが支払いを済ませたとしても、サインアップ ページにリダイレクトされます。これは間違った方法で行ったのでしょうか?

4

3 に答える 3

5

$paid を「TRUE」と照合しますが、mysql_num_rows で埋めます。試す:

if ($rows > 0  && $paid >0 )

代わりは。

さらに、文字列を適切にエスケープしているかどうかを確認できないため、$firstname と $surname をエスケープ/検証する必要があることに注意してください。

とにかく、2 番目の mysql_query をスキップして使用できます。

    $query = "SELECT * FROM Members WHERE firstname='" . $firstname . "' and surname='" . 
    $surname. "'"; 
    $result = mysql_query($query);
    $rows = mysql_num_rows($result);
    if( $rows ){

    $row = mysql_fetch_assoc($result);
        if($row['paid'] =='TRUE') {
            //continue
        } else {
    //redirect
    }
}
于 2012-09-11T11:44:37.257 に答える
4

あなたはこれを試すことができます:

$query = "SELECT * FROM Members WHERE firstname = '" . $firstname . "' and surname = '" . $surname. "' and paid = 'true'";
$rows = mysql_num_rows(mysql_query($query));

if ($rows == 1) { 
   //user continues loading page
} 
else { 
   header ('location: signup.html'); //user is redirected to sign up page 
}

また、SQLインジェクションを必ずチェックする必要があり$firstnameます$surname

于 2012-09-11T11:43:06.820 に答える
3

あなたのコードは間違っています。これは問題ないはずです:

$query = "SELECT * FROM Members WHERE firstname='" . $firstname . "' and surname='" . $surname. "'"; 
$resource = mysql_query($query);
$rows = mysql_num_rows($result);

if ($rows) { 
    $result = mysql_fetch_assoc($resource);
    if($result['paid'] == 'TRUE') {
        //user continues loading page
    } else {
        // user has not paid, redirect him to payment page
    }
} else { 
    header ('location: signup.html'); //user is redirected to sign up page 
}

とにかく、関数の使用を開始するmysqliPDOmysql_*関数はすでに非推奨になっているため、使用を開始することをお勧めします。

于 2012-09-11T11:42:01.803 に答える