$_POST 在 fetch_assoc 中具有相同的名称

$_POST with the same name in a fetch_assoc

大家好
今天我有一个有趣的问题(至少对我来说是这样)。我正在创建 div 和输入
在 fetch_assoc 中,我想知道提交所有这些输入的最佳方式。它们
具有相同的名称,但它们具有不同的值,有时甚至相同。

这是代码:

<?php
$sql = "SELECT IDBewoner, Foto FROM Bewoners LIMIT 5";
$res = mysqli_query($mysqli, $sql);
$totaalbewoners = mysqli_num_rows($res);
while($row = mysqli_fetch_assoc($res)) {
?>
<tr>
    <form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="POST">
        <td><input type="text" value="<?php echo $row["IDBewoner"] ?>" name="bewoner"></td>
    <td> <?php echo $row["IDBewoner"] ?> </td>
    <td> <?php echo "<img src='data:image/jpeg;base64,".base64_encode($row['Foto'])."' width='90' height='90'>" ?> </td>

    <td> 
        <div id="rang1" class="DropZone"></div> 
        <input type="hidden" value="" id="rang1input" name="rang1value" />
    </td>
    <td> 
        <div id="rang2" class="DropZone"></div> 
        <input type="hidden" value="" id="rang2input" name="rang2value" />
    </td>
    <td> 
        <div id="rang3" class="DropZone"></div> 
        <input type="hidden" value="" id="rang3input" name="rang3value" />
    </td>
    <td> 
        <div id="rang4" class="DropZone"></div> 
        <input type="hidden" value="" id="rang4input" name="rang4value" />
    </td>
    <td> 
        <div id="rang5" class="DropZone"></div>
        <input type="hidden" value="" id="rang5input" name="rang5value" />
    </td>
    <td> 
        <div id="rang6" class="DropZone"></div> 
        <input type="hidden" value="" id="rang6input" name="rang6value" />
    </td>
    <td> 
        <div id="rang7" class="DropZone"></div> 
        <input type="hidden" value="" id="rang7input" name="rang7value" />
    </td>
    <input type="submit" value="Save">
    </form> 
</tr>

<?php
if($_SERVER["REQUEST_METHOD"] == "POST") {

    /*for($i = 0; $i < $totaalbewoners; $i++) { [!!DANGEROUS CODE!!]
        $rang1bewoner.$i = $_POST["rang1value"][$i];
    }*/ 

    $rang1 = $_POST["rang1value"];
    $rang2 = $_POST["rang2value"];
    $rang3 = $_POST["rang3value"];
    $rang4 = $_POST["rang4value"];
    $rang5 = $_POST["rang5value"];
    $rang6 = $_POST["rang6value"];
    $rang7 = $_POST["rang7value"];
    $bewonerID = $_POST["bewoner"];

    /*echo "<script>alert('Bewoner: $bewonerID')</script>";
    echo "<script>alert('Rang1: $rang1')</script>";
    echo "<script>alert('Rang2: $rang2')</script>";
    echo "<script>alert('Rang3: $rang3')</script>";
    echo "<script>alert('Rang4: $rang4')</script>";
    echo "<script>alert('Rang5: $rang5')</script>";
    echo "<script>alert('Rang6: $rang6')</script>";
    echo "<script>alert('Rang7: $rang7')</script>";*/

}

}
?>

我首先将 if $_SERVER["METHOD_REQUEST"] 放在 fetch_assoc 下,但只得到了值
第一行的。然后我把它放在 while fetch_assoc 中(正如你在我的代码中看到的那样),但没有用
要么一遍又一遍地得到相同的值。然后我尝试更改输入的名称
name="rang6value[]" 然后在 php 代码中我写了 for 使用总行数作为
最大值(您可以在 php 的评论中看到它)并且我的浏览器崩溃了(这很有趣)。

所以现在的问题是:如何以一种简单的方式为
获取输入字段的所有值 所有的行?如果你能帮助我,我的生活会好得多。

非常感谢您。 ^^

更新:插入代码:

<?php 

