【发布时间】:2010-10-25 20:24:27
【问题描述】:
我正在尝试执行 我在此类页面中有一个 html 表单:
Name: <input type="text" id="namebox" value="" name="fields[]" /> <br />
Position: <input type="text" id="positionbox" value="" name="fields[]" /> <br />
<input type="hidden" name="createcard">
<input type="submit" value="Create">
.. 和其他 3 个字段。我通过 POST 将这 5 个表单字段传递到文件 process.php,该文件具有以下功能,可将数组元素插入 mysql DB。
if(isset($_POST['createcard'])){
$this->procCreateCardtheme1();
..
..
function procCreateCardtheme1(){
global $session;
$cardData = $_POST['fields'];
$username=$session->username;
$sno=1;
echo count($cardData);
while($sno < count($cardData))
{
$v=$cardData[$sno];
echo $v;
mysql_query("INSERT INTO carddata VALUES ('$username', $sno, '$v', 1)");
$sno++;
}
现在,上面的 echo 语句返回了预期的输出,即五个左右的字段。但是 mysql_query 只执行一次。它只是将第一个条目存储在数据库中,没有别的。即使重新提交表格也无济于事。它只是存储在数据库中的一个条目。 有什么想法吗?
【问题讨论】:
-
循环执行查询不是一个好主意。在循环中形成查询并在外部执行。
-
更改为
mysql_query("INSERT INTO carddata VALUES ('$username', $sno, '$v', 1)") or die(mysql_error())并告诉我们输出是什么。另外,为了安全起见,请务必转义用户输入数据! -
感谢您的提示。会这样做..
-
是的。我将 mysql_real_escape_string() 添加到用户数据中。 :) 谢谢 ;)
-
另外,您对 $username 进行验证,即使它来自 $session,您也永远不知道其他页面何时出现问题并在会话中存储了错误的用户名。