За последние 24 часа нас посетили 17783 программиста и 1718 роботов. Сейчас ищут 906 программистов ...

Загадка Петрова и Васечкина - IMPLODE не работает.

Тема в разделе "PHP для новичков", создана пользователем Alexnewaro, 10 мар 2015.

  1. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Есть форма, которая через AJAX выводит предварительные результаты выбора чекбоксов, в виде таблицы.
    Затем среди результатов пользователь чекбоксит то, что ему нужно и опять AJAX'ом это должно выводиться под формой. Проблема в том, что уже проверенная в бою конструкция
    Код (Text):
    1. if( count($_POST['var1']) > 0 )
    2. {
    3. $varq1 = implode(',',$_POST['var1']);
    4.  $str.= ' AND type IN('.$varq1.')';
    5. }
    совершенно не хочет складывать "в одну копилку" значения отмеченных чекбоксов.
    Прошу помощи советом.

    Подробности:
    пример начальной формы
    Код (Text):
    1.  
    2. <input type="checkbox" class="place" name="place[]" id="place" value="42" onclick="Hotels();">Имеретинка
    3. <input type="checkbox" class="place" name="place[]" id="place" value="8" onclick="Hotels();">Красная Поляна
    4. <input type="checkbox" class="place" name="place[]" id="place" value="10" onclick="Hotels();">Дагомыс
    5. <input type="checkbox" class="place" name="place[]" id="place" value="9" onclick="Hotels();">Лазаревское
    ее функция ajax:
    Код (Text):
    1. function Hotels()
    2. {  
    3.     var query;
    4.     var s = $('input:checked, #place','form').serialize();
    5.     query = s;
    6.     Request2(query);
    7. }
    функция Request2
    Код (Text):
    1. function Request2(query)
    2. {
    3.     req.open('post', 'hotelsearchajax.php' , true );
    4.     req.onreadystatechange = Refresh;
    5.     req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    6.     req.send(query);  
    7. }
    php-обработчик конкретной части формы (значения отмеченных чекбоксов уходят в запрос, перечисленные через запятую):

    Код (Text):
    1. if( count($_POST['type']) > 0 )
    2. { $type = implode(',',$_POST['type']);
    3.  $str.= ' AND type IN('.$type.')'; }
    После того, как выводятся предварительные результаты, та же самая схема - не работает. POST уходит с верными данными, echo $_POST['var1']; показывает что все верно. Но формироваться implode не хочет ((
     
  2. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    implode раскладывает массив, а не строку.
    Если вы говорите, что echo все норм показывает, то каким боком тут implode?
    echo бы не показал вам норм, если бы вы в него массив зафигачили бы.

    Ко всему этому я не разу не увидел, где у вас $_POST['place'].
     
  3. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Прошу прощения. пример собирал из кусков.
    обработчик, конечно, такой:
    Код (Text):
    1. if( count($_POST['place']) > 0 )
    2. { $place= implode(',',$_POST['place']);
    3.  $str.= ' AND place IN('.$place.')'; }
    ну так секундами ранее это же срабатывает... я в обработчик предыдущего запроса отправляю данные в точно таком же формате:
    place%5B%5D=42,
    принимаю через
    Код (Text):
    1. if( count($_POST['place']) > 0 )
    2. { $place= implode(',',$_POST['place']);
    3.  $str.= ' AND place IN('.$place.')'; }
    на выходе получаю запрос:
    Код (Text):
    1. $sql = "SELECT *
    2.         FROM таблица
    3.         WHERE town=4 AND place IN(42)";
    Добавлено спустя 28 минут 54 секунды:
    сейчас обработчик такой:

    Код (Text):
    1.  
    2. if( count($_POST['var1']) > 0 )
    3. {
    4. $varq1 = implode(',',$_POST['var1']);
    5. $str.= ' AND `hotel_id` IN('.$varq1.')';
    6. }
    7.  
    8. echo '<pre>';
    9. var_dump($varq1);
    10. echo '</pre>';
    11. echo 'id:'.$varq1.'<br>';
    12. echo 'str:'.$str.'<br>';
    13. echo $_POST['var1'];
    .

    на выходе:

    Код (Text):
    1. NULL
    2. ID:
    3. STR:  AND `HOTEL_ID` IN()
    4. HOTEL%5B%5D=9&HOTEL%5B%5D=10&HOTEL%5B%5D=34
    кстати, вот обработчик ajax:
    Код (Text):
    1. function selecthotel() {
    2. $(function(){
    3.     var s = $('input:checked, #hotel','form2').serialize();
    4.    
    5.       alert(s);
    6.      
    7.         $.ajax({
    8.             type: "POST",
    9.             url: "hotelselectajax.php",
    10.             data: {var1:s},
    11.             success: function(html)
    12.                 {
    13.                     $("#ajax2").html(html);
    14.                    
    15.                 }
    16.  
    17.         });
    18.  
    19.     document.getElementById('ajax2').innerHTML = '<br>loading2';
    20. });
    21. }
    Добавлено спустя 10 минут 6 секунд:
    Разобрался. Обработчик ajax мне косячил. Ну или я, с его помощью :)))
    Сделал по-другому:

    Код (Text):
    1. function selecthotel()
    2. {  
    3.     var query;
    4.     var s = $('input:checked, #hotel','form').serialize();
    5.     query = s;
    6.     Request3(query);
    7. }
    8.  
    9. function Request3(query)
    10. {
    11.     req.open('post', 'hotelselectajax.php' , true );
    12.     req.onreadystatechange = Refresh;
    13.     req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    14.     req.send(query);  
    15. }
    Только ajax - полу-темный лесок для меня и не соображу пока как назначить отдельную функцию на вывод результата, но это уже дело наживное...

    Спасибо!
     
  4. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Сделал по-конски пока что.
    Последний AJAX включает в себя и предпоследний AJAX по второму разу, чтобы выводились результаты обоих, а не так, чтобы последний замещал собой предпоследний )))))))))))))