我正在尝试记录进出 parking 场的汽车。
汽车信息是从数据库中检索的并且工作正常。我遇到的问题是将输入/输出时间存储到数据库中。在上一页中,我已经这样做了,以便表单与表格分开,并且输入信息将被更新,但对于此页面,我需要具有根据数据库中的汽车而变化的动态数量的字段。我不确定我做错了什么,但这是我的代码,数据没有被发送或存储在数据库中。
<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) 个输入字段
。所以它会返回undefined variable
错误。以数组形式传递输入字段。
- 在循环内,将每辆车的主 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/