PHP/mysql更新行失败


PHP/mysql update row failure

我在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'] == ""){