簡體   English   中英

在MySQL表中使用相同的FK更新多個值

[英]Updating multiple values with same FK in mysql table

我有一個表格,其中的字段會自動填充mysql表中的數據。 這些輸入字段從名為person mysql表中獲取其值。 我能夠成功顯示這些值。 但是我無法正確更新這些值。 這些值共享一個稱為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:HTML FAQ

我也完全滿足了對HTML實體保護的需求,以保護從數據庫中傳出的值,以防止受到XSS之類的攻擊。 您應該早些研究這些,而不是以后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM