我正在尝试记录进出停车场的汽车。

汽车信息是从数据库中检索的,并且运行正常。我遇到的问题是获取输入/输出时间存储到数据库中。在上一页中,我这样做是为了使表格与表格分离,并且输入信息将被更新,但是对于此页面,我需要在数据库中根据汽车的数量动态更改字段。我不确定自己在做什么错,但是这是我的代码,数据没有发送或存储在数据库中。

<h3>Update Car</h3>
<form action="carLog.php" method="post">
  <fieldset>
    <legend>Car Log</legend>

    <?php //This prints out the car log data

      $sql = "SELECT * FROM carLog";
      $result = $databaseConnection->query($sql);

      echo "<table class='TFtable' border='1' style='width':100%>"; //starts the table tag
      echo "<tr>
              <td>Name</td>
              <td>Vehicle</td>
              <td>Licence Plate</td>
              <td>In</td>
              <td>Out</td>
              <td>In</td>
              <td>Out</td>
              <td>Comments</td>
            </tr>"; //sets headings

      while($row = $result->fetch_assoc()) { //loops for each result

        echo "<tr>
                <td>".$row['name']."</td>
                <td>".$row['vehicle']."</td>
                <td>".$row['plate']. "</td>
                <td><input type='text' size='5' maxlength='5' name='inTime' value='".$row['inTime']."' id='inTime' /></td>
                <td><input type='text' name='outTime' value='".$row['outTime']."' id='outTime' /></td>
                <td><input type='text' name='inTime2' value='".$row['inTime2']."' id='inTime2' /></td>
                <td><input type='text' name='outTime2' value='".$row['outTime2']."' id='outTime2' /></td>
                <td><input type='text' name='comments' value='".$row['comments']."' id='comments' /></td>
              </tr>";

      }
      echo "</table>"; //closes the table
    ?>
    <input type="submit" name="Save" value="Save" />
  </fieldset>
</form>


数据库连接正常且正常。这是处理帖子的php:

if (isset($_POST['Save'])){
  $name = $_POST['name'];
  $vehicle = $_POST['car'];
  $plate = $_POST['plate'];
  $inTime = $_POST['inTime'];
  $outTime = $_POST['outTime'];
  $inTime2 = $_POST['inTime2'];
  $outTime2 = $_POST['outTime2'];
  $comments = $_POST['comments'];
  $query = "UPDATE carLog SET inTime = '$inTime', outTime = '$outTime', inTime2 = '$inTime2', outTime2 = '$outTime2' WHERE plate = '$plate'";

  $databaseConnection->query($query);

最佳答案

注意:


while()循环中只有五(5)个输入字段,但是您正在尝试处理carLog.php中的八(8)个输入字段。因此它将返回undefine variables错误。
在数组中传递输入字段。
在循环内部,在隐藏的输入中(也在数组中)隐藏每辆汽车/车辆的主要ID。


将此添加到您的while()循环中:

/* ASSUMING vehicle_id IS THE PRIMARY ID OF YOUR carLog TABLE; JUST REPLACE IT WITH THE RIGHT COLUMN NAME */
echo '<input type="hidden" name="hidden_id[]" value="'.$row["vehicle_id"].'">';


您必须在输入的[]标记中添加name

<td><input type='text' name='outTime[]' .....


对其余的输入执行此操作。

然后在您的carLog.php文件上,处理输入(至少使用
*_real_escape_string以防止SQL injections)。我们将使用for()循环检查每个输入:

if (isset($_POST['Save'])){

  for($x = 0; $x< count($_POST["hidden_id"]); $x++){

    $vehicleid = $databaseConnection->real_escape_string($_POST['hidden_id'][$x]);
    $inTime = $databaseConnection->real_escape_string($_POST['inTime'][$x]);
    $outTime = $databaseConnection->real_escape_string($_POST['outTime'][$x]);
    $inTime2 = $databaseConnection->real_escape_string($_POST['inTime2'][$x]);
    $outTime2 = $databaseConnection->real_escape_string($_POST['outTime2'][$x]);
    $comments = $databaseConnection->real_escape_string($_POST['comments'][$x]);

    $query = "UPDATE carLog SET inTime = '$inTime', outTime = '$outTime', inTime2 = '$inTime2', outTime2 = '$outTime2' WHERE vehicle_id = '$vehicleid'";

    $databaseConnection->query($query);

  } /* END OF FOR LOOP */

} /* END OF ISSET Save */


由于您已经在使用mysqli_*,请考虑使用prepared statement方法。

关于php - 动态表格到数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33620172/

10-09 22:56
查看更多