3

私はPHP/SQLが苦手なので、助けていただければ幸いです。

基本的に、値「firstname」と「surname」を別のページに投稿するフォームがあります。そのページで実行したいことは、ユーザーの名前が既にテーブル「メンバー」にあるかどうかを確認することです。その場合は、このページの読み込みを続行したいのですが、データベースにない場合は、視聴者を既存のサインアップ ページにリダイレクトする必要があります。

これが私が取り組んできたコードです。正しい方向に向かっているかどうかはわかりません。

<?php
$con = mysql_connect("localhost","site","xxxxxxxx");
if (!$con)
   {
   die('Could not connect: ' . mysql_error());
   }

mysql_select_db("site", $con);

$query = "SELECT * FROM Members WHERE firstname='$_POST[firstname]' and surname='$_POST[surname]'";  
$result = mysql_query($query);

if ($result==$something)
   {
   echo "great success"; //user continues loading page
   }
else
   {
   echo "fail"; //user is redirected to sign up page
   }
?>
4

5 に答える 5

2

これでうまくいきます:

<?php

$con = mysql_connect( "localhost", "site", "xxxxxxxx" );
if ( !$con ) {
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("site", $con);

まず、少なくとも次のようにSQLインジェクション部分を削除します。

$firstname = strip_tags( $_POST[ 'firstname' ] );
$surname = strip_tags( $_POST[ 'surname' ] );

2つ目は、変更していませんが、を削除して、*ロードする特定の値のみを入力する必要があります。これらがすべての値であっても、手動で書き込みます。

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

3番目に、行数を確認できます。値を取得した場合は、それらの変数を含むエントリがあります

if ( mysql_num_rows($result) >= 1 ) {
    // the page you want
} else {
    // redirect user to another page
    header( "Location: signup.php" ); die;
}

?>

編集:

uniqueクエリにいくつかのリクエストを追加することを検討してください。2人のユーザーが同じ名前と名前を持っている場合、または新しいユーザーが参加したいが、名前と名前がすでにデータベースにある場合はどうなりますか...

于 2012-07-26T12:13:31.853 に答える
2
if (mysql_num_rows($result) == 1)
   {
   echo "great success"; //user continues loading page
   }
else
   {
   echo "fail"; //user is redirected to sign up page
   }

また、クエリはSQLインジェクションの影響を受けやすい傾向があります

于 2012-07-26T12:00:42.963 に答える
1
$rows = mysql_num_rows($results);

if ($rows == 1)
{
   echo "login successful"; //user continues loading page
}
else
{
   header ('location: signup.php'); //user is redirected to sign up page
}
于 2012-07-26T12:02:30.720 に答える
0

header( "Location: host/site.php" ) 関数呼び出しを else ブランチに配置し、その後に die() を付けるだけです 。

于 2012-07-26T12:03:15.907 に答える
0
if(mysql_num_rows($result) > 0){
    echo "great success"; //user continues loading page
}
else
{
   echo "fail"; //user is redirected to sign up page
}

これを使って

于 2012-07-26T12:03:24.293 に答える