更新多个字段+行单个查询

时间:2014-06-17 13:04:13

标签: php mysqli

我目前正在开发一个CMS,我有一个画廊正在运行,最终用户可以上传他的照片,他们就在网上。 现在我想创建一个选项/功能,最终用户可以选择将哪些照片放在网上,哪些不会。我找到了一个名为update_multiple.php的脚本,它工作正常,但我使用的是MySQLi。我做了一些更改,所以它使用MySQLi,但现在脚本不工作,我不知道为什么。我没有得到任何错误。我的文字没有添加到我的数据库中。

希望有人可以帮助我解决我的错误。

我的代码;

<?php
ob_start();
require('../../lib/dbconnection.php');

$query = "SELECT * FROM gallery";
$result=$conn->query($query) or die(mysqli_error($conn));

$count=$result->num_rows;   

?>

<form name="form1" method="post" action="">
<table class="OnlineImages">
....
    <?php
        /* fetch associative array */
            while ($rows = $result->fetch_array(MYSQLI_ASSOC)) {
                ?>
            <tr>
                <td><?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?></td>
                <td align="center"><input name="filename[]" type="text" id="filename" value="<?php echo $rows['filename']; ?>"></td>
                <td><input type="text" name="title[]" id="title" value="<?php echo $rows['title'];?>"></td>
                <td><input type="text" name="caption[]" id="caption" value="<?php echo $rows['caption'];?>"></td>

                <td><input type="text" name="home[]" id="home" value="<?php echo $rows['home'];?>"></td>
                <td><input type="text" name="photobook[]" id="photobook" value="<?php echo $rows['photobook'];?>"></td><br>
            </tr>
                <?php
        }
        ?>
    <input type="submit" name="submit" value="Submit">
</form>
</table>
<?php

// Check if button name "Submit" is active, do this 
if(isset($_POST['submit'])){
$title = $_POST['title'];
$caption = $_POST['caption'];
$home = $_POST['home'];
$photobook = $_POST['photobook'];
for($i=0;$i<$count;$i++){
$sql1 = " UPDATE gallery SET title='$title[$i]', caption='$caption[$i]', home='$home[$i],photobook='$photobook[$i]' WHERE id='$id[$i]' ";
$result1=$conn->query($sql1);
}
}
if(isset($result1)){
header("location:foto-admin.php");
}
?>

2 个答案:

答案 0 :(得分:0)

您的变量必须在字符串中可识别。

你需要这样做:

" UPDATE gallery SET title='{$title[$i]}', caption='{$caption[$i]}', home='{$home[$i]}',photobook='{$photobook[$i]}' WHERE id='$id[$i]' "

你也错过了'回家后'。

请注意,这会导致sql注入,而应该使用准备好的语句来完成。


编辑:

传输id。变化

<td><?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?></td>

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

并添加

$id = $_POST['id'];

$title = $_POST['title'];

答案 1 :(得分:0)

据我所知,几个月前我已经在这个领域工作,我已经编写了一个更新多行/列的代码,希望这段代码能帮助你以不同的方式获得一个想法。

$group_sql  = $db->prepare("UPDATE `groups` SET `group`=? WHERE `group_id`=?;");

foreach($_POST['groups'] as $id => $group)

{

    $group_sql->execute(array($group, $id));

}

多次更新:

$query = array();

foreach($_POST['groups'] as $id => $group)

{

    $query[] = "WHEN {$id} THEN {$db->quote($group)}";

}


$query = "

UPDATE `groups`

SET `group` = CASE `group_id`

    " . implode("\r\n", $query) . "

END

WHERE `group_id` IN (" . implode(',', array_keys($_POST['groups'])) . ");

";

最终会产生:

UPDATE `groups`

SET `group` = CASE `group_id`

    WHEN 3054 THEN 'moteris savo vaikams'

    WHEN 3055 THEN 'bičių šeimoje'

END

WHERE `group_id` IN (3054,3055)


UPDATE `groups`

    SET `group` = CASE `group_id`

        WHEN 3054 THEN 'moteris savo vaikams'

        WHEN 3055 THEN 'bičių šeimoje'

    END,

    SET `description` = CASE `group_id`

        WHEN 3054 THEN 'foo'

        WHEN 3055 THEN 'bar'

    END

    WHERE `group_id` IN (3054,3055)