结合两个PHP变量进行MySQL查询

时间:2010-08-30 13:21:06

标签: php mysql

我有一个变量formvar,每当用户在HTML表单中添加一个附加字段时,它就会递增。此变量将发布到PHP脚本,以便循环遍历所有添加的字段。

我正在尝试将MySQL查询中的两个变量组合起来,以匹配HTML表单中的内容。我希望MySQL查询转到upc0,upc1等,直到for循环终止。

for($i=0;$i<=$_POST[formvar];$i++)
{
mysql_select_db("bits", $con);
$sql="INSERT INTO report (UPC, Quantity, Comment)
VALUES ('$_POST[upc].$i','$_POST[quantity].$i','$_POST[comment].$i')";
if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
else echo "Records added successfully";
}

很抱歉,如果这段代码不好,我是网络编程的新手。

谢谢!

4 个答案:

答案 0 :(得分:2)

好的,因为每个回答都暗示逃避(但没有给出一个例子):

$sql = "INSERT INTO report (UPC, Quantity, Comment) VALUES
       ('" . mysql_real_escape_string($_POST["upc".$i]) .  "','" . 
       mysql_real_escape_string($_POST["quantity" . $i]) .  "','" . 
       mysql_real_escape_string($_POST["comment" . $i]) .  "')";

这应该保护您免受SQL注入,并且是创建SQL查询的一种正确方法。最好的方法是使用参数化查询(其上有大量信息,所以我建议一个好的Google搜索会比我在这里解释它更好)...

答案 1 :(得分:1)

首先要做的事情。在HTML中,创建如下所示的输入字段:

<input type="foo" name="upc[]">
<input type="foo" name="quantity[]">
<input type="foo" name="comment[]">

然后在你的PHP脚本中你这样做:

<?php
# Choose DB
mysql_select_db("bits", $con);

# Iterates the Form-Data
$data_arr = array();
foreach($_POST['upc'] as $k=>$v) {
  # Makes sure all needed data is available
  if(isset($_POST['quantity'][$k], $_POST['comment'][$k])) {
    $data_arr[] = array(
      'upc' => $v,
      'quantity' => $_POST['quantity'][$k],
      'comment' => $_POST['comment'][$k]
    );
  }
}

# Build mysql insert string
foreach($data_arr as $k=>$v) {
  # Escapes each field
  $v = array_map('mysql_real_escape_string', $v);
  # Maps array to value set
  $data_arr[$k] = '('. implode(',', $v). ')';
}

$sql = 'INSERT INTO report (UPC, Quantity, Comment) VALUES '. implode(', ', $data_arr);

# Perform mysql query
mysql_query($sql, $con) or die('Error: ' . mysql_error());

echo 'Records added successfully';

在我的iPad上写的,我在飞机上......所以没有问题。祝好运。 ; O)

答案 2 :(得分:0)

不确定我是否理解这个问题,但这就是我的想法:

$sql="INSERT INTO report (UPC, Quantity, Comment) VALUES
           ('" . $_POST["upc".$i] .  "','" . $_POST["quantity" . $i] .  "','" . $_POST["comment" . $i] .  "')";

注意:这是一个简短版本,你必须添加mysql_real_escape_string等等。

另外我认为每个变量都可以是字符串,所以我用''包围它们。

$ _ POST [“name”。 $ i]让你循环使用名称为“name”的POST变量,后跟一个数字,这必须插入你的for循环中。

答案 3 :(得分:0)

由于食谱如此受欢迎,我将提供自己的,关于实际的问题:

<?php 
for ($i=0; $i<=$_POST['formvar']; ++$i) {
  mysql_select_db("bits", $con);
  $v = array_map(mysql_real_escape_string(array(_POST["upc{$i}"], $_POST["quantity{$i}"], $_POST["comment{$i}"])));
  $sql = "INSERT INTO report (UPC, Quantity, Comment) VALUES('"
       . implode("', '", $v)
       . "')";

  if (!mysql_query($sql,$con)) {
    trigger_error(html_entities('Error: ' . mysql_error()));
  }
}
?>