【问题标题】:Displaying Data from mysql table显示 mysql 表中的数据
【发布时间】:2013-05-09 06:42:45
【问题描述】:

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

我的表单.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.";
                                }
}



    }

这是快照

【问题讨论】:

  • 您几乎要求进行 SQL 注入攻击,使用prepared statements,不要使用mysql_* 扩展,they are deprecated
  • 启用error_reporting(E_ALL) 会有所帮助。 ;p
  • 是的,代码存在安全问题,但目前这让我相信用户,我......
  • 这不是信任问题,这是一个做错的案例。如果您不制定规避任何所有 用户数据的规则,您将不可避免地陷入非常严重的麻烦。您还将与转义问题、缺少引号和编码问题作斗争,这些问题可以通过使用proper SQL escaping 切换到 PDO 或另一个数据库层来解决。当从 PHP 中删除 mysql_query 方法时,您将不得不重新编写最后一点,这也是计划。
  • ^ 而且有这么多基本问题的代码不值得调试。

标签: php mysql forms loops


【解决方案1】:

您遇到的问题是您的数据模型 - 您正在保存就业历史,但为谁?它需要在某处有一个employee_id 来说明该数据属于谁,并将其加入到保存employee_table 数据的表中。接下来,您需要在 emp_table 上有一个唯一 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"] != "" 来检查字段是否已提交。

【讨论】:

  • 这里有点困惑.... emp_table 将有一个唯一的 id history_id 像 1 然后每 4 行的 emp_id 将是相同的像 54 .. 我是对的然后... ?
  • 不,ID 将是表中的每一行,因此它将是该行的唯一标识符,您可以使用它来进行更新。
  • 您的建议效果很好.. thx ..bro 但仍有一些问题...并且仍在努力解决...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2014-03-24
  • 1970-01-01
相关资源
最近更新 更多