Foreach循环完全执行并停止脚本的其余部分

时间:2014-03-10 11:30:03

标签: php mysql foreach

我有一个产品表,我在那里检查各个产品ID的数量是否有效..

这是代码段:

$pids = explode(',',$pid); /*in the form of 2,3,4.....*/ /*$pid->product_id*/
$q = explode(',',$q_total); /*in the form of 2,3,4.....*/ /*$q->quantity*/


/*checking start*/

foreach($pids as $index => $ps){
  $quants = $q[$index];
  $sql = $stsp->query("SELECT quantity FROM product WHERE id='$ps'");
  $row = $sql->fetch(PDO::FETCH_ASSOC);
   $quantity_rem = $row['quantity'];
  if($quants > $quantity_rem){
    $array = array();
    $array['errquant'] = 'wrong_quant';
    $array['error_pr'] = $ps;
    echo json_encode($array);
    exit;  /*stop the rest of the code from executing*/
   }

} 

  /*rest of the code outside the loop*/

所以这里发生的事情是检查产品ID表中的数量($quantity_rem),如果该数量小于给定数量($q),则脚本停止并回显产品ID ..

但是我有更多的那一件产品..它没有检查其余部分,因为每当有故障它停止并回响。我想检查所有产品并回显产品ID,并在循环外停止脚本的其余部分..

需要帮助! 感谢。

请不要跟我谈论sql注入,因为我知道它很脆弱,我会照顾它..

2 个答案:

答案 0 :(得分:0)

试试这个:

$pids = explode(',',$pid); /*in the form of 2,3,4.....*/ /*$pid->product_id*/
$q = explode(',',$q_total); /*in the form of 2,3,4.....*/ /*$q->quantity*/


/*checking start*/

$errors  = array();

foreach($pids as $index => $ps){
  $quants = $q[$index];
  $sql = $stsp->query("SELECT quantity FROM product WHERE id='$ps'");
  $row = $sql->fetch(PDO::FETCH_ASSOC);
   $quantity_rem = $row['quantity'];
  if($quants > $quantity_rem){
    $array = array();
    $array['errquant'] = 'wrong_quant';
    $array['error_pr'] = $ps;
    $errors[] = $array;
   }

} 


echo json_encode($errors);

答案 1 :(得分:0)

foreach($pids as $index => $ps){
  $quants = $q[$index];
  $sql = $stsp->query("SELECT quantity FROM product WHERE id='$ps'");
  $row = $sql->fetch(PDO::FETCH_ASSOC);
   $quantity_rem = $row['quantity'];
    $array = array();
  if($quants > $quantity_rem){

    $array[$ps]['errquant'] = 'wrong_quant'; 

  // note little change - you will get array with product ids as key 
  //and qty error assigned to them

   }
echo json_encode($array);
 exit;  /*stop the rest of the code from executing*/