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