如何使用唯一ID更新表行数据?

时间:2017-05-09 06:55:01

标签: php mysqli

代码:

<?php
if(isset($_POST['save']))
{
  $comment1 = $_POST['comment2'].",".date('Y-m-d');
  $comment2 = $_POST['comment2'];
  $id = $_POST['id'];
  $query = "update enquires2 set comment1 = '$comment1', comment2 = '$comment2', s_date = '$s_datee' where id='$id'";
  $result = mysqli_query($link,$query);
  if($result==true)
  {
    echo "successfull";
  }
  else
  {
    echo "error!";
  }
}
?>

<form method="post" name="myform">
<table>
  <tr>
    <th>comment1</th>
    <th>comment2</th>
    <th>Action</th>
  </tr>
  <?php
    $sql = "select * from enquires2 ";
    $result = mysqli_query($link,$sql);
    while ($row = mysqli_fetch_array($result)) 
    {
  ?>
  <tr>
    <td>
      <input type='hidden' name='id' value='<?php echo $row['id']; ?>'>
    </td>

    <td>
     <?php echo $row['comment1']; ?>
    </td>

    <td>
      <input type='text' name='comment2' id='comment2' value=""/>
    </td>

    <td>
      <input type ='submit' name='save' id='save' value='Save' />
    </td>
  </tr>
  <?php
    }
  ?>
</table>
</form>

enter image description here

在这段代码中,我想用唯一的id更新表enquires2。在下面的图像中,您会看到具有保存按钮的表行,这只是一行,类似于它有多行,每行都有保存按钮。现在我希望当我点击特定行的保存按钮时,只会更新行数据。我该如何解决这个问题?请帮忙。

谢谢

4 个答案:

答案 0 :(得分:0)

您可以使用AJAX和jQuery执行此操作,并将数据发送到单独的PHP文件,并将false分配给按钮的数据值属性,

$row['ID']

在PHP文件中,您可以获取ID,

$("#save-btn").click(function(){ id = $(this).attr(data-value); ***** rest of values here $.ajax({ method: "GET", data: {id: id, rest of: data here}, url: phpfile.php, success: function(){ console.log("Success"); } }) }); ,与其他值相同,因为我们使用的是GET方法,然后将它们放入更新查询中。

答案 1 :(得分:0)

首先,出于安全原因,您需要将此查询更改为预准备语句,请参阅PHP MySQLI Prevent SQL Injection

  $id = $_POST['id'];
  $query = "update enquires2 set comment1 = '$comment1', comment2 = $comment2', s_date = '$s_datee' where id='$id'";
  $result = mysqli_query($link,$query);

<小时/> 无论如何,这条线路都很糟糕,你错过了$ comment2的开场报价。

  $query = "update enquires2 set comment1 = '$comment1', comment2 = $comment2', s_date = '$s_datee' where id='$id'";

你确定$ link是一个真正的mysqli链接吗?

对于html部分,您需要为每条记录mkae一个表单。请参阅发布的HTML: Is it possible to have a FORM tag in each TABLE ROW in a XHTML valid way?

链接

或者你可以做一些不好的事情,比如只为每一行添加$ id到evry字段(类似于:)

<input type ='submit' name='save[<?=$id;?>]' id='save' value='Save' />

并在php代码中检查女巫密钥设置。

if(isset($_POST['save']) && is_array($_POST['save'])){
   $id=key($_POST['save']);
}

您还需要为您的评论复制不良内容,但作为概念证明,您可以在phpfiddle.org上运行此代码段

<?php
print_r($_POST);
if(isset($_POST['save']) && is_array($_POST['save'])){
  echo key($_POST['save']);
}
?>
<html>
    <form method='post'>
        <input type='submit' name='save[1]' value='1' />
        <input type='submit' name='save[2]' value='2' />
    </form>
</html>

希望我能为您提供一个非常完整的答案,但是您的代码还有很多工作需要进行正确的编码。除了你的代码可以使用sql注入并且不可接受这一事实之外,这也是一个意见问题。

答案 2 :(得分:-1)

根本不使用您的代码来解决安全漏洞。阅读有关sql注入Here的更多信息。毕竟,对于每一行(),创建一个带有隐藏输入的表单,存储行的id。

答案 3 :(得分:-1)

我修改了我的代码以使其工作,在你的td中创建一个嵌套表,以便接受该标记,

另见此链接以获取工作参考, HTML: Is it possible to have a FORM tag in each TABLE ROW in a XHTML valid way?

    <?php
    if(isset($_POST['save']))
    {
      $comment1 = $_POST['comment2'].",".date('Y-m-d');
      $comment2 = $_POST['comment2'];
      $id = $_POST['id'];
      $query = "update enquires2 set comment1 = '$comment1', comment2 = '$comment2', s_date = '$s_datee' where id='$id'";
      $result = mysqli_query($link,$query);
      if($result==true)
      {
        echo "successfull";
      }
      else
      {
        echo "error!";
      }
    }
    ?>


    <table>
      <tr>
        <th>comment1</th>
        <th>comment2</th>
        <th>Action</th>
      </tr>
      <?php
        $sql = "select * from enquires2 ";
        $result = mysqli_query($link,$sql);
        while ($row = mysqli_fetch_array($result)) 
        {
      ?>
<tr><td><table>

    <form method="post" name="myform">

      <tr>
        <td>
          <input type='hidden' name='id' value='<?php echo $row['id']; ?>'>
        </td>

        <td>
         <?php echo $row['comment1']; ?>
        </td>

        <td>
          <input type='text' name='comment2' id='comment2' value=""/>
        </td>

        <td>
          <input type ='submit' name='save' id='save' value='Save' />
        </td>
      </tr>
    </form>

</table>
</td>
</tr>
      <?php
        }
      ?>
    </table>