【问题标题】:Inserting multiple values from multiple forms at once in PHP and MySQL在 PHP 和 MySQL 中一次从多个表单中插入多个值
【发布时间】:2012-04-09 12:12:44
【问题描述】:

我正在为我的论文创建一个系统供学校使用。有一个方面我无法工作。我希望能够同时为多个人设置出勤率。这里有一张图片可以向您展示表单的外观:

所有值都设置为present,因此如果需要,只能将一对夫妇更改为absent。按下表单底部的按钮后,我希望它导航到确认页面。我使用 MySQl 查询来获取尚未设置出勤的员工列表,并使用 include 标记将其放置在 HTML 表单中。我必须生成列表的代码如下:

<?php
// Get a list of all items and display them in ID order
$dynamicList = "";
$sql = mysql_query("SELECT StaffID, StaffName FROM StaffDetails WHERE StaffID NOT IN (SELECT StaffID FROM StaffAttendance WHERE AttendanceDate = curdate()) ORDER BY StaffID ASC");

// Show list
$productCount = mysql_num_rows($sql);
$setTodaysAttendanceList = "";
if ($productCount > 0) {
while($row = mysql_fetch_array($sql)) {
    $StaffID = $row["StaffID"];
    $StaffName = $row["StaffName"];
    $setTodaysAttendanceList .= '<tr style="font-size:15px;">
  <td><a href="../staff_member_details.php?id=' . $StaffID . '">' . $StaffID . '</a></td>
  <td><a href="../staff_member_details.php?id=' . $StaffID . '">' . $StaffName . '</a></td>
  <td><label>
<select name="attendance_status" id="attendance_status">
<option value="Present">Present</option>
<option value="Absent">Absent</option>
</select>
</label></td>
  <td><label>
<textarea cols="21" rows="5" name="notes" id="notes" placeholder="Enter notes here..."></textarea>
</label></td>
</tr>';
}
} else {
$setTodaysAttendanceList = "There are no records listed at this time";
}
mysql_close();
?>

然后在 HTML 中我有这个:

<form action="set_multiple_staff_attendance_confirm.php" enctype="multipart/form-data" name="StaffAttendanceForm" id="StaffAttendanceForm" method="post">
    <?php echo $setTodaysAttendanceList; ?>
    <tr style="font-size:15px;">
      <td></td>
      <td></td>
      <td></td>
      <td><label>
      <input type="submit" name="addNewRow" id="addNewRow" value="Add Staff Attendance Records" />
      </label></form></td>
    </tr>

当它重定向到下一页时,我有一个如下所示的插入查询:

<?php
// Add row to database
if (isset($_POST['staff_id'])) {
$staff_id = mysql_real_escape_string($_POST['staff_id']);
$attendance_status = mysql_real_escape_string($_POST['attendance_status']);
$notes = mysql_real_escape_string($_POST['notes']);

$sql .= mysql_query("INSERT INTO StaffAttendance (StaffID, AttendanceDate, AttendanceStatus, Notes) VALUES
('$staff_id', now(), '$attendance_status', '$notes')") or die (mysql_error());
$editid = mysql_insert_id();
}
?>

我知道这是一个冗长而复杂的询问方式,但我只是表明我已经尝试过并且完全被卡住了!

【问题讨论】:

  • 究竟是什么让你陷入了困境?
  • 为什么不把form标签放到表格外面呢?然后命名表单输入,使其以行索引为前缀——很容易通过简单的 for 循环从后端解开。
  • 当您说“行索引”@David-SkyMesh 时,您指的是哪个变量?这是我当前的表单标签:&lt;form action="set_multiple_staff_attendance_confirm.php" enctype="multipart/form-data" name="StaffAttendanceForm" id="StaffAttendanceForm" method="post"&gt; 您是否建议为员工 ID 回显 PHP 变量?
  • @ZuluIrminger:当然,或者使用 JavaScript。

标签: php mysql html insert


【解决方案1】:

在我看来,您正在检查$_POST["staffid"],但您的选择菜单设置了name="attendance_status"

您应该像这样设置选择菜单的名称:

name="attendance_status[]"

然后在您的 php 脚本中,当您执行 $_POST["attendance_staff"] 时,您会读取一个数组 - 而不是单个值。

编辑:这仅在您还有一个包含所有相应人员 ID 的数组时才有效。您可以通过对名称为staffid[] 且值为staffid 的每一行使用隐藏输入来获取此信息。

但是,正如 David-SkyMesh 在对您的帖子的评论中指出的那样,更可靠的方法可能是在每个可保存表单元素的名称中使用 Staffid。

编辑:例如,您可以使用此代码来命名您的表单元素(未经测试):

<select name="$staffID_attendance_status" id="$staffID_attendance_status">
    <option value="Present">Present</option>
    <option value="Absent">Absent</option>
</select>
<textarea cols="21" rows="5" name="$staffID_notes" id="$staffID_notes" placeholder="Enter notes here..."></textarea>
<input type='hidden' name='staffID[]' value='$staffID'>

请注意,这也会为您的所有表单元素提供唯一的 id,如果您希望您的 HTML 进行验证,这是必要的。

然后在你的脚本中你可以这样做:

foreach ($_POST["staffID"] as $staffID) {
    $staff_id = mysql_real_escape_string($staffID);
    $attendance_status = mysql_real_escape_string($_POST[$staff_id . "_attendance_status"]);
    $notes = mysql_real_escape_string($_POST[$staff_id . "_notes"]);

    $sql .= mysql_query("INSERT INTO StaffAttendance (StaffID, AttendanceDate, AttendanceStatus, Notes) VALUES ('$staff_id', now(), '$attendance_status', '$notes')") or die (mysql_error());
    $editid = mysql_insert_id();
}

【讨论】:

  • 感谢您的 cmets。 @Ben你是对的,我应该更具体。我的问题是数据没有出现在后端数据库中。非常感谢 David-SkyMesh 和 Stefan,我现在就看看,让你知道它是否有效!非常感谢,祖鲁人
  • @ZuluIrminger:好的 - 我添加了一些修改,并提供了更多关于如何执行此操作的建议。
  • 你们非常有帮助,我非常感激!我马上就去试试。我刚才尝试的方式在我的数据库中插入了 100,000 个空白行...我目前正在等待 php myadmin 将它们全部加载,以便我可以删除它们...!
  • 这绝对是一个梦想,你帮我减轻了很多负担!非常感谢@Stefan 和其他人!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
相关资源
最近更新 更多