ФорумПрограммированиеPHP для идиотов → Вопрос по форме

Вопрос по форме

  • smackthat

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 2:12

    Привет! Хочу сделать, чтобы когда выбираешь определынный пунк меню в <select>, то появляются новые поля для ввода. Как это сделать?

    Я подозреваю jquery мне поможет с этим?
  • rider-sx

    Сообщения: 2717 Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 2:17, спустя 5 минут 5 секунд

  • smackthat

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 2:27, спустя 9 минут 43 секунды

    спасибо читаю
  • smackthat

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 6:18, спустя 3 часа 51 минуту 8 секунд

    Все работает. Но если попытаться прикрутить JsHttpRequest к фреймворку CodeIgniter, то нет.

    Насколько я понял, то back-end нужно делать через функцию контроллера:

           function ajax()
           {

                $this->load->library('JsHttpRequest');
                $JsHttpRequest=new $this->JsHttpRequest('utf-8');
               
               switch($this->input->post('order_type'))
               {
                   case 'personal_order':
                       $html=&quot;<h1>personal order</h1>&quot;;
                   break;


                   case &#39;public_order&#39;:
                       $html=&quot;<h1>public_order</h1>&quot;;
                   break;
               }
               echo $html;
           }


    front-end сделан так:

    <script>
    function doload(value){
    var req=new JsHttpRequest();
    req.onreadystatechange=function()
    {
       if(req.readyState==4)
           document.getElementById(&quot;result&quot;).innerHTML=req.responseText;}
           
       req.open(&quot;POST&quot;,&quot;<? echo site_url(&#39;main/ajax&#39;); ?>&quot;,true);
       req.send({order_type:value});
    }
    </script>


    <h5>Тип заказа</h5>
    <select name=&quot;order_type&quot; onchange=&quot;doload(this.value);&quot;>
    <option value=&quot;not_selected&quot;>Выберите тип заказа</option>
    <option value=&quot;personal_order&quot;>Персональный заказ</option>
    <option value=&quot;public_order&quot;>Публичный заказ</option>
    </select>

    <div id=&quot;result&quot;></div>


    Тоесть вот эта строка ссылается на back-end:
        req.open(&quot;POST&quot;,&quot;<? echo site_url(&#39;main/ajax&#39;); ?>&quot;,true);


    При переключении менюшки ничего не происходит. Хотя если ссылаться не на функцию контролерра, а на конкретный файл, то все работает. Помогите разобраться
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 25 июля 2009 г. 6:21, спустя 2 минуты 28 секунд

    в первом кучке кода ты получаешь переменную из $this->input->post(&#39;order_type&#39;) а должен получать из $JsHttpRequest если я правильно понимаю
  • smackthat

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 6:24, спустя 3 минуты 14 секунд

    нет, с постом все правильно. Вот рабочий варинт через отдельный файл. Тоесть когда:
     req.open(&quot;POST&quot;,&quot;<? echo base_url . &#39;/ajax/ajax_test.php&#39;); ?>&quot;,true);


    ajax_test.php:

    <?
    require(&quot;JsHttpRequest.php&quot;);
    $JsHttpRequest=new JsHttpRequest(&quot;utf-8&quot;);

    switch($_POST[&quot;order_type&quot;])
    {
    case &#39;personal_order&#39;:
    $html=&quot;<h1>personal order</h1>&quot;;
    break;


    case &#39;public_order&#39;:
    $html=&quot;<h1>public_order</h1>&quot;;
    break;
    }
    echo $html;
    ?>

    тут тоже через пост и все работает
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 25 июля 2009 г. 6:24, спустя 26 секунд


    в первом кучке кода ты получаешь переменную из $this->input->post(&#39;order_type&#39;) а должен получать из $JsHttpRequest если я правильно понимаю
    я так же думаю
    Сапожник без сапог
  • smackthat

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 6:26, спустя 2 минуты 10 секунд

    там еще указывается каким методом передавать данные, вот:
    req.open(&quot;POST&quot;,&quot;&lt;? echo site_url(&#39;main/ajax&#39;); ?>&quot;,true);

    тоесть через пост
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 25 июля 2009 г. 7:19, спустя 52 минуты 23 секунды

    ну через пост то понятно
    у тебя JsHttpRequest должен обработать этот пост иначе какой смысл от его подключения ?!
    а то что ты получаешь результат в ajax_test.php это просто совпадение
  • smackthat

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 7:33, спустя 14 минут 30 секунд

    смысл подключения мне не ясен. Я делал как написано в статье, вот:
    http://pyha.ru/articles/php/ajax-select/

    там тоже самое, но через _request:

    <?
    require(&quot;JsHttpRequest.php&quot;); //Подключаем библиотеку
    $JsHttpRequest=new JsHttpRequest(&quot;windows-1251&quot;); //Создаем экземпляр класса, указываю рабочую кодировку.

    //Далее все просто. В зависимости от выбранного параметра в первом select`e, заполняем переменную $html необходимым кодом.

    switch($_REQUEST[&quot;country&quot;]):
    // …. обработка

  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 25 июля 2009 г. 7:37, спустя 3 минуты 31 секунду

    smackthat, ок {+++29+++} перед свичем
    switch($this->input->post(&#39;order_type&#39;))
    сделай дамп поста глянь что там
  • smackthat

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 7:56, спустя 19 минут 20 секунд

    блин, а как это сделать?

    я пробую так:

    $myFile = &quot;testFile.txt&quot;;
    $fh = fopen($myFile, &#39;w&#39;) or die(&quot;can&#39;t open file&quot;);
    $stringData = $this->input->post(&#39;order_type&#39;);
    fwrite($fh, $stringData);
    fclose($fh);

    но файл не создается…
  • Givi

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 8:02, спустя 6 минут 12 секунд

    smackthat, если я правильно понял, то Мавр хочет от тебя var_dump($_POST);
  • smackthat

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 8:08, спустя 5 минут 26 секунд

    я пробывал через дебаггер, типа в watch добавил переменную $_POST, но как только я выбираю что-то из списка, тоесть должна начать исполняться ajax часть, то получаю ошибку такую:


    {+++57+++} я поэтому и пробывал _POST вывести через файл. {+++53+++} короче, я так понял, что до функции _ajax оно даже не доходит, где то раньше ошибка
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 25 июля 2009 г. 8:13, спустя 5 минут 30 секунд

    smackthat, ну правильно шибка 404 {+++51+++} видимо с контролом чтото

Пожалуйста, авторизуйтесь, чтобы написать комментарий!