if($_SERVER["REQUEST_METHOD"] == "POST") {

    $rang1 = $_POST["rang1value"];
    $rang2 = $_POST["rang2value"];
    $rang3 = $_POST["rang3value"];
    $rang4 = $_POST["rang4value"];
    $rang5 = $_POST["rang5value"];
    $rang6 = $_POST["rang6value"];
    $rang7 = $_POST["rang7value"];
    $bewonerID = $_POST["bewoner"];


    if(!empty($rang1)) {
        $insert1 = "INSERT INTO ActiviteitenSchema
                   (DagVanDeWeek, Bewoner, Activiteit, DatumAangemaakt, Rangnr)
                   VALUES
                   (4, '$bewonerID', '$rang1', '2015-04-14', 1)";
        $res = $mysqli->query($insert1);
    }

    if(!empty($rang2)) {
        $insert2 = "INSERT INTO ActiviteitenSchema
                   (DagVanDeWeek, Bewoner, Activiteit, DatumAangemaakt, Rangnr)
                   VALUES
                   (4, '$bewonerID', '$rang2', '2015-04-14', 2)";
        $res = $mysqli->query($insert2);
    }

    if(!empty($rang3)) {
        $insert3 = "INSERT INTO ActiviteitenSchema
                   (DagVanDeWeek, Bewoner, Activiteit, DatumAangemaakt, Rangnr)
                   VALUES
                   (4, '$bewonerID', '$rang3', '2015-04-14', 3)";
        $res = $mysqli->query($insert3);
    }

    if(!empty($rang4)) {
        $insert4 = "INSERT INTO ActiviteitenSchema
                   (DagVanDeWeek, Bewoner, Activiteit, DatumAangemaakt, Rangnr)
                   VALUES
                   (4, '$bewonerID', '$rang4', '2015-04-14', 4)";
        $res = $mysqli->query($insert4);
    }

    if(!empty($rang5)) {
        $insert5 = "INSERT INTO ActiviteitenSchema
                   (DagVanDeWeek, Bewoner, Activiteit, DatumAangemaakt, Rangnr)
                   VALUES
                   (4, '$bewonerID', '$rang5', '2015-04-14', 5)";
        $res = $mysqli->query($insert5);
    }

    if(!empty($rang6)) {
        $insert6 = "INSERT INTO ActiviteitenSchema
                   (DagVanDeWeek, Bewoner, Activiteit, DatumAangemaakt, Rangnr)
                   VALUES
                   (4, '$bewonerID', '$rang6', '2015-04-14', 6)";
        $res = $mysqli->query($insert6);
    }

    if(!empty($rang7)) {
        $insert7 = "INSERT INTO ActiviteitenSchema
                   (DagVanDeWeek, Bewoner, Activiteit, DatumAangemaakt, Rangnr)
                   VALUES
                   (4, '$bewonerID', '$rang7', '2015-04-14', 7)";
        $res = $mysqli->query($insert7);
    }

}

?>

这是你想要做的吗?

$values = array;
for ($i=1; $i<=7; $i++)
{ 
   $values [$i] = $_POST["rang".$i."value"];
}

如果您想要一个表单,请将表单标签放在 while 循环之外

 <?php
        $sql = "SELECT IDBewoner, Foto FROM Bewoners LIMIT 5";
        $res = mysqli_query($mysqli, $sql);
        $totaalbewoners = mysqli_num_rows($res);
        ?> 
        <form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="POST">
        <?php while($row = mysqli_fetch_assoc($res)) {
        ?>
        <tr>

                <td><input type="text" value="<?php echo $row["IDBewoner"] ?>" name="bewoner"></td>
            <td> <?php echo $row["IDBewoner"] ?> </td>
            <td> <?php echo "<img src='data:image/jpeg;base64,".base64_encode($row['Foto'])."' width='90' height='90'>" ?> </td>

            <td> 
                    <div id="rang1" class="DropZone"></div> 
                    <input type="hidden" value="1" name="rang_input[][]" id="rang1value" />
                </td>
                <td> 
                    <div id="rang2" class="DropZone"></div> 
                    <input type="hidden" value="2" name="rang_input[][]" id="rang2value" />
                </td>
                <td> 
                    <div id="rang3" class="DropZone"></div> 
                    <input type="hidden" value="3" name="rang_input[][]" id="rang3value" />
                </td>
                <td> 
                    <div id="rang4" class="DropZone"></div> 
                    <input type="hidden" value="4" name="rang_input[][]" id="rang4value" />
                </td>
                <td> 
                    <div id="rang5" class="DropZone"></div>
                    <input type="hidden" value="5" name="rang_input[][]" id="rang5value" />
                </td>
                <td> 
                    <div id="rang6" class="DropZone"></div> 
                    <input type="hidden" value="6" name="rang_input[][]" id="rang6value" />
                </td>
                <td> 
                    <div id="rang7" class="DropZone"></div> 
                    <input type="hidden" value="7" name="rang_input[][]" id="rang7value" />
                </td>

    <?php };?>
       <input type="submit" value="Save">
                </form> 
            </tr>
    <?php    

    if($_SERVER["REQUEST_METHOD"] == "POST") {
         foreach ($_POST['rang_input'] as $key => $value) {
                 foreach ($value as $key1 => $value1) {
                  echo $value1 . "<br />";
                 }
            }
    }
    ?>

