2013-01-10 73 views
0

我不斷收到我的錯誤,我必須在我的代碼中正確輸入兩個新密碼。那不是我想要的。如果填寫了密碼字段,則應檢查密碼匹配並符合要求。否則,它應該更新配置文件。但它沒有這樣做。 IT仍檢查密碼字段。你能告訴我我的代碼有什麼問題嗎?如果其他人無法使我

<?php 
    if ($post == "yes") { 


    $uppercase = preg_match('@[A-Z]@', $password); 
    $lowercase = preg_match('@[a-z]@', $password); 
    $number = preg_match('@[0-9]@', $password); 

    if (isset($password) && ($password != $password2 || !$uppercase || !$lowercase || !$number || strlen($password) < 8)) { 
    echo "<table class=tablenews><tr><td>There is an error with your passwords. Either they do not match, or your new password does not contain 8 characters, a number, a lower and an upper case letter. Go back and retry again. </td></tr></table>"; 

    } 

    else { 
    $password = generateHash($password); 

    $result = mysql_query("UPDATE users SET avatar='" . $avatar . "' WHERE id='". $_SESSION['user_id'] . "'") 
    or die(mysql_error()); 
    $result = mysql_query("UPDATE users SET u_signature='" . $signature . "' WHERE id='". $_SESSION['user_id'] . "'") 
    or die(mysql_error()); 
    $result = mysql_query("UPDATE users SET u_bio='" . $bio . "' WHERE id='". $_SESSION['user_id'] . "'") 
    or die(mysql_error()); 
    $result = mysql_query("UPDATE users SET u_desc='" . $desc . "' WHERE id='". $_SESSION['user_id'] . "'") 
    or die(mysql_error()); 
    $result = mysql_query("UPDATE users SET u_intro='" . $intro . "' WHERE id='".  $_SESSION['user_id'] . "'") 
    or die(mysql_error()); 
     $result = mysql_query("UPDATE users SET password='" . $password . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error()); 
printf('<script>window.location = "http://www.sw-bfs.com/index.php?siteid=profileedit"</script>'); 
} 

    if (!isset($password)) { 
$result = mysql_query("UPDATE users SET avatar='" . $avatar . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error()); 
$result = mysql_query("UPDATE users SET u_signature='" . $signature . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error()); 
$result = mysql_query("UPDATE users SET u_bio='" . $bio . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error()); 
$result = mysql_query("UPDATE users SET u_desc='" . $desc . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error()); 
$result = mysql_query("UPDATE users SET u_intro='" . $intro . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error()); 



    printf('<script>window.location = "http://www.sw-bfs.com/index.php?siteid=profileedit"</script>'); 

} 


} 

else { 
?> 

<table class="tablenews"> 
<tr><th>Edit your Profile</th></tr> 

<?php 
$userfinalid = $_SESSION['user_id']; 
$prAvatar = get_user_data($userfinalid, avatar); 
$prSignature = get_user_data($userfinalid, signature); 
$prBio = get_user_data($userfinalid, bio); 
$prDesc = get_user_data($userfinalid, desc); 
$prIntro = get_user_data($userfinalid, intro); 
?> 

<br><tr><td> 
<form method="post" action="<?php echo $thispage . "?siteid=profileedit"; ?>&proc=New&post=yes&<?php echo $pagevars; ?>"> 

<?php 

echo '<label for="avatar" class=customlabelname>Avatar Link:</label><br><input type="text" class=customlabel name="avatar" value="' . $prAvatar .'"><br>'; 
echo '<label for="bio" class=customlabelname>User Bio:</label><br><textarea rows="10" cols="40" class=customlabel name="bio">' . $prBio .'</textarea><br>'; 
echo '<label for="desc" class=customlabelname>User Description:</label><br><textarea rows="10" cols="40" class=customlabel name="desc">' . $prDesc .'</textarea><br>'; 
echo '<label for="intro" class=customlabelname>User PM Intro:</label><br><textarea rows="10" cols="40" class=customlabel name="intro">' . $prIntro .'</textarea><br>'; 
echo '<label for="signature" class=customlabelname>User Signature:</label><br><textarea rows="10" cols="40" class=customlabel name="signature">' . $prSignature .'</textarea><br>'; 
echo '<label for="password" class=customlabelname>New Password(Leave Blank if it will be the same):</label><input type=password rows="10" cols="40" class=customlabel name="password"></textarea><br>'; 
echo '<label for="password2" class=customlabelname>ReType Password:</label><input type=password rows="10" cols="40" class=customlabel name="password2"></textarea><br>'; 
echo '<input type=submit value="submit" class=button2>'; 
?> 

</td> 
</tr> 
</table> 
<?php 
} 
    ?> 
+1

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 –

+0

@MadaraUchiha紅色框表示它在PHP5.5(現在處於alpha階段)不推薦使用。你不能說它已經被棄用了,但它不再被推薦。而PDO或MySQLi並不意味着準備好的語句... –

+0

你使用註冊全局變量來設置你的變量嗎? –

回答

0
if (isset($_POST['password']) ...) { 
    // ... display error 
} 

這意味着如果password鍵時的$_POST陣列中存在,顯示錯誤。我想你的意思是如果password不是存在於$_POST數組中,顯示錯誤。如果你要反轉通過把一個!收到:

if (!isset(...) ...) { 
+0

好吧,讓我更好地解釋一下:我正在嘗試創建一個配置文件頁面。用戶可以在那裏編輯不同的東西。如果密碼字段爲空,它將更新數據庫中的所有字段,減去pw字段。如果設置了密碼字段,則會檢查最低密碼要求。如果匹配,它將繼續更新數據庫。如果沒有,它會給出我設置的錯誤消息。但是,它並不像那樣運作。第一個If isset會檢查要填寫的密碼字段,然後檢查它是否符合要求。如果不是這樣,它就會變成下一部分。合理? – user1924218

+0

我使用'strlen($ password)> 0'修復了這種情況,而不是isset或者是null等。不知道爲什麼它會以這種方式工作,而不是其他人,但它現在可以工作。現在我要修復SQL注入漏洞。 謝謝大家。 – user1924218

0

這是否達成什麼是你想要做的事:

if(isset($password)) { 
    if ($password != $password2 || !$uppercase || !$lowercase || !$number || strlen($password) < 8) { 
     error_log('error'); 
    echo "<table class=tablenews><tr><td>There is an error with your passwords. Either they do not match, or your new password does not contain 8 characters, a number, a lower and an upper case letter. Go back and retry again. </td></tr></table>"; 

    } else { 
     $password = generateHash($password); 

     $result = mysql_query("UPDATE users SET avatar='" . $avatar . "' WHERE id='". $_SESSION['user_id'] . "'") 
     or die(mysql_error()); 
     $result = mysql_query("UPDATE users SET u_signature='" . $signature . "' WHERE id='". $_SESSION['user_id'] . "'") 
     or die(mysql_error()); 
     $result = mysql_query("UPDATE users SET u_bio='" . $bio . "' WHERE id='". $_SESSION['user_id'] . "'") 
     or die(mysql_error()); 
     $result = mysql_query("UPDATE users SET u_desc='" . $desc . "' WHERE id='". $_SESSION['user_id'] . "'") 
     or die(mysql_error()); 
     $result = mysql_query("UPDATE users SET u_intro='" . $intro . "' WHERE id='".  $_SESSION['user_id'] . "'") 
     or die(mysql_error()); 
      $result = mysql_query("UPDATE users SET password='" . $password . "' WHERE id='". $_SESSION['user_id'] . "'") 
     or die(mysql_error()); 
     printf('<script>window.location = "http://www.sw-bfs.com/index.php?siteid=profileedit"</script>'); 
    } 
} 

離開你的代碼的其餘部分相同,只是更換第一,如果/其他。

你的代碼格式可以使用一些清理,你應該真的壓縮mysql查詢。

+0

不,仍然沒有工作。 :( – user1924218

+0

是否有可能您使用的測試數據合法地失敗了錯誤檢查?當我運行它時,它似乎正常工作,因爲我認爲您打算。 –

+0

我通過回顯$ password來測試數據,如果我將其保留空白,它不會沒有出現,如果我輸入了某些內容,我鍵入的內容會顯示出來,但由於某種原因,IF中的一部分表現不正常。 – user1924218