PHP SQL一次从表单更新一行

时间:2015-08-18 15:23:27

标签: php html mysql sql

我遇到了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”] =&gt; string(1)“0”[“ID”] =&gt; string(2)“12”[“submit”] =&gt; string(6)“Update”}信息存储成功0(付费)1(停用)12(id)

下一行的输出:

  

array(2){[“ID”] =&gt; string(2)“13”[“submit”] =&gt; string(6)“Update”}信息存储成功1(付费)1(停用)13(ID)

两者都设置了相同的选项,除了ID之外应该相同。我在哪里错了?

1 个答案:

答案 0 :(得分:0)

这里有多个问题:

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

  • <tr>标签丢失。表格标题应位于<tr>代码

  • echo "checked=='checked'";有一个额外的=标志,不需要,我只想在checked放置

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

  • <form action='indexVerify.php?ID="<?php echo $res['ID']; ?>"' method="post">位于另一个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" => ""
               ]
    

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