Php 使用mysql发布表单并更新多行
我已经搜索了整个网站,但还没有找到答案。也许我不能正确地应用它。我有一个表格,可以抓取所有照片,并附上特定的图库id。后端用户可以更改照片的标题和标签。提交表单后,查询应更新所有行。以下是迄今为止我所拥有的,但没有任何作用的东西: 表格Php 使用mysql发布表单并更新多行,php,mysql,Php,Mysql,我已经搜索了整个网站,但还没有找到答案。也许我不能正确地应用它。我有一个表格,可以抓取所有照片,并附上特定的图库id。后端用户可以更改照片的标题和标签。提交表单后,查询应更新所有行。以下是迄今为止我所拥有的,但没有任何作用的东西: 表格 if(isset($_GET['id'])) { $id=$_GET['id']; $result = $db->prepare("SELECT * FROM photos WHERE gallery_id = :gallery_id "
if(isset($_GET['id']))
{
$id=$_GET['id'];
$result = $db->prepare("SELECT * FROM photos WHERE gallery_id = :gallery_id ");
$result->bindParam(':gallery_id', $id);
$result->execute();
echo '<form action="" method="POST">';
echo "<ul id='photos'>";
for ($i = 0; $row = $result->fetch(); $i++)
{
$id = $row['id'];
$title = $row['title'];
$tags = $row['tags'];
$src = $row['src'];
echo "<li><a class='lightbox' href='images/$src'><img src='images/$src' id='$id' alt='$title' /></a><br />";
echo "<input type='text' name='photo_title' value='$title' /><br />";
echo "<input type='text' name='photo_tags' value='$tags' />";
echo "<input type='hidden' name='photo_id' value='$id' />";
echo "</li>";
}
echo "</ul>";
}
?>
<div style="clear:both"></div>
<input type="submit" name="changeTitle" value="Save"/>
</form>
由于您有多个同名的html字段,因此必须将它们作为数组提交:
echo "<input type='text' name='photo_title[]' value='$title' /><br />";
echo "<input type='text' name='photo_tags[]' value='$tags' />";
echo "<input type='hidden' name='photo_id[]' value='$id' />";
你检查过错误日志了吗?您假设查询正在运行。打开
I已设置错误报告后,立即将错误报告添加到文件顶部。它只是重新加载页面,但没有提交任何内容,也没有给出错误。这是完美的。我想我应该更深入地了解我在做什么。我将投入更多的时间学习php数组等。谢谢-超级!
echo "<input type='text' name='photo_title[]' value='$title' /><br />";
echo "<input type='text' name='photo_tags[]' value='$tags' />";
echo "<input type='hidden' name='photo_id[]' value='$id' />";
foreach ($_POST['photo_id'] as $key => $photo_id) {
$id = $photo_id;
$title = $_POST['photo_title'][$key];
$tags = $_POST['photo_tags'][$key];
$sql = "UPDATE photos SET title=?, tags=? WHERE id=?";
$query = $db->prepare($sql);
$query->execute(array($title, $tags, $id));
}