那这个怎么样?假设您的输入有 ids own1rang1value、own1rang2value 等

$values = array; 
for ($owner=1; $owner<=7; $owner++)
{
   $rec = array;
   for ($i=1; $i<=7; $i++)
   { 
      $rec [$i] = $_POST["own".$owner."rang".$i."value"];
   }
   $values[$owner]=$rec;
}

尝试修改您的表单以包含您的 IDBewoner (无论一个好的唯一字段是什么,这个字段可能不是唯一的,我不知道,很难说) 双数组中的值,例如:

<?php
$sql = "SELECT IDBewoner, Foto FROM Bewoners LIMIT 5";
$res = mysqli_query($mysqli, $sql);
$totaalbewoners = mysqli_num_rows($res);
while($row = mysqli_fetch_assoc($res)) {
?>
<tr>
    <form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="POST">
        <td>
            <input type="text" value="<?php echo $row["IDBewoner"] ?>" name="bewoner[]">
        </td>
        <td>
            <?php echo $row["IDBewoner"] ?>
        </td>
        <td>
            <img src="data:image/jpeg;base64,<?php echo base64_encode($row['Foto']); ?>" width='90' height='90'>
        </td>
        <?php for($i=0; $i <= 7; $i++) {
            $owner_id   =   $i.$row["IDBewoner"]; ?>
        <td> 
            <div id="rang<?php echo $owner_id; ?>" class="DropZone"></div> 
            <input type="text" value="" id="rang<?php echo $owner_id; ?>input" name="rang[<?php echo $row["IDBewoner"]; ?>][<?php echo $i; ?>]" />
        </td>
        <?php }
    } ?>
        <td>
             <input type="submit" name="submit" value="submit" />
        </td>
    </form>
</tr>

会给你一个类似于的数组(我没有填写任何值,所以它们都是空白的):

Array
(
    [bewoner] => Array
        (
            [0] => 122840745
            [1] => 1972681560
            [2] => 971451812
            [3] => 1882323675
            [4] => 1165412341
            [5] => 2086561009
            [6] => 1194305395
            [7] => 2031974218
            [8] => 654763098
            [9] => 1105106609
            [10] => 399644802
        )

    [rang] => Array
        (
            [122840745] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                    [3] => 
                    [4] => 
                    [5] => 
                    [6] => 
                    [7] => 
                )

            [1972681560] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                    [3] => 
                    [4] => 
                    [5] => 
                    [6] => 
                    [7] => 
                )

            [971451812] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                    [3] => 
                    [4] => 
                    [5] => 
                    [6] => 
                    [7] => 
                )

            [1882323675] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                    [3] => 
                    [4] => 
                    [5] => 
                    [6] => 
                    [7] => 
                )

            [1165412341] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                    [3] => 
                    [4] => 
                    [5] => 
                    [6] => 
                    [7] => 
                )

            [2086561009] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                    [3] => 
                    [4] => 
                    [5] => 
                    [6] => 
                    [7] => 
                )

            [1194305395] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                    [3] => 
                    [4] => 
                    [5] => 
                    [6] => 
                    [7] => 
                )

            [2031974218] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                    [3] => 
                    [4] => 
                    [5] => 
                    [6] => 
                    [7] => 
                )

            [654763098] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                    [3] => 
                    [4] => 
                    [5] => 
                    [6] => 
                    [7] => 
                )

            [1105106609] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                    [3] => 
                    [4] => 
                    [5] => 
                    [6] => 
                    [7] => 
                )

            [399644802] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                    [3] => 
                    [4] => 
                    [5] => 
                    [6] => 
                    [7] => 
                )

        )

    [submit] => submit
)

