在MySQL中使用UPDATE苦苦挣扎

时间:2014-11-19 00:58:21

标签: php html mysql

初学者。

我面临的问题是现在变得相当乏味,尽管我这样做是一种爱好,过去几天我一直困在这一点,并试图到处寻找解决方案。 我甚至完全修改了我的代码,遵循其他示例/教程。

这是我最接近的。

所有内容都填写完毕,表单已提交。它表示成功,但当我返回页面时,该字段尚未更新。我甚至直接检查了数据库,以确保输出显示没有错误。但它也没有出现在那里。

(我的表中还有其他条目,但我只想让这个页面编辑其中一个)。

任何帮助指出我的错误,为什么会非常感激。最好知道我哪里出错了所以我将来可以留意它。

<?php
$host="****"; // Host name 
$username="****"; // Mysql username 
$password="****"; // Mysql password 
$db_name="****"; // Database name 
$tbl_name="****"; // Table name 

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// get value of id from the address bar
$id=$_GET['id'];

// get value of modname from the form
$modname=$_POST['modname'];

// update data in mysql database 
$sql = "UPDATE $tbl_name SET modname='$modname' WHERE id='$id'";
$result=mysql_query($sql);

// if successfully updated. 
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='edit.php'>Return to overview</a>";
}

else {
echo "ERROR";
}

?>

带有表单的页面。

<?php
$host="****"; // Host name 
$username="****"; // Mysql username 
$password="****"; // Mysql password 
$db_name="****"; // Database name 
$tbl_name="****"; // Table name 

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// get value of id that sent from address bar


// Retrieve data from database 
$sql="SELECT modname FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);
?>

<form name="form1" method="post" action="update_ac.php">
<input name="modname" type="text" id="modname"></td>
<br>
<input name="id" type="hidden" id="id" value="<? echo $rows['id']; ?>">
<br>
<input type="submit" name="Submit" value="Submit">
</form>

3 个答案:

答案 0 :(得分:0)

即使您的id字段是表单中的隐藏字段,它仍然作为POST属性发送,因此您需要$_POST['id']来检索值(而不是$_GET['id'])。< / p>

另外,你应该把表和列名放在`逗号中,像这样;

$sql = "UPDATE `$tbl_name` SET `modname`='$modname' WHERE `id`='$id'";

但是,您的代码也对SQL注入开放。阅读this question并重写您的代码。

答案 1 :(得分:0)

在这种情况下,您的查询是可靠的,语法是正确的,但您的变量不包含您期望的值。由于您正在学习,我想提供一些建议和示例代码。

  1. 虽然您的代码仍然有点简单,但请更改为mysqli API。语法类似,但它不像mysql那样被删除,你可以使用预处理语句。
  2. 处于开发阶段时,请始终为您的功能/条件启用错误报告。
  3. 在尝试将它们与isset(),empty()等一起使用之前,请务必确保您的变量包含您期望的值。
  4. 在插入数据库之前,始终验证/清理/转义用户输入。
  5. 样品:

    所以您最初从查询字符串中获取id,例如http://domain.com/get_id.php?id=1?如果是这样,您的代码应该可以正常运行,只需确保您的URL正确形成即可。如果您从&lt; id获取form>,那么它应该是$_POST

    // get value of id from the address bar
    if(!empty($_GET['id'])) {
        $id=$_GET['id'];
    } else {
       echo "ID is empty";
    }
    
    // get value of modname from the form
    if(!empty($_POST['modname'])) {
        $modname=$_POST['modname'];
    } else {
       echo "ID is empty";
    }
    
    // update data in mysql database 
    $sql = "UPDATE $tbl_name SET modname='$modname' WHERE id='$id'";
    $result=mysql_query($sql);
    
    // if successfully updated. 
    if($result){
    echo "Successful";
    echo "<BR>";
    echo "<a href='edit.php'>Return to overview</a>";
    }
    
    else {
    echo mysql_error();
    }
    

    在您的表单上,您需要选择id才能echo

    // Retrieve data from database 
    $sql="SELECT id,modname FROM $tbl_name WHERE id='$id'";
    $result=mysql_query($sql);
    $rows=mysql_fetch_array($result);
    ?>
    
    <form name="form1" method="post" action="update_ac.php">
    <input name="modname" type="text" id="modname"></td>
    <br>
    <input name="id" type="hidden" id="id" value="<? echo $rows['id']; ?>">
    <br>
    <input type="submit" name="Submit" value="Submit">
    </form>
    

答案 2 :(得分:-2)

这可以解决您的问题。

$sql = "UPDATE {$tbl_name} SET modname='{$modname}' WHERE id='{$id}'";

希望它有所帮助!