2012-02-23 132 views
1

我試圖在用戶表的密碼列中插入新密碼。我將兩個變量傳遞給SQL查詢,新密碼和用戶ID,但無論我做什麼,都無法使其工作。下面是SQL查詢:如何在使用PHP將變量傳遞給SQL查詢時將一個值插入表中

$sql = "INSERT INTO cryptuser WHERE userID ='" . $userid ."' (passwordnew) 
        VALUES ('$passwordnew') "; 

這裏是我的形式:

<fieldset> 

<legend>Change Password</legend> 

<form action="changepass.php" method="POST"> 
     <label>Current Password :</label> 
     <input type="password" name="password" /><br /> 
     <label>New Password :</label> 
     <input type="password" name="passwordnew" /><br/> 
     <label>Repeat New Password :</label> 
     <input type="password" name="passwordnewRepeat" /><br/> 
     <input class="signbutt" type="submit" value="Save"/><br /> 

</form> 

一旦我可以改變存儲在表中輸入密碼,然後我會創造更多的SQL只會改變如果輸入的當前密碼與現有密碼相匹配,則輸入新值的密碼,然後輸入JavaScript以確保重新輸入的密碼與新密碼匹配。

+1

您需要使用UPDATE。請發佈該表的數據庫模式。 – Juanma 2012-02-23 15:40:57

回答

2

要麼你插入

$sql = "INSERT INTO cryptuser (userID, password) VALUES (5, 's3cret') "; 

或更新

$sql = "UPDATE cryptuser SET password='s3cr3t' where userID =5"; 

和往常一樣:提醒一句!不要使用發佈的字符串並將它們直接插入到數據庫中,因爲您打開自己的SQL注入攻擊。你需要清理字符串。查閱條款以獲得進一步的指導。因爲評論的

編輯:

$sql = sprintf("UPDATE cryptuser SET password='%s' where userID =%d" , $newpassword, $userId); 
+0

嗨,我從一個會話變量中獲取用戶ID,每個用戶都會有所不同,所以我無法手動將用戶ID添加到查詢中。 – deucalion0 2012-02-23 15:42:51

+0

@ deucalion0你錯過了點..你可以使用變量..但在一個UPDATE語句 – mishu 2012-02-23 15:43:29

+0

你是對的,我一直在嘗試使用INSERT而不是UPDATE完全錯誤。它現在可以工作,謝謝你。 – deucalion0 2012-02-23 15:48:10

1

我想你應該看看在SQL手冊。

首先,它聽起來像你想要更新一個值,但你正在使用INSERT。尋找UPDATE語句

第二個問題:插入WHERE?

1

試着改變你的SQL這樣的:

$sql = "INSERT INTO cryptuser(userID, passwordnew) 
     VALUES('$userid', '$passwordnew')"; 

雖然,如果這是一個「更新密碼」的形式,它更有意義使用SQL UPDATE語句,因爲在表中記錄爲當前用戶可能已經存在......

$sql = "UPDATE cryptuser SET passwordnew = '$passwordnew' 
     WHERE userID = '$userid'"; 

我假設你已經消毒的變量保持你的價值觀,以防止SQL注入攻擊。你也應該考慮使用Prepared Statements

0

這是錯誤的SQL問題,不插入變量的問題
更新查詢的正確順序是

UPDATE cryptuser SET passwordnew='passwordnew' WHERE userID=1; 
+0

我實施了你的建議,它的工作完美。感謝您的幫助。 – deucalion0 2012-02-23 15:48:36