2013-12-10 20 views
0

我只是PHP中的新功能,我有我仍在構建的項目,現在我在 管理員區域工作。Php腳本不檢查mysql表中的用戶名值

現在我正在編寫腳本,通過查看兩個條件 「用戶名和fname」更新表中的密碼,如果輸入的密碼應該更改相同,並且它成功,但問題有一次,我輸入不正確的用戶名,它仍然更新密碼,並沒有顯示消息「你輸入的用戶名不存在」,以及當我寫錯誤的FNAME它不顯示消息,它真正讓我堆疊在哪裏我錯了,雖然我知道那裏有一些地方是錯的。

我要求任何幫助,我很慶幸。

這是我的腳本

<?php 
     session_start(); 

    //include mysqli_connect 

    $name = $_POST['fname']; 
    $newp = $_POST['newpword']; 
    $user=$_POST['username']; 

    $result = mysql_query("SELECT password FROM admin WHERE fname='$name' 
    AND username='$user' "); 
    if(!$result) 
    { 
    echo "The username you entered does not exist"; 
    } 
    elseif(mysql_num_rows($result)>0) 
    $result=mysql_query("UPDATE admin SET password='$newp' where fname='$name'");  
    { 
    echo "Password change successfully"; 
echo"<br>"; 
    echo"<a href=index.php> Click here to signin </a>"; 
exit; 
     } 
    { 
    echo "The new password and confirm new password fields must be the same"; 
    } 
?> 
+5

1)該腳本容易受到sql注入的影響。 2)msyql_ *已棄用。使用mysqi或PDO .. – skrilled

回答

0

我認爲這個問題是if($result)條件。您應該檢查if(mysql_num_rows($result)>0)

+0

是的,我試圖插入elseif(mysql_num_rows($ result)> 0)現在它chechk所有fname nad用戶名,但一旦我插入錯誤的fname或用戶名它不會提供消息「您輸入的用戶名不存在「 – msuya

+0

它必須是第一個條件不在elseif – Dirgh

+0

我的意思是如果(mysql_num_rows($結果)> 0)//插入其他//沒有用戶名 – Dirgh

1

您的if語句和括號在代碼中非常混淆。我想我明白你想要做什麼,但是......但你應該真的通過你自己的代碼,並給一切正確的縮進。

我將您的代碼更改爲使用pdo

我爲舊用戶密碼添加了一個POST值,因爲即使它們已經登錄,您也應該在更新用戶密碼時真正驗證該值。您將需要爲此形式添加一個字段,它是正在發送。如果你不想使用它,你只需要從代碼中取出邏輯。

而且 - 我真的希望你不是以純文本形式存儲密碼。如果你是,請告訴我你的確切的PHP版本是在這篇文章下面的評論,我可以更新我的答案,以顯示你將如何去存儲和使用哈希密碼。不過,它確實取決於版本。

<?php 
session_start(); 

$_POST['fname'] = 'fname'; 
$_POST['newpword'] = 'newpword'; 
$_POST['username'] = 'username'; 

$name = (isset($_POST['fname'])) ? $_POST['fname'] : die("\$_POST['fname'] is not set"); 
$newp = (isset($_POST['newpword'])) ? $_POST['newpword'] : die("\$_POST['newpword'] is not set"); 
$user = (isset($_POST['username'])) ? $_POST['username'] : die("\$_POST['username'] is not set"); 

// you should get the old password, too, 
// so you can verify that it's the correct user 
$_POST['oldpass'] = 'password'; 
$oldp = (isset($_POST['oldpass'])) ? $_POST['oldpass'] : die("\$_POST['oldpass'] is not set"); 



$pdo = new PDO("mysql:host=localhost;dbname=test", 'root', 'password'); 

$stmt = $pdo->prepare("SELECT password FROM admin WHERE fname=:fname AND username=:user"); 
$stmt->bindParam(':fname', $name); 
$stmt->bindParam(':user', $user); 
$success = $stmt->execute(); 
$result = $stmt->fetch(PDO::FETCH_ASSOC); 

if ($success===false) { 
    print "an error occurred in the query <br/>".print_r($stmt->errorInfo(),true); 
} 
elseif ($success!==false && $result===false) 
{ 
    print "that username was not found in the database"; 
} 
else 
{ 
    if ($result['password']==$oldp) 
    { 
     $stmt2 = $pdo->prepare("UPDATE admin SET password=:newp where fname=:fname"); 

     /* You should really HASH this password before storing it*/ 
     $stmt2->bindParam(':newp', $newp); 
     $stmt2->bindParam(':fname', $name); 
     $success2 = $stmt2->execute(); 

     if ($success2!==false) 
     { 
     echo "Password change successfully"; 
     echo"<br>"; 
     echo"<a href=index.php> Click here to signin </a>"; 
     } 
     else 
     { 
     print "an error occurred updating the password <br/>"; 
     } 
    } 
    else 
    { 
     print "old password didn't match"; 
    } 
} 
?> 
+0

+1使用PDO/mysqli給出答案 – Sal00m

相關問題