2012-04-09 61 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