2012-02-16 49 views
0

我有一個表,看起來像這樣:更新在PHP MySQL的連續

名姓用戶名密碼角色

學生學生[email protected]學生學生

STUDENT2 STUDENT2 [email protected] STUDENT2學生

,我希望能夠在PHP編輯一行。 的值是從一個html文件,採取這樣的:

用戶名

[email protected] < - 這將在文本框中

密碼

student2 < - 將寫入文本框

名稱

STUDENT2 < - 這將在文本框中寫入

STUDENT2 < - 這將被寫入一個文本框中

角色

學生< - 這將在文本框中寫入

我的PHP文件是:

<?php 
$hostname = "localhost"; 
$database = "mydb"; 
$username = "myuser"; 
$password = "mypsw"; 
$link = mysql_connect($hostname , $username , $password) or 
     die("Prosoxi!Provlima stin sundesi me ton server : " . mysql_error()); 
mysql_select_db($database,$link); 

mysql_query("UPDATE user 
     SET username = '".mysql_real_escape_string($_POST[nusername])."', 
     SET password = '".mysql_real_escape_string($_POST[npassword])."', 
     SET name = '".mysql_real_escape_string($_POST[nname])."', 
     SET surname = '".mysql_real_escape_string($_POST[nsurname])."', 
     SET role = '".mysql_real_escape_string($_POST[nrole])."' 
     WHERE username='".mysql_real_escape_string($_POST[us])."'"); 

mysql_close($link); 
header("Location: users.php"); 
?> 

1.更新不會發生,所以有一些錯誤php文件,我無法找到。

2.如果我選擇某個用戶名,我該如何在html文件中使用正確的值實現已填充的框?

有人可以幫我嗎?先謝謝你。 :)

回答

2

當您遇到查詢問題時,請始終回顯查詢本身以查看正確的數據是否正在通過!此外,我會寫這樣的查詢:

$sql = "UPDATE user 
      SET username = '".mysql_real_escape_string($_POST[nusername])."' 
      SET password = '".mysql_real_escape_string($_POST[npassword])."' 
      SET name = '".mysql_real_escape_string($_POST[nname])."' 
      SET surname = '".mysql_real_escape_string($_POST[nsurname])."' 
      SET role = '".mysql_real_escape_string($_POST[nrole])."' 
      WHERE username='".mysql_real_escape_string($_POST[us])."'"; 

// test 
echo $sql; 

mysql_query($sql); 
+1

請編輯您的答案,包括字符串轉義查詢。如果他真的使用這個SQL,他會打開自己的SQL注入。 – jeremysawesome 2012-02-16 03:55:29

+0

@jeremysawesome編輯只爲你:) – 2012-02-16 17:00:20

0

您的查詢需要修改爲以下。

