За последние 24 часа нас посетили 30908 программистов и 1446 роботов. Сейчас ищут 824 программиста ...

Как запустить сценарий при изменении контрола-списка?

Тема в разделе "PHP для новичков", создана пользователем usik, 23 окт 2008.

  1. usik

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

    С нами с:
    22 сен 2008
    Сообщения:
    29
    Симпатии:
    0
    пусть есть БД из 2-ух таблиц,

    Города
    id
    Название

    Улицы
    id
    buf_id
    Название_улицы.

    Эти таблицы связаны 1 ко многим.

    Я запускаю сценарий и там лишь список(он ниже) с названием городов , и рубрикатор .
    Код (Text):
    1. <form action="index.php" method="get">
    2.  
    3. <table class=City_Select>
    4. <tr>
    5.   <td width=150>
    6.    <b>Выбирете город</b>
    7.   </td>
    8.   <td>
    9.    <select name="Select_City" size=1>
    10.      <option value=1 selected>Санкт-Петербург</option>
    11.      <option value=2>Москва</option>
    12.    </select>
    13.   </td>
    14. </tr>
    15.  
    16. </table>
    </form>


    Я выбираю из списка городов нужный мне, пусть Питер. И то что я выбрал из списка , должно где-то сохранится. Далее нажимаю на буквы рубрикатора и т.к. я выбрал Питер то по нажатии буквы, например 'A', на экран будут выписываться улицы(в соответствии с запрсом ) Питера на 'A'. Если я выбираю другой город, например Москва, то должен запуститься вновь сценарий в моем случае index.php и должно отобразиться лишь исходная информация, т.е рубрикатор и список городов, а значение вновь выбранного города должно где-то храниться.И теперь когда я буду нажимать на буквы рубрикатора будет идти уже запрос к улицам Москвы. К этому значению я могу добраться через массив Get

    В общем как реализуются подобные задачи, нужно ли перезапускать рекурсивно сценарий, а потом
    через массив GET брать значение, того что я выбрал в списке. Или такие вещи как-то по-другому делаются?
     
  2. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Можно сабмитить форму на select.onchange() и перерисовывать страницу с рубрикатором, сразу передавая массив улиц и по нажатию на букву формировать вывод яваскриптом.

    Можно сабмитить форму при нажатии буквы на рубрикаторе и передавать сразу и город и выбранную букву, с этими данными делать запрос в БД и выводить результат

    Можно не сабмитить форму вообще, а на onclick() букв рубрикатора формировать яваскриптом url с параметрами текущей опции из селекта и нажатой буквы и переходить по ней.

    Можно аяксом передавать в скрипт город (текущее значение select'a) и принимать улицы.

    Первый вариант имхо самый дурацкий, но я его уже не раз встречал в нете.
    Второй и третий мало отличаются по смыслу. Но второй работает при отключенном js и позволяет если надо передавать данные post'ом а не get-ом
    ну а аякс - он и есть аякс
     
  3. Mete0

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

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
  4. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    а зачем использовать куки и сессии? при смене города все равно php скрипт придется дергать, все равно с формы передавать выбранный город в скрипт. А тогда можно и в простой переменной хранить. Или вообще не хранить, все равно при нажатии на рубрикатор город с формы никуда не девается.
     
  5. Riateche

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

    С нами с:
    19 окт 2008
    Сообщения:
    9
    Симпатии:
    0
    Ajax подходит здесь больше всего, остальное - костыли.
     
  6. decoder

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

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    Конечно, Ajax.

    Кстати, первый вариант можно и без перезагрузки страниц делать. Сразу загружать все в виде JS-массивов/JSON и потом уже работать с ними на стороне клиента (JS). Но это не рационально. Получается, надо выбирать все записи из обеих таблиц и долго загружаться будет.
     
  7. usik

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

    С нами с:
    22 сен 2008
    Сообщения:
    29
    Симпатии:
    0
    Народ спс вам за многочисленные советы, но я только начинаю осваивать все это web программирование, поэтому не могли бы вы помочь кодом , а то я могу воплотить ваши идеи в код.
     
  8. Riateche

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

    С нами с:
    19 окт 2008
    Сообщения:
    9
    Симпатии:
    0
    Если честно, я не очень понял, что именно должен делать скрипт.
     
  9. usik

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

    С нами с:
    22 сен 2008
    Сообщения:
    29
    Симпатии:
    0
    Короче есть список
    Код (Text):
    1.  
    2. <form action="index.php" method="get">
    3. <table class=City_Select>
    4. <tr>
    5.   <td width=150>
    6.    <b>Выбирете город</b>
    7.   </td>
    8.   <td>
    9.    <select name="Select_City" size=1>
    10.      <option value=1 selected>Санкт-Петербург</option>
    11.      <option value=2>Москва</option>
    12.    </select>
    13.   </td>
    14. </tr>
    15.  
    16. </table>
    А мне надо чтобы при выборе нового значения сработал сценарий index.php и вывел значение, которе я выбрал в списке, т.е.

    Код (Text):
    1.  
    2. Index.php
    3. <?php
    4.  
    5.      $s=$_GET['Select_city'];
    6.     echo $s;
    7.  
    8.    }
    9. ?>
     
  10. Mete0

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

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    Оно?
    HTML:
    1.  
    2. <form action="index.php" method="get">
    3. <table class="City_Select">
    4.  <tr>
    5.   <td width=150><b>Выбирете город</b></td>
    6.   <td><select name="Select_City" size=1 OnChange="location='index.php?Select_city='+this.options[selectedIndex].text">
    7.        <option value=1 selected>Санкт-Петербург</option>
    8.        <option value=2>Москва</option>
    9.       </select></td>
    10.   </tr>
    11.  
    P.S. Ты только не забудь фильтровать данные которые принимает скрипт... Что-то вроде:
    PHP:
    1. <?php
    2. $city = isset($_GET['Select_city']) ? htmlspecialchars($_GET['Select_city']) : null;
    3. echo $city;
    4. ?>
     
  11. usik

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

    С нами с:
    22 сен 2008
    Сообщения:
    29
    Симпатии:
    0
    Вроде бы да. Я заменил значения в файлах на то что ты мне написал. Запускаю файл со списком, меняю город и на экран выписывается скрипт файла index.php. Я упростил сценарий в надежде увидеть результат до такого

    Код (Text):
    1.  <?php
    2.  $city = $_GET['Select_city'];
    3.  echo $city;
    4.  ?>
    и тоже самое... выводится все что записано в файле index.php.
    Что тут не так.
     
  12. Mete0

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

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    Ужас.
    Настроить нужно web server...
     
  13. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Если переданные данные будут идти в БД, перед записью их надо обработать фунцией mysql_real_escape_string и никак иначе.
     
  14. Mete0

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

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    [vs]
    Разумеется. :)
     
  15. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    [vs]
    а (int)$id можно? ;)
     
  16. usik

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

    С нами с:
    22 сен 2008
    Сообщения:
    29
    Симпатии:
    0
    А где ставится эта настройка... Другие php скрипты у мя работают.
     
  17. Mete0

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

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    У других php-скриптов расширение какое? *.php? Если да то, файл index.php имеет другое расширение не *.php, и потому не выводится.
    Если у других скриптов расширение не *.php, а например *.phtml то переименуй файл index.php в index.phtml.
     
  18. Mete0

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

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    А настройка эта называется AddType application/x-httpd-php .php у сервера apache, в конфиге, httpd.conf
     
  19. kostyl

    kostyl Guest

    Ребяткию А аджаксмом та как? есть примерчик???
     
  20. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А
    PHP:
    1. <?php
    Не забыли? :lol:
     
  21. kostyl

    kostyl Guest

    kostyl
    ну скажите кто знает?
     
  22. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    kostyl
    в поиск
     
  23. usik

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

    С нами с:
    22 сен 2008
    Сообщения:
    29
    Симпатии:
    0
    AddType application/x-httpd-php .php у сервера apache, в конфиге, httpd.conf у меня в файле раскоменчена.

    Содержание файла index.php

    Код (Text):
    1. <?php
    2.  $city = $_GET['Select_city'];
    3.  echo $city;
    4.  echo "asfasfasf";
    5. ?>
    Я его отдельно запускаю и вижу результат работы скрипта-asfasfasf.

    Файл со списком Sel.html

    Код (Text):
    1. <form action="index.php" method="get">
    2.  <table class="City_Select">
    3.   <tr>
    4.    <td width=150><b>Выбирете город</b></td>
    5.    <td><select name="Select_City" size=1 OnChange="location='index.php?Select_city='+this.options[selectedIndex].text">
    6.        <option value=1 selected>Санкт-Петербург</option>
    7.        <option value=2>Москва</option>
    8.        </select></td>
    9.    </tr>
    10.  </table>
    А когда я меняю значение в списке, то результата работы скрипта я не вижу, а вижу все то что написано в файле index/php. Что у меня такое как с этим бороться?