我在index.php页面中有一个表,其中有列和联系信息,还有额外的列来编辑该行中特定行中用户的信息。我有这样的代码:
echo "<td><a href='edit.php?id=".$row['id']."'>Edit</a></td>";
在edit.php页面中,我正在尝试更新该信息,但它不起作用!它成功地更新了echo,但在数据库中的值保持不变,有人能解释一下我的代码有什么问题吗?它是:
if(isset($_POST['update'])){ $id=$_GET['id'];
include('my_connection.php');
$newfname = $_POST['newfname'];
$newlname = $_POST['newlname'];
$newtelephone = $_POST['newtelephone'];
$newemail = $_POST['newemail'];
$newaddress = $_POST['newaddress'];
if($_POST[newname] == "" || $_POST[newname] == "" || $_POST[newtelephone] == "" || $_POST[newemail] == "" || $_POST[newaddress] == ""){
$false='Failed to update because some fields are Empty, please fill in all the fields';
}
else
{
$update="UPDATE `Addresses` SET firstname='$newfname', lastname='$newlname', telephone='$newtelephone', email='$newemail', address='$newaddress' WHERE userId='$userid' AND id='$id'";
$result=mysqli_query($connect, $update) or die(mysqli_error($connect));
$success='Updated successfully';
} }
$id=$_GET['id'];
这是您的问题部分,当您提交时,无法从get方法中获取值。所以你需要在你的表单中添加一些隐藏的字段,比如这个
<input type="hidden" name="id" value="<?php echo $_GET['id']; ?>">
像这样更改您的代码
if(isset($_POST['update'])){
$id=$_POST['id'];
也许它可以解决您的问题
这应该会起作用。如果你不是有意使用$_GET['id'],只是想让它通过,我建议你使用POST。
if(isset($_POST['update']))
{
$id=$_GET['id'];
include('my_connection.php');
$newfname = $_POST['newfname'];
$newlname = $_POST['newlname'];
$newtelephone = $_POST['newtelephone'];
$newemail = $_POST['newemail'];
$newaddress = $_POST['newaddress'];
if($_POST[newname] == "" || $_POST[newname] == "" || $_POST[newtelephone] == "" || $_POST[newemail] == "" || $_POST[newaddress] == "")
{
$result='Failed to update because some fields are Empty, please fill in all the fields';
}
else
{
$update="UPDATE `Addresses` SET firstname='".$newfname."', lastname='".$newlname."', telephone='".$newtelephone."', email='".$newemail."', address='".$newaddress."' WHERE userId='".$userid."' AND id='".$id."';";
mysqli_select_db($connect,"dbName");
$result=mysqli_query($connect, $update) or die(mysqli_error($connect));
$result='Updated successfully';
}
echo $result;
}
哦,忘了定义$userid
您在哪里定义$userid
?您的查询中有它,但我在您的脚本中看不到它:WHERE userId='$userid'
你把$_POST
和$_GET
混合在一起。虽然这在技术上是可能的,但我不确定你是在设计中这样做的,因为你似乎是在点击一个将"id"传递到URL查询字符串的编辑链接。但是你的$_POST
价值观是从哪里来的呢?你是否也以某种方式提交了form
?如果您只是按原样单击编辑链接,则不会留下任何$_POST
值。因此,如果您有<form>
,请同时发布。echo "<td><a href='edit.php?id=".$row['id']."'>Edit</a></td>";
是表单的一部分吗?
要获取所有值,您需要创建一个表单:
<form action="" method="post">
<input type="hidden" name="id" value="<?php echo $row['id']; ?>">
<input type="hidden" name="userid" value="<?php echo $row['userid']; ?>">
<input type="text" name="newfname" value="<?php echo $row['firstname']; ?>">
<input type="text" name="newlname" value="<?php echo $row['lastname']; ?>">
<input type="text" name="newtelephone" value="<?php echo $row['telephone']; ?>">
<input type="text" name="newemail" value="<?php echo $row['email']; ?>">
<input type="text" name="newaddress" value="<?php echo $row['address']; ?>">
<input type="submit" name="submit">
</form>
然后像这样获取$_POST
值(使用mysqli_real_escape_string()来避免SQL注入):
$newfname = mysqli_real_escape_string($_POST['newfname']);
$newlname = mysqli_real_escape_string($_POST['newlname']);
$newtelephone = mysqli_real_escape_string($_POST['newtelephone']);
$newemail = mysqli_real_escape_string($_POST['newemail']);
$newaddress = mysqli_real_escape_string($_POST['newaddress']);
$userid = mysqli_real_escape_string($_POST['userid']);
$id = mysqli_real_escape_string($_POST['id']);
您需要在代码中包含一些检索任何错误/问题的方法。尝试以下操作:
$update = "UPDATE `Addresses` SET firstname='$newfname', lastname='$newlname', telephone='$newtelephone', email='$newemail', address='$newaddress' WHERE userId='$userid' AND id='$id'";
$result = mysqli_query($connect, $update);
$success = 'Failed';
if ($result && mysqli_affected_rows($connect) > 0)
$success = 'Updated successfully';
else
trigger_error( "Query: " . $update . "'n'n" . mysqli_error($connect) );
*注意:这一行应该抛出一个NOTICE
(而不是错误),说明一些大意为:Use of undefined constant newname - assumed 'newname'
,等等。PHP常量
if($_POST[newname] == "" || $_POST[newname] == "" || $_POST[newtelephone] == "" || $_POST[newemail] == "" || $_POST[newaddress] == ""){
意思是,你需要用引号把键括起来,就像这样:
if($_POST['newname'] == "" || $_POST['newtelephone'] == "" || $_POST['newemail'] == "" || $_POST['newaddress'] == ""){