0

わかりました。パスワードのリセットスクリプトを実行しています。パスワードをsha1ハッシュバージョンに置き換えることになっています。password01成功した場合は成功メッセージを返しますが、失敗した場合は失敗メッセージを返しますが、失敗メッセージを返すのはうまくいくかどうかです。いつもそうです!何か案は?私は以下のコードを挿入しました:

<?php 
session_start();
$host= $_SESSION["dbhost"]; 
$username= $_SESSION["dbuser"]; 
$password= $_SESSION["dbpass"]; 
$db_name= $_SESSION["dbname"];
$tbl_name="users"; // Table name 

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$userid = $_POST['id'];
$password = 'password01';    
$hashpass = sha1($password);

//$result = mysql_query("SELECT password FROM $tbl_name WHERE id='$userid'");
$sql=mysql_query("UPDATE $tbl_name SET password='$hashpass' where id='$userid'"); 

if (mysql_query($sql)) {
echo "<ul id='breadcrumbs-one'>";
echo "<li><a href=''>Users</a></li>";
echo "<li><a href='' class='current'>Reset</a></li>";
echo "</ul>";
echo "<div class='tn-box tn-box-color-3 mcenterlow'>";
echo "<p>The Opperation was Sucessful!<br><a href='?users'>Add Another?</a></p>";
echo "<div class='tn-progress'></div>";
echo "</div>";
}
else {
echo "<ul id='breadcrumbs-one'>";
echo "<li><a href=''>Users</a></li>";
echo "<li><a href='' class='current'>Reset</a></li>";
echo "</ul>";
echo "<div class='tn-box tn-box-color-1 mcenterlow'>";
echo "<p>The Opperation was Not Sucessful!<br><a href='?users'>Try Again?</a></p>";
echo "<div class='tn-progress'></div>";
echo "</div>";
}
?> 
4

3 に答える 3

1

$sqlの結果と同じように設定していmysql_query("UPDATE $tbl_name SET password='$hashpass' where id='$userid'");ます。UPDATEステートメントでmysql_query、ブール値を返します。その後、あなたは声明で呼ばmysql_quert($sql)れます。$ sqlはクエリのif結果であるため、結果がチェックされるため、これは論理的に正しくありません。mysql_query(<bool>);

また:

$sql=mysql_query("UPDATE $tbl_name SET password='$hashpass' where id='$userid'"); 

if ($sql) {

また

$sql = "UPDATE $tbl_name SET password='$hashpass' where id='$userid'"; 

if (mysql_query($sql)) {

マット

于 2013-01-31T02:21:23.700 に答える
1

コードはmysql_query()を2回呼び出しています。1回は実際のSQL文字列を使用し、もう1回は最初の呼び出しから返された結果値を使用しています。したがって、「if」によってチェックされる2番目の呼び出しは常に失敗します。有効なSQLではありません。

私はあなたが次のようなことを言いたいと思います

$sql = "UPDATE $tbl_name SET password='$hashpass' where id='$userid'";

if (mysql_query($sql)) {
    // etc.
于 2013-01-31T02:19:42.043 に答える
1

あなたの質問の下のコメントとは別に、あなたifが失敗している理由は、あなたがmysql_queryへの別の呼び出しの結果を使用しているということですmysql_query

これを解決するには、条件を次のように変更する必要があります。

if ($sql) {

UPDATEクエリの場合、成功時と失敗時にmysql_query戻ります)truefalse

また、SQLインジェクションの問題を解決するには、プリペアドステートメントとバインドされた変数を使用してPDO(またはmysqli)に切り替える必要があります。

于 2013-01-31T02:19:55.663 に答える