0

我已经使用while循环创建了这个表单,这样我就不必制作28个文本字段......但是当我将数据提交到我的mysql数据库时它工作得很好,但是如何将数据显示回我的表单以进行编辑和更新。 . 当我在文本字段中输入一个值(EX -submitted data from mysql在 emp_name 字段中)然后它在文本字段中重复 4 次....我知道这是因为循环而发生的,但是有什么方法可以在其中显示多个数据用户正常提交数据后用于更新的每个文本字段....

我的form.php

<form action="userdata.php" name="frmAdd" method="post">

<table width="80%" border="0" cellpadding="3" cellspacing="3" class="forms">
  <tr>
    <td width="5"> <div align="center">NO</div></td>
    <td width="91"> <div align="center">Employer's NAME</div></td>
    <td width="160"> <div align="center">COUNTRY</div></td>
    <td width="198"> <div align="center">POSITION</div></td>
    <td width="70"> <div align="center">FROM</div></td>
    <td width="70"> <div align="center">TO</div></td>
    <td width="70"> <div align="center">SALARY</div></td>
    <td width="70"> <div align="center">REASONS FOR LEAVING</div></td>
  </tr>

  <?php for($i=1;$i<=4;$i++) { ?>

  <tr>
    <th width="5"> <div align="center"><? echo $i . "."; ?></div></th>
    <td><input type="text" name="emp_name<?=$i;?>" size="25" value="submitted data from mysql"></td>
    <td><input type="text" name="emp_country<?=$i;?>" size="10"></td>
    <td><input type="text" name="emp_pos<?=$i;?>" size="10"></td>
    <td><input type="text" name="emp_frm<?=$i;?>" size="5"></td>
    <td><input type="text" name="emp_to<?=$i;?>" size="5"></td>
    <td><input type="text" name="emp_sal<?=$i;?>" size="5"></td>
    <td><input type="text" name="emp_lev<?=$i;?>" size="25"></td>
  </tr>
  <?php } ?>
  </table>
  </br>
  <input type="submit" name="doHis" value="Save Employment History">
  <input type="hidden" name="hdlfrm" value="<?=$i;?>">
  </form>

和我的 userdata.php

    if($_POST['doHis'] == 'Save Employment History')  
    {
        try{
                $conn = new PDO("mysql:host=localhost;dbname=dbname", "user", "pass");
            }
            catch(PDOException $pe)
                {
                    die('Connection error, because: ' .$pe->getMessage());
                }

                for($i=1;$i<=$_POST["hdlfrm"];$i++){

                        if($_POST["emp_name$i"] != ""){

                            $sql = "INSERT INTO emp_table (emp_name, emp_country, emp_pos, emp_frm, emp_to, emp_sal, emp_lev) 
                                    VALUES (:emp_name, :emp_country, :emp_pos, :emp_frm, :emp_to, :emp_sal, :emp_lev)";
                            $stmt = $conn->prepare($sql);
                            $stmt->bindParam(':emp_name', $_POST["emp_name$i"]);
                            $stmt->bindParam(':emp_country', $_POST["emp_country$i"]);
                            $stmt->bindParam(':emp_pos', $_POST["emp_pos$i"]);
                            $stmt->bindParam(':emp_frm', $_POST["emp_frm$i"]);
                            $stmt->bindParam(':emp_to', $_POST["emp_to$i"]);
                            $stmt->bindParam(':emp_sal', $_POST["emp_sal$i"]);
                            $stmt->bindParam(':emp_lev', $_POST["emp_lev$i"]);
                            $stmt->execute();

                                        echo "Save Done.  Click <a href='phpMySQLListRecord.php'>here</a> to view.";
                                }
}



    }

这是快照

在此处输入图像描述

4

1 回答 1

0

您遇到的问题是您的数据模型 - 您正在保存就业历史,但为谁?它需要有一个employee_id地方来说明这些数据属于谁,并将其加入到保存employee_table数据的表中。接下来,您需要有一个唯一的 IDemp_table来标识每一行,您可以使用它来代替您的$i索引。

桌子

history_id INT autoincrement | employee_id INT | emp_name VARCHAR | your other fields....

选择

SELECT history_id, emp_name, ... FROM emp_history where employee_id = ?

然后,您可以遍历结果并使用history_id来识别数据所属的行来更新它。提交具有相同名称的多个字段将是一个您可以迭代的数组,因此您不需要为每个字段使用唯一的字段名称。

作为旁注,您可能希望使用isset($_POST["key"])而不是$_POST["key"] != ""检查字段是否已提交。

于 2013-05-14T22:01:44.033 回答