2010-08-24 2 views
1

Я пытаюсь цикл один раз с $cat_id, чтобы захватить его id и category значения для значения $url, а затем добавить значения id и category к $parent_cat_id и $sub_cat_name массивам, а затем мертвая $parent_cat_id значения только добавлен в массив, чтобы найти его значения id и category и добавить их в массивы до тех пор, пока все значения $url не будут зациклированы. Но я могу получить только первое значение $url в цикле, а не остальные значения $url для цикла. Может кто-нибудь поможет мне исправить эту проблему?PHP и MySQL зацикливание проблемы

PHP-код.

$parent_cat_id = array(); 
$sub_cat_name = array(); 
$cat_id = 23; 

for ($i = 1; isset($_GET['sub'.$i]); ++$i) { 
    $url[$i] = '&sub' . $i . '=' . $_GET['sub'.$i]; 
    if(isset($cat_id)){ 
     $dbc = mysqli_query($mysqli, "SELECT id, category FROM categories WHERE url = '" . $url[$i] . "' AND parent_id = '" . $cat_id . "'"); 
     if (!$dbc) { 
      print mysqli_error($mysqli); 
     } else { 
      while($row = mysqli_fetch_array($dbc)){ 
       $parent_cat_id[] = $row['id']; 
       $sub_cat_name[] = $row['category']; 
      } 
     } 
    } else { 
     $dbc = mysqli_query($mysqli, "SELECT id, category FROM categories WHERE url = '" . $url[$i] . "' AND parent_id = '" . $parent_cat_id[$i] . "'"); 
     if (!$dbc) { 
      print mysqli_error($mysqli); 
     } else { 
      while($row = mysqli_fetch_array($dbc)){ 
       $parent_cat_id[] = $row['id']; 
       $sub_cat_name[] = $row['category']; 
      } 
     } 
    } 
} 

Текущий выход.

$parent_cat_id Array ([0] => 77) 

$sub_cat_name Array ([0] => A1) 

Ожидаемый результат.

$parent_cat_id Array ([0] => 77 [1] => 78 [2] => 97 [3] => 100) 

$sub_cat_name Array ([0] => A1 [1] => A2 [2] => B4 [3] => CD) 
+1

Что именно вы пытаетесь выполнить с помощью 'i Cam

+0

, так как я не знаю, сколько подкатегорий есть 'PHP_INT_MAX', только петли так много раз подкатегорий, что и его префект. – g4tv

+0

Кроме того, можете ли вы отредактировать этот код таким образом, чтобы он был как можно более простым, все еще демонстрируя проблемы, которые вы испытываете? Я не думаю, что какой-либо из этих материалов базы данных имеет отношение к вашей проблеме. – Cam

ответ

0

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

Однако ознакомьтесь с приведенным ниже кодом (упрощенным с вашего). Для наглядности я удалил большую часть содержимого Петля, так что вы можете увидеть, что на самом деле происходит ...

<?php 
    $_GET=array('sub1'=>'val_sub1','sub2'=>'val_sub2','sub3'=>'val_sub3','sub4'=>'val_sub4'); 
    print_r($_GET); 
    /* 
    Array 
    (
     [sub1] => val_sub1 
     [sub2] => val_sub2 
     [sub3] => val_sub3 
     [sub4] => val_sub4 
    ) 
    */ 

    $url=array(); 

    for ($i = 1;isset($_GET['sub'.$i]); $i++) { 
     $url[$i] = '&#038;sub' . $i . '=' . $_GET['sub'.$i]; 
    } 

    print_r($url); 
    /* 
    Array 
    (
     [1] => &#038;sub1=val_sub1 
     [2] => &#038;sub2=val_sub2 
     [3] => &#038;sub3=val_sub3 
     [4] => &#038;sub4=val_sub4 
    ) 
    */ 
?> 

Как вы можете видеть, цикл работает отлично. Так что либо ...

  1. проблема, которую вы испытываете, потому что что-то происходит ужасно неправильно с материалом базы данных и ваш сценарий просто сбой после одного цикла (что маловероятно), или

  2. в размере $ Параметр _GET имеет только одно значение «под», поэтому на самом деле должно быть просто однократное (вероятно) однократное (0), или

  3. Возможно, я просто не понимаю ваш вопрос, как и считаю.

+0

Я пытаясь захватить parent_id из каждого $ url – g4tv

+0

@ g4tv: Хорошо - как насчет этого: Можете ли вы представить нам какой-то вывод (например, print_r)? Нам нужен: ** фактический вывод ** (что на самом деле напечатано) и ** ожидаемый вывод ** (что будет напечатано, если скрипт должен работать так, как вы хотите). – Cam

+0

@ g4tv: Ах. Вы уверены, что у вас есть правильные строки в базе данных? как я могу видеть. – Cam

Смежные вопросы