PHP пока циклы с проблемой петель - PullRequest
0 голосов
/ 25 ноября 2011

РЕДАКТИРОВАТЬ: Есть, не могу поверить, что я пропустил -

$ HTTP_POST_VARS не является глобальным, изменил его на параметр для передачи.

Обычно я использую $ _POST, но в oscommerce по умолчанию это так, поэтому я использовал это для поддержания сходства.

Я не могу заставить этот код работать, и я понятия не имею, почему.

   function check_product_available() {

global $cart;
$products = $cart->get_products();

  //product exclusion
    //check to see if the product is in one of the limited categories
    $check_product_query = tep_db_query( $sql = 'SELECT products_id
                                                 FROM discount_coupons_to_products
                                                 WHERE coupons_id="'.tep_db_input( $HTTP_POST_VARS['couponcart'] ).'"' );
    $exlproducts = array();
    if( tep_db_num_rows( $check_product_query ) > 0 ) {
      while( $products = tep_db_fetch_array( $check_product_query ) ) {
        $exlproducts[] = $products['products_id'];
      }
  }
        for ($i=0, $n=sizeof($products); $i<$n; $i++) {
    if( in_array( $products[$i]['id'], $exlproducts ) ) {
      //use this to debug exclusions:
      return false;
    } 
    }
    return true;
  }
  //end product exclusion

Я попытался переместить петли, и он все еще всегда возвращает истину. Я повторил массив products и id там и выполнил запрос sql, жестко кодирующий идентификатор купона, и он также отлично работает.

Ответы [ 2 ]

3 голосов
/ 25 ноября 2011

Ваш цикл for не имеет смысла, поскольку он будет повторяться только один раз. Возврат значения завершит все другое выполнение. Вероятно, вы хотите вернуть false, когда он находится в массиве, и true во всех других условиях.

for ($i=0, $n=sizeof($products); $i<$n; $i++) {
    if( in_array( $products[$i]['id'], $exlproducts ) ) {
        //use this to debug exclusions:
        return false;
    }
}
return true;

Редактировать: Вы действительно не должны больше использовать $HTTP_POST_VARS.

1 голос
/ 28 ноября 2011

Понял ....

$ HTTP_POST_VARS не является глобальным, изменил его на параметр для передачи.

...