mysql_query("UPDATE user 
      SET username = '" .$_POST[nusername] . "' , 
      password = ' " .$_POST[npassword] . "', 
      name = '" . $_POST[nname] . " ', 
      surname = '" . $_POST[nsurname]', 
      role = '$_POST[nrole] . "' 
      WHERE username='" . $_POST[us] . "'"); 

此外,你是開放的SQL注入攻擊。所以你最好使用mysql_real_escape_string()函數。

http://php.net/manual/en/function.mysql-real-escape-string.php

此外,我想建議你幾個步驟來過這種問題。這只是一個例子。

步驟1

當你需要在你的PHP代碼的SQL語句。你最好先寫你的MySQL工具,並用樣本值進行測試。

UPDATE subscriber 
    SET 
    Subscriber_Name = 'Test' , 
    Email = '[email protected]'  
    WHERE 
    Subscriber_ID = '2' ; 

第2步:

如果查詢工作正常然後將其複製到PHP。並用mysql_real_escape_string()支持替換值。

$sql = "UPDATE subscriber 
    SET 
    Subscriber_Name = '" . mysql_real_escape_string($_POST['name']) . "' , 
    Email = '" . mysql_real_escape_string($_POST['email']) . "'  
    WHERE 
    Subscriber_ID = '" . mysql_real_escape_string($_POST['id']) . "' ;" 

第3步:

執行查詢。

$result = mysql_query($sql); 

第4步:

你可以看到任何如有有任何錯誤。

echo mysql_error(); 

編輯:

爲您解答問題2「?我怎樣才能達到既充滿箱在HTML文件中,有正確的價值觀,如果讓我選擇一個特定的用戶名」可能是這樣的。

首先,您必須編寫一個select語句並獲取所需的任何數據。防爆。

$sql = "SELECT user.username, user.name, user.surname , user.role FROM USER WHERE user.username = '" . mysql_real_escape_string($_POST[us]) . "'"; 

$result = mysql_query($sql, $link) or die(mysql_error()); 

$row = mysql_fetch_assoc($result); 

然後把你的HTML代碼。例如:

<form action="edit_user.php" method="post"> 
<p>Username<input type="text"name="nusername" size="40" value="<?php echo $row['username'];?>"></p> 
<p>Password<input type="password"name="npassword" size="40"></p> 
<p>Name<input type="text"name="nname" size="40" value="<?php echo $row['name'];?>"></p> 
<p>Surname<input type="text"name="nsurname" size="40" value="<?php echo $row['surname'];?>"></p> 
<p>Role<input type="text"name="nrole" size="40" value="<?php echo $row['role'];?>"></p> 
<p><input type="submit></p> 
</form> 
+0

我沒有你提出什麼,但它仍然不能做任何事情......是否有可能存在與HTML部分,從該PHP文件所採用的值的問題? – felice 2012-02-16 03:22:15

+0

用戶名

Password

姓名

姓氏

作用

felice 2012-02-16 03:22:31

+0

請編輯您的問題,我也無法理解。因爲它的格式化。 – 2012-02-16 03:34:27

3

這裏有很多事情要做。

  1. 總是我們一個整數作爲主鍵,例如:ID MEDIUMINT NOT NULL AUTO_INCREMENT。然後把它作爲主鍵。

  2. 你需要你輸入消毒用mysql_real_escape_string()

  3. 您需要連接查詢的數據庫,所以它應該是這樣的:

    的mysql_query(「更新用戶 設置用戶名=「」 ('_ _ POST [nusername])。「' SET password ='」.mysql_real_escape_string($ _ POST [npassword])。'' SET'name ='「.mysql_real_escape_string($ _ POST [nname])。'' SET surname ='「.mysql_real_escape_string($ _ POST [nsurname])。」' SET role ='「.mysql_real_escape_string($ _ POST [nrole])。'' WHERE username ='」。mysql_real_escape_string($ _ POST [us])。「'」);

這裏被糾正代碼:

<?php 
$hostname = "localhost"; 
$database = "mydb"; 
$username = "myuser"; 
$password = "mypsw"; 
$link = mysql_connect($hostname , $username , $password) or 
     die("Prosoxi!Provlima stin sundesi me ton server : " . mysql_error()); 
mysql_select_db($database,$link); 

mysql_query("UPDATE user 
     SET username = '".mysql_real_escape_string($_POST['nusername'])."', 
     SET password = '".mysql_real_escape_string($_POST['npassword'])."', 
     SET name = '".mysql_real_escape_string($_POST['nname'])."', 
     SET surname = '".mysql_real_escape_string($_POST['nsurname'])."', 
     SET role = '".mysql_real_escape_string($_POST['nrole'])."' 
     WHERE username='".mysql_real_escape_string($_POST['us'])."'"); 

mysql_close($link); 
header("Location: users.php"); 
?> 

通知單引號周圍的彥博VAR,$ _ POST [ 'n用戶名']你有$ _ POST [n用戶名]。

現在就來試試,看看它是否更新。

+0

我做了你的建議,但它仍然沒有做任何事情......有可能是有問題的HTML部分,從中獲取的PHP文件的值?

用戶名

Password

名稱

角色< input type =「text」name =「nrole」size =「40」>

felice 2012-02-16 03:09:38

+0

請使用更新的代碼編輯您的問題。 – 2012-02-16 03:44:06

+0

對不起,我剛剛更新了這個問題! :) – felice 2012-02-16 03:51:19

0
$query = mysql_query("UPDATE user 
       SET username = '" .mysql_escape_string($_POST[nusername]) . "' 
       password = ' " .mysql_escape_string($_POST[npassword]) . "' 
       name = '" . mysql_escape_string($_POST[nname]) . " ' 
       surname = '" . mysql_escape_string($_POST[nsurname])."' 
       SET role = '".mysql_escape_string($_POST[nrole]) . "' 
       WHERE username='" .mysql_escape_string($_POST[us]) . "'"); 

如果一切都失敗,則回顯SQL語句,然後粘貼到SQL Browser/PHPMyAdmin然後在那裏調試它。然後,您只需將代碼替換爲無錯代碼即可。


您需要確保您發送的數據是免費的sql注入。有人可能只是繞過它..

0

顯然有在您發佈最新的代碼語法錯誤,當你獲得後你有$_POST[nusername]的數據,它應該是$_POST['nusername'],因爲它是數組的索引,和我還建議呼應查詢和評論的標題號召,所以你可以看到什麼是被髮送到MySQL

+0

哦,我忘了提及你應該爲所有POST變量添加撇號 – 2013-05-23 16:58:50