[英]Update a row mysql in php
我有一個看起來像這樣的表:
名字姓氏用戶名密碼角色
學生學生student@csd.auth.gr學生學生
學生2學生2學生2@csd.auth.gr學生2學生
而且我希望能夠在php中編輯一行。 值取自html文件,如下所示:
用戶名
student2@csd.auth.gr <-這將寫在文本框中
密碼
學生2 <-這將寫在文本框中
名稱
學生2 <-這將寫在文本框中
姓
學生2 <-這將寫在文本框中
角色
學生<-這將寫在文本框中
我的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文件中使用正確的值填充框?
有人能幫我嗎? 先感謝您。 :)
這里有很多事情。
始終以整數作為主鍵,例如:id MEDIUMINT NOT NULL AUTO_INCREMENT。 然后使其成為主鍵。
您需要使用mysql_real_escape_string()
清理對數據庫的輸入
您需要連接查詢,因此它應如下所示:
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姓='” .mysql_real_escape_string($ _ POST [nsurname])。“'SET角色='” .mysql_real_escape_string($ _ POST [nrole])。“''WHERE username ='”。mysql_real_escape_string($ _ POST [我們])。”'”);
這是更正的代碼:
<?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");
?>
注意_POST變量$ _POST ['nusername']的單引號有$ _POST [nusername]。
立即嘗試,看看是否更新。
當您遇到查詢問題時,請始終回顯查詢本身,以查看是否通過了正確的數據! 此外,我將這樣編寫查詢:
$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);
顯然,您發布的最新代碼中存在語法錯誤,當您從發布中獲取數據時,您有$_POST[nusername]
,並且應該是$_POST['nusername']
因為它是數組的索引,我也建議回顯查詢並注釋標頭調用,以便您可以查看發送到MySQL的查詢是什么
您的查詢需要修改為波紋管。
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/zh/function.mysql-real-escape-string.php
另外,我想建議您采取一些步驟來解決此類問題。 這只是一個例子。
第1步
在PHP代碼中需要SQL語句時。 您最好先在MySQL工具中編寫它,然后使用示例值對其進行測試。
UPDATE subscriber
SET
Subscriber_Name = 'Test' ,
Email = 'test@test.com'
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']) . "' ;"
第三步:
執行查詢。
$result = mysql_query($sql);
第四步 :
您可以查看是否有任何錯誤。
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>
$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-inject。 有人可能會繞過它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.