0

私はSQLとPHPにかなり慣れていません。

簡単なログイン スクリプトを作成しようとしています。HTMLドキュメントにフォームがあり、必要な2つの変数に正しいデータを投稿することを証明しましたが、SQLを実行するとスクリプトが失敗します...

また、mysqlWorkbench で SQL をテストしたところ、必要な結果が得られました。

助けてください。

これが私のスクリプトです:

<?PHP

$odbc = mysql_connect('localhost', 'root', '') or die ("could not connect to database");
mysql_select_db('examresults', $odbc)  or die("Could not find database");

// username and password sent from form 
$username=$_POST['username']; 
$password=$_POST['password']; 

$sql='SELECT * FROM tuser where username = '.$username.' and password = '.$password.'';

$result = mysql_query($sql, $odbc) or die ("Error in SQL");

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

 //If result matched username and password, table row must only equal 1 row
if($count==1)
{   
    header("location:exammenu.php");
}
else 
{
    echo 'username and password do not match';
}
?>
4

4 に答える 4

2

mysql_*関数は非推奨になりました。もう使用しないでください。コードはSQLインジェクションに対しても脆弱です。

「SQLのエラー」を出力する代わりに使用mysql_errorすると、より詳細なSQLエラーメッセージが表示されます。" "ただし、クエリで文字列を配置するのを忘れたために失敗している可能性があります。

$sql='SELECT * FROM tuser where username = "'.$username.'" and password = "'.$password.'"';
于 2012-11-16T12:01:04.817 に答える
2

本当に を使用する必要がある場合mysqlは、少なくとも入力をサニタイズしてください。$sql 変数の引用符にも注意してください。これは機能するはずです(テストされていませんが):

<?PHP

$odbc = mysql_connect('localhost', 'root', '') or die ("could not connect to database");
mysql_select_db('examresults', $odbc)  or die("Could not find database");

// username and password sent from form 
$username=mysql_real_escape_string($_POST['username'], $odbc); 
$password=mysql_real_escape_string($_POST['password'], $odbc); 

$sql=sprintf('SELECT * FROM tuser where username = "%s" and password = "%s"', $username, $password);

$result = mysql_query($sql, $odbc) or die ("Error in SQL");

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

 //If result matched username and password, table row must only equal 1 row
if($count==1)
{   
    header("location:exammenu.php");
}
else 
{
    echo 'username and password do not match';
}

sprintfこのようなエラーを見つけやすくするために、SQL ステートメントをフォーマットするために使用することをお勧めします。

于 2012-11-16T11:56:08.813 に答える
2

クエリは次のようになります。

 $sql='SELECT * FROM tuser where username = "'.$username.'" and password = "'.$password.'"';
于 2012-11-16T11:48:33.010 に答える
1

このコードを試すことができます。正しく動作すると思います。

<?PHP

$odbc = mysql_connect('localhost', 'root', '') or die ("could not connect to database");
mysql_select_db('examresults', $odbc)  or die("Could not find database");

// username and password sent from form 
$username=$_POST['username']; 
$password=$_POST['password']; 

$sql="SELECT * FROM tuser where username = '".$username."' and password = '".$password."'";

$result = mysql_query($sql, $odbc) or die ("Error in SQL");

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

 //If result matched username and password, table row must only equal 1 row
if($count==1)
{   
    header("location:exammenu.php");
}
else 
{
    echo 'username and password do not match';
}
?>
于 2012-11-16T12:30:29.543 に答える