2014-06-26 37 views
-5

我正在尝试为多个插入值编写代码,但无法正常工作。错误是这个警告:为foreach()提供的无效参数。任何帮助将升值。插入多个值不起作用

if (isset($_POST['mul_pr'])) { 
$counter = $mysqli->real_escape_string($_POST["counter"]); 
$pr = $mysqli->real_escape_string($_POST["pr"]); 
$pr_qty = $mysqli->real_escape_string($_POST["pr_qty"]); 
$unit = $mysqli->real_escape_string($_POST["unit"]); 
$pr_date = $mysqli->real_escape_string($_POST["pr_date"]); 
$gss_date = $mysqli->real_escape_string($_POST["gss_date"]); 
$request = $mysqli->real_escape_string($_POST["requested"]); 
$approve = $mysqli->real_escape_string($_POST["approved"]); 
$desig_r = $mysqli->real_escape_string($_POST["designation_r"]); 
$desig_a = $mysqli->real_escape_string($_POST["designation_a"]); 
$year = $mysqli->real_escape_string($_POST["year"]); 
$pr_id = $mysqli->real_escape_string($_POST["pr_id"]); 

    if (count($counter > 0)) 
    { 
     $new = array(); 
     foreach ($counter as $key => $value) 
     { 
      $new[] = "('" . $counter . "', '" . $pr . "', '" . $pr_qty . "', '" . $unit . "','" . $pr_date . "', '" . $gss_date . "', '" . $request . "', '" . $approve . "' 
      , '" . $desig_r . "', '" . $desig_a . "', '" . $year . "', '" . $pr_id . "')"; 
     } 
     if (count($new) > 0) 
     { 
      $result = $mysqli->query("INSERT INTO purchase_request (counter, pr, total_quantity, unit, pr_date, gss_date, requested, designation_r, approved, designation_a,year,pr_id) 
      VALUES " . implode(', ', $new)); 
     } 
    } 
} 
+0

你有没有问过这个了吗? http://stackoverflow.com/questions/24421680/insert-multiple-values-in-php-mysql –

+0

阅读此:http://www.php.net/manual/en/control-structures.foreach.php – Locke

回答

1

首先错误是在这里:

if (count($counter > 0)) 

应该

if (count($counter) > 0) 

,你可能会得到警告,因为count($counter)可能是0,由于伪造的,如果条件下,它可能在非数组或空数组上执行for循环,因此出错

0

1。是你的情况“$计数器”不是一个数组或对象来遍历...

我只是建议,因为你已经有一半的硬编码SQL语句

$结果= $ ('$ counter','$ pr','$','$'','')查询(“INSERT INTO purchase_request(counter,pr,total_quantity,unit,pr_date,gss_date,requested,designation_r,approved,designation_a,year,pr_id)

VALUES '');

2。另外,如果你想“自动化”你的名字值对进入SQL,你就必须准备一个更完整的“$ =新阵列()” ...这样的事情

$new["counter"] = $mysqli->real_escape_string($_POST["counter"]); 
$new["pr"] = $mysqli->real_escape_string($_POST["pr"]); 
//and so on... 

然后你就不会需要一个for循环任何更多与 “array_keys($新)”

$result = $mysqli->query("INSERT INTO purchase_request (".implode(",", array_keys).") 
     VALUES ('" . implode("','" , array_values($new))) . "');"; 
0
Use this , it work for u 

if (isset($_POST['mul_pr'])) { 
$counter = $mysqli->real_escape_string($_POST["counter"]); 
$pr = $mysqli->real_escape_string($_POST["pr"]); 
$pr_qty = $mysqli->real_escape_string($_POST["pr_qty"]); 
$unit = $mysqli->real_escape_string($_POST["unit"]); 
$pr_date = $mysqli->real_escape_string($_POST["pr_date"]); 
$gss_date = $mysqli->real_escape_string($_POST["gss_date"]); 
$request = $mysqli->real_escape_string($_POST["requested"]); 
$approve = $mysqli->real_escape_string($_POST["approved"]); 
$desig_r = $mysqli->real_escape_string($_POST["designation_r"]); 
$desig_a = $mysqli->real_escape_string($_POST["designation_a"]); 
$year = $mysqli->real_escape_string($_POST["year"]); 
$pr_id = $mysqli->real_escape_string($_POST["pr_id"]); 

    if (count($counter) > 0)) 
    { 
     $new = array(); 
     for($i=0;$i<count($counter);$i++) 
     { 
      $new[] = "('" . $counter . "', '" . $pr . "', '" . $pr_qty . "', '" . $unit . "','" . $pr_date . "', '" . $gss_date . "', '" . $request . "', '" . $approve . "' 
      , '" . $desig_r . "', '" . $desig_a . "', '" . $year . "', '" . $pr_id . "')"; 

      if (count($new) > 0) 
      { 
      $result = $mysqli->query("INSERT INTO purchase_request (counter, pr, total_quantity, unit, pr_date, gss_date, requested, designation_r, approved, designation_a,year,pr_id) 
      VALUES " . implode(', ', $new)); 
      $new=""; 
      } 
     } 




    } 
} 
+0

我试过了,但只有1行插入数据库。 – user3631428