mysqlテーブルのデータを自動的に入力するフィールドを持つフォームがあります。これらの入力フィールドは、と呼ばれるmysqlテーブルから値を取得しますperson
。これらの値を正常に表示できます。しかし、これらの値を正しく更新することはできません。値は、と呼ばれる外部キーを共有しますacademy_id
。フィールドを更新すると、値がすべて同じ値に変更されます。各値を正常に更新するにはどうすればよいですか?例
フォーム送信前のテーブル値:
+----+------------+------------+-----------+
| ID | academy_id | first_name | last_name |
+----+------------+------------+-----------+
| 1 | 15 | Person1 | Last1 |
| 2 | 15 | Person2 | Last2 |
+----+------------+------------+-----------+
値を変更しようとした後
+----+------------+------------+-----------+
| ID | academy_id | first_name | last_name |
+----+------------+------------+-----------+
| 1 | 15 | Person2 | Last2 |
| 2 | 15 | Person2 | Last2 |
+----+------------+------------+-----------+
//DATBASE SELECT QUERY
$id = 15;
$db_select3 = $db_con->prepare("
SELECT a.name,
a.academy_id,
p.first_name,
p.last_name
FROM academy a
LEFT JOIN person p ON a.academy_id = p.academy_id
WHERE a.academy_id = :id
");
if (!$db_select3) return false;
if (!$db_select3->execute(array(':id' => $id))) return false;
$results3 = $db_select3->fetchAll(\PDO::FETCH_ASSOC);
if (empty($results3)) return false;
$result3 = '';
echo "<strong>Personel Information:</strong>";
$s = 1;
foreach ($results3 as $value3){
echo "<ul id=\"pq_entry_".$s."\" class=\"clonedSection\">";
echo "<li><input id=\"person_fname_".$s."\" name=\"person_fname_".$s."\" placeholder=\"Person #1 - First Name\" type=\"text\" value='" . $value3['first_name'] ."'/></li>";
echo "<li><input id=\"person_lname_".$s."\" name=\"person_lname_".$s."\" placeholder=\"Last Name\" type=\"text\" value='" . $value3['last_name'] ."'/></li>";
echo "</ul>";
$s++;
}
echo "<input type='button' id='btnAdd' value='add another Person' />
<input type='button' id='btnDel' value='Delete' /></br>";
//UPDATE VALUES IN DATABASE
if(isset($_POST['submit'])) {
$f = 1;
while(isset($_POST['person_fname_' . $f]))
{
$person_fname = $_POST['person_fname_' . $f];
$person_lname = $_POST['person_lname_' . $f];
$query_init3 = "UPDATE person SET academy_id=:id, first_name=:person_fname, last_name=:person_lname WHERE academy_id=:id;";
$query_prep3 = $db_con->prepare($query_init3);
$query_prep3->execute(array(
"id" => $id,
"person_fname" => $person_fname,
"person_lname" => $person_lname
));
$f++;
}
}
その$ s変数を取り除き、次のようにperson.IDを入力に直接関連付けます。
$db_select3 = $db_con->prepare("
SELECT a.name,
a.academy_id,
p.id as person_id,
p.first_name,
p.last_name
FROM academy a
LEFT JOIN person p ON a.academy_id = p.academy_id
WHERE a.academy_id = :id ");
/* ... */
foreach ($results3 as $value3){
$id = $results3['person_id'];
$first_name = $results3['first_name'];
$last_name = $results3['last_name'];
echo '<ul id="pq_entry_'.$s.'" class="clonedSection">';
echo '<li><input id="person_fname_'.$s.'" name="person['.$id.'][fname]"
placeholder="Person #1 - First Name" type="text" value="'
$fname.'/></li>';
}
次に、更新ページで$ _POST ['person']を次のように処理します。
foreach($_POST['person'] as $person_id => $person) {
/*
UPDATE person SET academy_id=:id,
first_name=:person_fname, last_name=:person_lname
WHERE id = $person_id;
*/
}
コードがいたるところにあるため、例を最小化しましたが、これにより、作業するための大まかなテンプレートが得られることを願っています。この$ _POST関係がどのように機能するかについては、php:HTMLFAQを参照してください。
また、XSSなどの攻撃を防ぐために、データベースから出力される値に対するHTMLエンティティ保護の必要性についても完全に理解しました。これらを後でではなく、早く調べる必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加