这就是您处理 sql 的方式。请注意,您应该清理或绑定值,但我没有包含任何类似的内容:

<?php

if(isset($_POST["submit"])) {
    $sql['cols']    =   "INSERT INTO `ActiviteitenSchema` (DagVanDeWeek, Bewoner, Activiteit, DatumAangemaakt, Rangnr) VALUES";
    $i = 0;
    foreach($_POST['rang'] as $key => $value) {             

            $z = 0;
            foreach($value as $rang) {
                    if(!empty($rang)) {
                            $vals[$i][] = "(4, '".$_POST['bewoner'][$i]."', '".$rang."', '2015-04-14', '$z')";
                        }
                    $z++;
                }

            if(isset($vals[$i]))
                $sql['vals'][]  =   implode(", ",$vals[$i]);

            $i++;
        }

    if(isset($sql['vals'])) {
            $statement  =   $sql['cols'].implode(", ",$sql['vals']);
            $res        =   $mysqli->query($statement);
        }
}

?>

插入代码:

<?php

if(isset($_POST["submit"])) {
    $sql['cols']    =   "INSERT INTO ActiviteitenSchema (DagVanDeWeek, Bewoner, Activiteit, DatumAangemaakt, Rangnr) VALUES";

    $i = 0;
    foreach($_POST['rang'] as $key => $value) {             
        $z = 0;
        foreach($value as $rang) {
            if(!empty($rang)) {
                    $vals[$i][] = "(4, '".$_POST['bewoner'][$i]."', '".$rang."', '2015-04-14', '$z')";
            }
            $z++;
        }

        if(isset($vals[$i])) {
            $sql['vals'][]  =   implode(", ",$vals[$i]);
        }
        $i++;
    }

    if(isset($sql['vals'])) {
        $statement  =   $sql['cols'].implode(", ",$sql['vals']);
        $res        =   $mysqli->query($statement);
        echo "<script>alert('gegevens zijn toegevoegd')</script>";
        header("Location: nieuwschema.php");
    }
}

?>



fetch_assoc:

<div id="MainDiv">
  <div id="ListBewoners">
      <table id="ListBewonersUL">

      <?php
      $sql = "SELECT IDBewoner, Foto FROM Bewoners LIMIT 5";
      $res = mysqli_query($mysqli, $sql);
      $totaalbewoners = mysqli_num_rows($res);
      while($row = mysqli_fetch_assoc($res)) {
      ?>
      <tr>
          <form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="POST">
              <td>
                  <input type="text" value="<?php echo $row["IDBewoner"] ?>" name="bewoner[]" size="2">
              </td>
              <td>
                  <?php echo $row["IDBewoner"] ?>
              </td>
              <td>
                  <img src="data:image/jpeg;base64,<?php echo base64_encode($row['Foto']); ?>" width='90' height='90'>
              </td>
              <?php for($i=0; $i < 7; $i++) {
                  $owner_id   =   $i.$row["IDBewoner"]; ?>
              <td> 
                  <div id="rang<?php echo $owner_id; ?>" class="DropZone"></div> 
                  <input type="text" value="" id="rang<?php echo $owner_id; ?>input" name="rang[<?php echo $row["IDBewoner"]; ?>][<?php echo $i; ?>]" />
              </td>
              <?php }
          } ?>
      </tr><tr>
              <td>
                   <input type="submit" name="submit" value="Save" />
              </td>
          </form>
      </tr>


  </table>
  </div>
</div>

我有PHP_SELF的操作,把插入代码放在同一页的底部。