Php MySQL中的更新问题
我是初学者 我现在面临的问题变得相当乏味,尽管我做这件事是一种爱好,但在过去的几天里,我一直停留在这一点上,并尝试到处寻找解决方案。 我甚至完全修改了我的代码,遵循其他示例/教程 这是我最接近的 一切都填好了,表格也提交了。它表示成功,但当我返回页面时,该字段尚未更新。我甚至直接检查了数据库,以确保输出显示没有错误。但它也没有出现在那里 (表中确实有其他条目,但我只希望此页面编辑其中一个条目) 如果您能帮我指出我的错误以及原因,我们将不胜感激。最好是知道我哪里出了错,这样我可以在将来看到它Php MySQL中的更新问题,php,html,mysql,Php,Html,Mysql,我是初学者 我现在面临的问题变得相当乏味,尽管我做这件事是一种爱好,但在过去的几天里,我一直停留在这一点上,并尝试到处寻找解决方案。 我甚至完全修改了我的代码,遵循其他示例/教程 这是我最接近的 一切都填好了,表格也提交了。它表示成功,但当我返回页面时,该字段尚未更新。我甚至直接检查了数据库,以确保输出显示没有错误。但它也没有出现在那里 (表中确实有其他条目,但我只希望此页面编辑其中一个条目) 如果您能帮我指出我的错误以及原因,我们将不胜感激。最好是知道我哪里出了错,这样我可以在将来看到它 &l
<?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";
}
?>
这应该可以解决您的问题
$sql = "UPDATE {$tbl_name} SET modname='{$modname}' WHERE id='{$id}'";
希望有帮助 即使您的id
字段在表单中是一个隐藏字段,它仍然作为POST属性发送,因此您需要$\u POST['id']
来检索值(而不是$\u GET['id']
)
此外,您应该将表名和列名放在`逗号'中,如下所示
$sql = "UPDATE `$tbl_name` SET `modname`='$modname' WHERE `id`='$id'";
然而,您的代码也对SQL注入敞开了大门。阅读并重写代码。在本例中,您的查询是可靠的,语法是正确的,但您的变量不包含所需的值。由于您正在学习,我想提供一些建议和示例代码
虽然您的代码仍然有些简单,但请更改为。语法类似,但它不像mysql那样被降级,您可以使用准备好的语句
在开发阶段,始终为您的功能/条件启用错误报告
在尝试将变量与isset()、empty()等一起使用之前,请务必验证变量是否包含所需的值
在插入数据库之前,始终验证/清理/转义用户输入
样本:
因此,您最初似乎是从查询字符串中获取id
,例如http://domain.com/get_id.php?id=1
?如果是这样,您的代码应该可以工作,只需确保您的URL格式正确即可。如果您是从您的
获取id
,那么它应该是$\u 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();
}
那怎么解决呢?除了感谢你的建议外,它和他已经拥有的一样。不幸的是,它输出了相同的结果:(这应该不会有什么不同,我已经多次这样做了,特别是在列名方面。这是最佳做法。这是一个很好的做法,但可能无法解决他们的问题。我已经通读了它,理解了你所说的。假设我从上面的评论中正确理解了,它应该是通过e form.beging hidden并没有像我想象的那样改变这一点。不幸的是,使用您所说的返回“ID为空”。因为您的表单方法是post,是的,ID也应该是$\u post。这
$sql=“SELECT modname FROM$tbl\u name WHERE ID='$ID'”;
应该是$sql=“SELECT ID,modname FROM$tbl\u name WHERE ID='$ID'';
。您正在回显您的id以发送值,但您尚未在查询中选择该值,并且该值不在数组中。已按建议进行更新。遗憾的是,仍然没有解决问题,并且仍然收到声明“id为空”的id我相信您的查询没有返回任何结果。Where id='$id'
中的$id
来自哪里?似乎您可能需要先设置它。将Where id='$id'
更改为Where id='1'
,看看它是否按预期工作。Mega-derp。通过编辑,我错过了编辑的一个关键部分。if(!empty($u GET['id'])){从未更改为if(!empty($_POST['id']){。而第二部分是。我现在觉得很傻。我的借口是现在是凌晨2点。非常感谢您的帮助!
// 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();
}
// 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>