2012-04-09 33 views
3

私は自分の論文のためのシステムを作成しています。私は仕事をすることができない1つの側面があります。私は一度に複数の人のために出席を設定できるようにしたい。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> 

、私は次のようになりますINSERTクエリを持っていますこの:

<?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

+1

なぜフォームタグをテーブルの外に置くのですか?次にフォームの入力に行インデックスを接頭するように名前を付けます。単純なforループを使用してバックエンドから切り離すのは簡単です。 –

+0

"行インデックス" @ David-SkyMeshと言うとき、どの変数を意味するのですか?これは私の現在のフォームタグです: '

答えて

4

$_POST["staffid"]をチェックしているようですが、選択メニューにはname="attendance_status"が設定されています。

あなたは、むしろこのようなあなたの選択メニューの名前を設定する必要があります。

name="attendance_status[]" 

は、その後、あなたのPHPスクリプトで使用すると、配列を読んで - ない単一の値を - あなたは $_POST["attendance_staff"]を行うとき。

EDIT:これは、配列が対応するすべてのstaffidで利用できる場合にのみ機能します。これは、名前がstaffid[]で、その値がstaffidであるすべての行に隠れた入力を使用することで取得できます。

しかし、David-SkyMeshがあなたの投稿へのコメントで指摘したように、より信頼できる方法は、おそらく保存可能なフォーム要素の名前の中にstaffidを使用することでしょう。

EDIT:たとえば、あなたがあなたのフォーム要素(未テスト)の名前を付けるために、このコードを使用することができます。

<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'> 

注意あなたがHTMLをしたい場合、これはまた、すべてのフォーム要素に必要な固有のIDを与えること検証します。それはあなたが実際に立ち往生している、このすべての外で何

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そうです、より具体的なはずでした。私の問題は、データがバックエンドデータベースに表示されていないことでした。 Zulu –

+0

@ZuluIrminger:OK - これを行う方法について、より多くの提案を加えました。 – Stefan

+0

皆さん、私は驚くほど役に立ちました。私はちょうど10分の空行をデータベースに挿入しました...現在、PHPのmyadminがそれらをすべてロードして削除できるように待っています。 ..! –

関連する問題