Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何更改每行中的字段?_Php_Mysql - Fatal编程技术网

Php 如何更改每行中的字段?

Php 如何更改每行中的字段?,php,mysql,Php,Mysql,我有一张像这样的桌子: id :int title :varchar info :text container :int status :int 我有一些代码将“status”字段的值从1更改为2,反之亦然(1显示在站点上,2隐藏) 我现在需要做的是: 当我将状态更改为1时,“container”字段中具有相同值的每一行的“status”字段都将更改为2。网站应仅为每个容器显示一条记录 这是我将“状态”更改为1的代码 (isset($_POST[

我有一张像这样的桌子:

id         :int
title      :varchar
info       :text
container  :int
status     :int
我有一些代码将“status”字段的值从1更改为2,反之亦然(1显示在站点上,2隐藏)

我现在需要做的是: 当我将状态更改为1时,“container”字段中具有相同值的每一行的“status”字段都将更改为2。网站应仅为每个容器显示一条记录

这是我将“状态”更改为1的代码

(isset($_POST['show'])){
$chk = (array) $_POST['show'];
$p = implode(',',array_keys($chk)); 
$t = "SELECT * FROM example WHERE id IN ($p)";
$shown = $link->query($t);
if ($shown){
   $q = "UPDATE example SET status = 1 WHERE id IN ($p)";
   $show = $link->query($q);
}
有人能帮我修改这个代码来做我需要的事情吗


欢呼声

给定一个由“id”标识的特定条目,该条目包含一个“容器”引用。 当此条目的状态设置为1时。具有相同“容器”引用的任何其他条目将其状态设置为2

这是非常未经测试的。。。猜猜列名

<?php
if (isset($_POST['show'])){
    $chk = (array) $_POST['show'];
    $p = implode(',',array_keys($chk));
    $t = "SELECT * FROM example WHERE id IN ($p)";
    $shown = $link->query($t);
    if ($shown){
        $currentContainer = $shown['container']; // all the records with this container
        $currentId = $p; // must not change this record later


        $q = "UPDATE example SET status = 1 WHERE id IN ($p)";
        $show = $link->query($q);

        $sql = "UPDATE example SET status = 2 WHERE container = '$currentContainer' AND id != $currentId";
        $others = $link->query($sql);
    }
}

由于我对您的代码不是很清楚,我做了一些假设:

  • $p
    是一个id为的数组,其状态必须更改为1
  • 数据库中具有相同容器的所有其他行的状态必须更改为2
  • $show
    是具有行数据的关联数组
  • 您不知道容器值,必须从数据库中检索它
  • 以下代码的作用: SELECT查询获取每个id的容器。 然后,对于每个id,容器用于将所有关联行更新为status=2 然后,第二个更新查询为指定的id设置status=1; 我还添加了一些转义以防止sql注入

    (isset($_POST['show'])){
        $chk = (array) $_POST['show'];
        $p = array_keys($chk); 
        $t = sprintf("SELECT id, container FROM example WHERE id IN ('%s')", implode("','", mysql_real_escape_string($p)));
        $shown = $link->query($t);
    
       foreach($shown as $row) {
           $q = sprintf("UPDATE example SET status = 2 WHERE container = %s", mysql_real_escape_string($row['container']));
           $link->query($q);
           $q = sprintf("UPDATE example SET status = 1 WHERE id = %s", mysql_real_escape_string($row['id']));
           $link->query($q);    
       }
    

    你的数据结构是错误的。在
    示例
    表中,似乎有
    容器
    的属性。您应该为
    容器
    和加入信息(如
    状态
    )创建一个单独的表。您能向我澄清一下吗“container”只是一个包含int(1、2或3)的字段。我有3个容器在我的网站上,你看,你喷了它,它们也是1,2和3