【问题标题】:PHP SQL Updating One Row From Form At a TimePHP SQL一次从表单更新一行
【发布时间】:2015-11-11 15:08:12
【问题描述】:

我遇到了一次更新一行的 PHP 表单的问题。 它适用于第一行没问题,但下一行没有得到所有变量。例如,第 1 行将有 company1,检查已付款,未检查停用,它获取并更新所有变量。但是 company2 的行只获取复选框的 ID 和默认值。出于某种原因,它不会提取整行的信息,而只是提取 ID。任何帮助将不胜感激!

This is my Form (edited):
           <html>
    <body>

<form action="next.php" method="POST">
<table border="1" align="center">
<tr>
    <th>
        Name
    </th>
    <th>
        Address
    </th>
    <th>
        Paid
    </th>
    <th>
        Active
    </th>
</tr>
<?php
require_once ("connect.php");
require_once ("phpfunctions.php");
error_reporting(0);

    $cd=companyDisplay();

$result = mysqli_query($mysqli,$cd);


while($res=mysqli_fetch_array($result))
{
 $final[]=$row;


?>

<tr>
    <td class="name">
        <a href='edit.php?ID="<?php echo $res['ID']; ?>"'>
            <?php echo $res['name'];?>
        </a>
    </td>
    <td class="Address">
        <?php echo $res['Address'];?>
    </td>
    <td class="paid">
    <?php foreach($final as $k => $v){ ?>
        <input type="checkbox" value="0" name="results[<?= $k ?>][paid]"
        <?php } ?>
            <?php 
                if($res["paid"]==0)
                {
                echo "checked";
                }               
            ?>>

    </td>
    <td class="active">
    <?php foreach($final as $k => $v){ ?>
        <input type="checkbox" value="0" name="results[<?= $k ?>][active]"
        <?php } ?>
            <?php 
                if($res["active"]==0)
                {
                    echo "checked";
                }        
            ?> >
    </td>

    <td class="update">
        <?php foreach($final as $k => $v){ ?>
        <input type="hidden" name="results[<?= $k ?>][ID]" value="<?php echo $res['ID']; ?>">
            <?php } ?>
        <input type="submit" name="submit" value="Update">

    </td>
</tr>

<?php } ?>

</table>
</form>

    </body>
</html>


This is my next php page where the variables are posted and the query is run:

<?php
require_once ("connect.php");
require_once ("phpfunctions.php");
error_reporting(0);
var_dump($_POST);


//info to store from index.php
$ID=$_POST['ID'];
$ID= str_replace('"', '', $ID);
$paid=(isset($_POST['paid']))? 0 : 1;
$active = (isset($_POST['active']))? 0 : 1;


//adds updated info to database
$uc=updateCompany($paid,$active,$ID);
$r = mysqli_query($mysqli,$uc); 
echo "Information stored successfully";
echo $paid;
echo $active;
echo $ID;
?>

And here is my function:

function updateCompany($paid,$active,$ID)
{
    $uc="UPDATE
            `company`
        SET
            `paid`='$paid',
            `active`='$active'
        WHERE
            `ID`='$ID'";

    return $uc;
}

第一行的输出:

array(3) { ["paid"]=> string(1) "0" ["ID"]=> string(2) "12" ["submit"]=> string(6) "更新" } 信息存储成功 0(paid) 1(deactivate) 12(id)

下一行的输出:

array(2) { ["ID"]=> string(2) "13" ["submit"]=> string(6) "Update" } 信息存储成功 1(付费) 1(停用) 13(身份证)

两者都有相同的选择集,除了 ID 应该相同。我哪里错了?

【问题讨论】:

  • ?ID(GET 方法)并且您正在使用 POST 数组 $ID=$_POST['ID'];
  • 您有一个 &lt;form&gt; 循环在 &lt;form&gt; 内。这行不通。
  • 删除了表单中的表单,现在我得到了所有人的相同 ID。最后一行 ID。帖子 $ID 用于隐藏值。走错路了吗?

标签: php html mysql sql


【解决方案1】:

这里有多个问题:

  • 您的 forms 不需要 enctype="multipart/form-data",因为这与文件上传有关

  • &lt;tr&gt; 标签丢失。表头应该在&lt;tr&gt; 标签内

  • echo "checked=='checked'"; 有一个额外的= 符号,不需要,我只需将单词checked 放在那里

  • indexVerify.php?ID= 如果表单的方法是 POST 而不是 GET,为什么还要使用 ?ID=

  • &lt;form action='indexVerify.php?ID="&lt;?php echo $res['ID']; ?&gt;"' method="post"&gt; 在另一个 form 中。这是不允许的,并且会破坏您的 html 代码。

  • 您正在迭代您的结果并以错误的方式设置您的输入。这就是你现在基本上在做的事情:

    <form>
    <?php while ($res = mysqli_fetch_array($result)){ ?>
      <input type="checkbox" value="0" name="paid" />
    <?php } ?>
    </form>
    

    当您提交表单时,您将得到最后一个:$_POST[paid] = ""; 忽略所有其他结果。 要修复它,您的输入应该设置如下:

    <?php
    while ($res = mysqli_fetch_array($result)){
      $final[] = $row;
    }
    ?>
    <form>
    <?php foreach($final as $k => $v)){ ?>
         <input type="checkbox" value="0" name="results[<?= $k ?>][paid]" />
    <?php } ?>
    </form>
    

    像上面那样做会给你一个这样的数组结果:

    $_POST[results] = 
     (array)
        [0] => [
                 "paid" => ""
               ]
        [1] => [
                 "paid" => ""
               ]
    

    然后您可以对其进行迭代并将其提交到您的数据库。

【讨论】:

  • 从那个外观到数据库的迭代会如何?
  • 更改了表单,但数组仍然给我与最后一个相同的 ID。我发布了更改,也许我做错了什么
  • 嗨,欢迎来到 StackOverflow。这要解释很多,也许我可以通过Teamviewer远程帮助你。告诉我。
  • 有可能,您认为任何好的链接或参考资料可能会有所帮助?我仍然在数组中获得相同的 ID
  • 我假设您的意思是“不可能”?如果不是没问题。
猜你喜欢
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2011-02-22
  • 2014-04-05
  • 1970-01-01
相关资源
最近更新 更多