簡體   English   中英

在php中更新一行mysql

[英]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文件中使用正確的值填充框?

有人能幫我嗎? 先感謝您。 :)

這里有很多事情。

  1. 始終以整數作為主鍵,例如:id MEDIUMINT NOT NULL AUTO_INCREMENT。 然后使其成為主鍵。

  2. 您需要使用mysql_real_escape_string()清理對數據庫的輸入

  3. 您需要連接查詢,因此它應如下所示:

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM