显示mysql表中的数据

时间:2013-05-14 20:38:11

标签: php mysql forms loops

我已经使用while循环创建了这个表单,所以我不需要制作28个文本字段...但是当我将数据提交到我的mysql数据库时它运行良好但是如何将数据显示回我的表单进行编辑并更新..当我在文本字段中键入一个值(EX - submitted data from mysql在emp_name字段中)然后它在文本字段中重复了4次....我知道它正在发生因为循环但是有任何我可以在每个文本字段中显示多个数据的方式,以便在用户正常提交数据后进行更新....

my 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.";
                                }
}



    }

这是快照

enter image description here

1 个答案:

答案 0 :(得分:0)

您遇到的问题是您的数据模型 - 您正在保存就业历史,但对于谁来说?它需要有一个employee_id来说明这些数据属于谁,并将其加入到保存employee_table数据的表中。接下来,您需要在emp_table上使用唯一ID来标识每行,您可以使用这些ID而不是$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"] != ""来检查字段是否已提交。