【发布时间】: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方法时,您将不得不重新编写最后一点,这也是计划。 -
^ 而且有这么多基本问题的代码不值得调试。