За последние 24 часа нас посетили 17875 программистов и 1716 роботов. Сейчас ищут 912 программистов ...

Вызов рекурсии-возникла пустая страница сайта

Тема в разделе "PHP и базы данных", создана пользователем kotik2, 26 окт 2015.

  1. kotik2

    kotik2 Новичок

    С нами с:
    10 окт 2015
    Сообщения:
    39
    Симпатии:
    0
    Добрый вечер,
    Код (PHP):
    1. function Recursion($brand,$artid){
    2.     
    3.     $query = "SELECT DISTINCT `ArtCanonical`,`MfcNameCanonical`  FROM `do_search_art_syn` WHERE `Art`='" .mysql_real_escape_string($artid). "' AND `MfcName`='" .mysql_real_escape_string($brand). "'
    4.     and  (Art!=ArtCanonical or MfcNameCanonical!=MfcName)" ;
    5.     
    6.     $result = mysql_query($query);
    7.     
    8.         while($Row = mysql_fetch_array($result)) {
    9.             if ((!in_array($Row['ArtCanonical'],$art[0]))&&(!in_array($Row['MfcNameCanonical'],$art[1]))){
    10.             $art[0][]=$Row['ArtCanonical'];
    11.             $art[1][]=$Row['MfcNameCanonical'];
    12.         
    13.     
    14.                 Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical']);//
    15.             }
    16.         }
    17.     
    18.     
    19.     return $art;    
    20. }
    21. $mas=Recursion('oc47','knecht');
    22.  
    в браузере, в коде странички.
    Код (PHP):
    1. <html>
    2. <head></head>
    3. <body></body>
    4. </html>
    5.  
    Почему такое поведение?Если убрать внутри рекурсии вызов самой себя, то нормуль отображается страница сайта. Почему?

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    потому что скорее всего сервер падает статусом 500 и браузер показывает фейк-страницу чтоб было хоть что-то.
    где дебаг скрипта?
     
  3. kotik2

    kotik2 Новичок

    С нами с:
    10 окт 2015
    Сообщения:
    39
    Симпатии:
    0
    у меня так таковой ошибки не возникает...(именно 500 ).
    как устранить данную ошибку, у меня ошибка в рекурсии?
    а просто код.
    Код (PHP):
    1. <html>
    2. <head></head>
    3. <body></body>
    4. </html>
    5.  
    Дебаг скрипта? где , в браузере?

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  4. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    сделай какой нить вывод строки между этими строчками
    Код (PHP):
    1. $art[1][]=$Row['MfcNameCanonical'];
    2. // вот тут что то понятное для тебя (;
    3. Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical']);//
    4.  
     
  5. kotik2

    kotik2 Новичок

    С нами с:
    10 окт 2015
    Сообщения:
    39
    Симпатии:
    0
    Код (PHP):
    1.   $art[1][]=$Row['MfcNameCanonical'];
    2.             echo $Row['MfcNameCanonical'].'-'.$Row['ArtCanonical'];
    3.                Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical']);//
    4.  
    ничего не выводит, почему-то...
    а если убрать
    Код (PHP):
    1.   Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical']);// 
    то выведет. Почему, не пойму.... даже объявляла $art глобальной, тоже не выводилось
    Код (PHP):
    1. global $art;
    2. $art[0][]=' ';$art[1][]=' ';
    3. $mas=Recursion('oc47','knecht');
    4.  
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    лог ошибок там случаем не гласит лимит рекурсии? вообще попробуйте сначала сделать вардамп текущего состояния функции и потом тут же сделайте выход.
     
  7. kotik2

    kotik2 Новичок

    С нами с:
    10 окт 2015
    Сообщения:
    39
    Симпатии:
    0
    если вы имеете ввиду лог сервера, куда пишут ошибки, то их попросто нет, именно тех ошибок на конкретной странице., где выполняется рекурсия.
    про вардамп переменной. а про вардамп текущего состояния функции мне не известно.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    давай так. расскажи что ты хочешь сделать, а то может у тебя реализация кривая.
     
  9. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    вероятнее всего, как мне кажется при второй рекурсии - база выдает пустые значения, и нужно условие на выход написать ((:)
     
  10. kotik2

    kotik2 Новичок

    С нами с:
    10 окт 2015
    Сообщения:
    39
    Симпатии:
    0
    Вторую рекурсию руками написала, повторила все , что написано было до вызова рекурсии(вызов рекурсии самой себя убрала)-нормально все выводит.
    Возможно-третья , четвертая рекурсия пустые...

    У каждой пары артикула и бренда есть аналоги бренд и артикул, у последних свои аналоги. -вот что я хочу сделать.
     
  11. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    можно условно бесконечным циклом обойтись. может быть даже снизит нагрузку на сервер.
     
  13. kotik2

    kotik2 Новичок

    С нами с:
    10 окт 2015
    Сообщения:
    39
    Симпатии:
    0
    Код (PHP):
    1. function Recursion($brand,$artid,$r){
    2.     echo 'beg '.var_dump($art).'</br>';
    3.     
    4.     if ($r<=1){
    5.     $db = mysql_connect("localhost", "det", "")
    6.         or die("Could not connect: ".mysql_error());
    7.     //Установка кодировки UTF8
    8.     mysql_query("set names utf8");
    9.     //Выбор базы данных
    10.     mysql_select_db("det");
    11.     $query = "SELECT DISTINCT `ArtCanonical`,`MfcNameCanonical`  FROM `do_search_art_syn` WHERE `Art`='" .mysql_real_escape_string($artid). "' AND `MfcName`='" .mysql_real_escape_string($brand). "'
    12.     and  (Art!=ArtCanonical or MfcNameCanonical!=MfcName)" ;
    13.     echo $query.'</br>';
    14.     $result = mysql_query($query) or trigger_error(mysql_error()." in ".$query);
    15.     
    16.     while($Row = mysql_fetch_array($result)) {
    17.             if ((!in_array($Row['ArtCanonical'],$art[0]))&&(!in_array($Row['MfcNameCanonical'],$art[1]))){
    18.             $art[0][$i]=$Row['ArtCanonical'];
    19.             $art[1][$i]=$Row['MfcNameCanonical'];
    20.             echo $r.' '.$Row['MfcNameCanonical'].'-'.$Row['ArtCanonical'].'</br>';
    21.             echo var_dump($art).'</br>';
    22.             /*$query = "SELECT DISTINCT `ArtCanonical`,`MfcNameCanonical`  FROM `do_search_art_syn` WHERE `Art`='" .mysql_real_escape_string($Row['ArtCanonical']). "' AND `MfcName`='" .mysql_real_escape_string($Row['MfcNameCanonical']). "'
    23.     and  (Art!=ArtCanonical or MfcNameCanonical!=MfcName)" ;
    24.             $res = mysql_query($query) or trigger_error(mysql_error()." in ".$query);
    25.             while($Row1 = mysql_fetch_array($res)) {
    26.                 if ((!in_array($Row1['ArtCanonical'],$art[0]))&&(!in_array($Row1['MfcNameCanonical'],$art[1]))){
    27.                 $art[0][]=$Row1['ArtCanonical'];
    28.                 $art[1][]=$Row1['MfcNameCanonical'];
    29.                 echo '2 '.$Row['MfcNameCanonical'].'-'.$Row['ArtCanonical'].'</br>';
    30.                 }
    31.             }*/
    32.             
    33.                 Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical'],$r+1);
    34.             }
    35.     }
    36.     }
    37.     return $art;    
    38. }
    39.  
    Почему у меня обнуляется массив $art, то есть на выходе не все значения $art.Делала $art глобальным, не помогло....
     
  14. kotik2

    kotik2 Новичок

    С нами с:
    10 окт 2015
    Сообщения:
    39
    Симпатии:
    0
    я пробовала сделать выход из рекурсии, не получается... может, я где-то туплю
    Код (PHP):
    1. if (mysql_num_rows($result)==0) return $art;
    2.  
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  15. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    на сколько я понимаю текущую вариацию функции, то это часть строки опять же будет истинной, раз
    Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical'],$r+1); (;

    пример рекурсии
    Код (PHP):
    1. function recurs( $iValue = 0 )
    2. {
    3.   if( 1 > $iValue ) return 0;
    4.   return $iValue + recurs( $iValue - 1 );
    5. }
     
  16. kotik2

    kotik2 Новичок

    С нами с:
    10 окт 2015
    Сообщения:
    39
    Симпатии:
    0
    p@R@dox 55RU, спасибо за сообщение, но это не то...

    выход из рекурсии, если запрос в базу возвращает ничего....- как-бы идет продолжение действии ...
    например, ищем аналоги артикул и бренд в базе, если они есть,то записываем в массив аналог артикул и аналог бренд, и вызываем по артикулу и бренду аналога рекурсию.Если нет, то продолжим записывать аналог и бренд...
    Код (PHP):
    1. function Recursion($brand,$artid,$art){
    2.  
    3.     $db = mysql_connect("localhost", "det", "")
    4.         or die("Could not connect: ".mysql_error());
    5.     //Установка кодировки UTF8
    6.     mysql_query("set names utf8");
    7.     //Выбор базы данных
    8.     mysql_select_db("det");
    9.     $query = "SELECT DISTINCT `ArtCanonical`,`MfcNameCanonical`,`Desc`  FROM `do_search_art_syn` WHERE `Art`='" .mysql_real_escape_string($artid). "' AND `MfcName`='" .mysql_real_escape_string($brand). "'
    10.     and  (Art!=ArtCanonical or MfcNameCanonical!=MfcName)" ;
    11.     $result = mysql_query($query) or trigger_error(mysql_error()." in ".$query);
    12.     if (mysql_num_rows($result)>0){
    13.         while($Row = mysql_fetch_array($result)) {
    14.                 if ((!in_array($Row['ArtCanonical'],$art[0]))&&(!in_array($Row['MfcNameCanonical'],$art[1]))){
    15.                 $art[0][]=$Row['ArtCanonical'];
    16.                 $art[1][]=$Row['MfcNameCanonical'];
    17.                     $art=Recursion($Row['MfcNameCanonical'],$Row['ArtCanonical'],$r+1,$art);//
    18.                 }
    19.          }
    20.     }else {return $art;}
    21.     
    22.     return $art;    
    23. }
    24.  
    вроде все заработало, но мне кажется не все правильно....(не все аналоги выводятся)

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  17. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    kotik2, всё то (((:) Просто надо понять, как работает стэк рекурсии (;
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    или решить нужны ли они тут
     
  19. kotik2

    kotik2 Новичок

    С нами с:
    10 окт 2015
    Сообщения:
    39
    Симпатии:
    0
    то есть вы считаете , что у меня правильно....?
    стек рекурсии?
     
  20. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    мы тут ничего не считаем (((:)
    да, стек. Новое слова для тебя? ((:)
    как на счет allocate??? ((((:)