2012-04-09 62 views
3

我正在为学校创建一个供学校使用的系统。有一个方面我不能工作。我希望能够同时为多个人设置出席。这里有一个形象,会告诉你什么样的形式看起来像:在PHP和MySQL中一次插入多个表单的多个值

multiple attendance form

所有的值设置为目前,所以只有一对夫妇可以chaged到缺席如果需要的话。一旦在表单底部按下按钮,我希望它导航到确认页面。我使用了MySQl查询来获取尚未设置出勤的工作人员列表,并使用包括标记将其置于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(); 
} 
?> 

我知道这是问的一个漫长而曲折的方式,但我只是表明我了个去和我完全被卡住!

+0

这是什么出了这一切,你实际上是停留在吗? – BenOfTheNorth 2012-04-09 12:19:01

+1

为什么不把表格标签放在表格外?然后命名表单输入,使它们以它们的行索引作为前缀 - 很容易通过简单的for循环从后端解开。 – 2012-04-09 12:27:24

+0

当你说“row-index”@ David-SkyMesh时,你的意思是哪个变量?这是我目前的表单标签:'

'您是否会建议回显员工ID的PHP变量? – 2012-04-09 12:50:51

回答

4

它看起来像你正在检查$_POST["staffid"],但你的选择菜单有name="attendance_status"集。

你还是设置你的选择菜单的名称是这样的:

name="attendance_status[]" 

然后在你的PHP脚本,你读的数组 - 而不是一个单一的值 - 当你做$_POST["attendance_staff"]

编辑:这只会工作,如果你也有一个阵列与所有相应的staffids可用。您可以通过为每个行使用隐藏的输入来获取此名称,其名称为staffid[],其值为staffid。

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

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

<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(); 
} 
+0

感谢您的评论。@Ben您是对的,我应该更具体。我的问题是数据没有出现在后端数据库。 David-SkyMesh和Stefan非常感谢,我现在就来看看,并告诉你它是否有效!非常感谢,祖鲁语 – 2012-04-09 12:34:19

+0

@ZuluIrminger:好的 - 我已经添加了一些编辑,并提供了更多关于如何执行此操作的建议 – Stefan 2012-04-09 12:57:25

+0

你们是非常有帮助的,我是非常感谢!我会在一分钟内完成这项工作。我刚刚尝试过的方式将10万空行插入我的数据库中......我目前正在等待php myadmin加载它们以便我可以删除它们。 ..! – 2012-04-09 13:12:20