За последние 24 часа нас посетили 17147 программистов и 1597 роботов. Сейчас ищут 1520 программистов ...

Выпадающий список с <optgroup> на PHP+MySQL - РЕШЕНО

Тема в разделе "PHP для новичков", создана пользователем Jaqwerty, 20 май 2013.

  1. Jaqwerty

    Jaqwerty Новичок

    С нами с:
    20 май 2013
    Сообщения:
    5
    Симпатии:
    0
    Всем привет!
    В php новичок, прошу сильно не пинать и помочь разобраться с выпадающим списком из БД. Проблема такова:

    В БД есть большая таблица расписания движения автобусов с id; city (город); way (направление); table(html таблица c расписанием).

    В файле bus_rasp.php имеющийся скрипт без проблем выводит из БД список с <optgroup> по way и <option> - по city, . Как вывести в <div id="bus_content_rasp"> html таблицу c расписанием из table, в соответствии с выбранным городом?



    bus_rasp.php
    Код (Text):
    1.  
    2. <div id="bus_content_up">
    3.  
    4. <?php
    5. include("blocks/db.php");
    6. $string = 'SELECT * FROM city';
    7. $query = mysql_query($string);
    8.  
    9. print '<form name = "bus_rasp" method="post">';
    10. print '<select name ="city" onchange="this.form.submit()">';
    11. $group = array();
    12. while  ($row = mysql_fetch_assoc($query)) {
    13. $group[$row['way']][] = $row;}        
    14. foreach ($group as $key => $values) {
    15. echo '<optgroup label="'.$key.'">';
    16. foreach ($values as $value) {
    17. echo '<option value ="'.$value['id'].'">'.$value['city'].'</option>';}
    18.  
    19. echo "</optgroup>";}              
    20. print "</select>";
    21. print "</form>";
    22. ?>
    23.  
    24. </div>
    25.  
    26. <div id="bus_content_rasp">
    27. if (isset($_POST['city']))  {$city =$_POST['city'];}
    28. echo $city;
    29. ________КАК ВЫВЕСТИ ДАННЫЕ ИЗ  table ?____
    30.  
    31. </div>
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Re: Большой выпадающий список

    1. Раз вы так легко делаете вложенные foreach, интересует: в каком виде хранятся записи?
    2. Если таблица большая, не стоит её считывать всю 'SELECT * FROM city', т.к. в будущем может не хватить памяти Выбирайте неободимые поля (например, 'SELECT id,way,city FROM city').
     
  3. Jaqwerty

    Jaqwerty Новичок

    С нами с:
    20 май 2013
    Сообщения:
    5
    Симпатии:
    0
    Re: Большой выпадающий список

    Да я сам пытаюсь разобраться в работе этого скрипта )))). За совет с таблицей - YSandro спасибо.
    Но все таки как вывести таблицу из table.


    И еще что нужно в скрипте доработать что бы при выборе города он оставался (как без onchange="this.form.submit())
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Re: Большой выпадающий список с <optgroup>

    Можно сделать, чтобы при перезагрузке оставался выбор, можно не перезагружать страницу вовсе, а подружать данные в нужный элемент.
    покажите sql запрос построения таблицы, или скриншот или хоть что, чтобы было понятно, как выглядят строки, какие поля есть в таблице.
     
  5. Jaqwerty

    Jaqwerty Новичок

    С нами с:
    20 май 2013
    Сообщения:
    5
    Симпатии:
    0
    Re: Большой выпадающий список с <optgroup>

    [​IMG]
     
  6. Jaqwerty

    Jaqwerty Новичок

    С нами с:
    20 май 2013
    Сообщения:
    5
    Симпатии:
    0
    Re: Большой выпадающий список с <optgroup>

    В общем получилось у меня так

    Код (Text):
    1.  
    2. <div id="bus_content_up">
    3.  
    4. <?php
    5. include("blocks/db.php");
    6. $string = 'SELECT id, city, way FROM city';
    7. $query = mysql_query($string);
    8.  
    9. print '<form name = "bus_rasp" method="post">';
    10. print '<select name ="city" onchange="this.form.submit()">';
    11.  
    12. $group = array();
    13. while  ($row = mysql_fetch_assoc($query)) {
    14. $group[$row['way']][] = $row;}        
    15. foreach ($group as $key => $values) {
    16. echo '<optgroup label="'.$key.'">';
    17. foreach ($values as $value) {
    18. echo '<option value ="'.$value['id'].'">'.$value['city'].'</option>';}
    19. echo "</optgroup>";}              
    20. print "</select>";
    21. print "</form>";
    22. ?>
    23. </div>
    24.  
    25. <div id="bus_content_rasp">
    26.  
    27. <?php
    28. if (isset($_POST['city']))  {$city =$_POST['city'];}
    29. $resultat = mysql_query("SELECT * FROM city WHERE id=$city",$db);
    30. $array = mysql_fetch_array($resultat);
    31. echo $array['table'];
    32. ?>
    33.  
    34. </div>
     
  7. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Ну хоть так. Во втором запросе требуется только таблица, можно переписать так
    Код (Text):
    1. 'SELECT `table` FROM `city` WHERE `id`='.$city
    выбираем только столбец "table". Кстати, это зарезервированное имя, потому нужно брать в одинарные обратные кавычки.
    Важно! Чтобы обезопасить запрос от инъекции, не вставляйте принятые параметры прямо в запрос
    Код (Text):
    1. $city =$_POST['city']
    2. "SELECT * FROM city WHERE id=$city"
    , лучше так
    Код (Text):
    1. $city=(isset($_POST['city']))?(int)$_POST['city']:0;
    2. 'SELECT `table` FROM `city` WHERE `id`='.$city
    приводя переменную $city к типу int.

    Добавлено спустя 3 минуты 27 секунд:
    Ещё, чтобы сохранился выбор города, можно select выводить так
    Код (PHP):
    1. $city=(isset($_GET['city']))?(int)$_GET['city']:0;
    2. echo '<select name="city" onchange="this.form.submit()">',"\n";
    3. foreach($group as $key=>$values){
    4.     echo '<optgroup label="'.$key.'">',"\n";
    5.     foreach($values as $value){
    6.         echo sprintf('<option%svalue="%d">%s</option>%s',
    7.           ($value['id']==$city)?' selected="selected" ':' ',$value['id'],$value['city'],"\n");
    8.     }
    9.     echo '</optgroup>',"\n";
    10. }
    11. echo '</select>',"\n"; 
     
  8. Jaqwerty

    Jaqwerty Новичок

    С нами с:
    20 май 2013
    Сообщения:
    5
    Симпатии:
    0
    Re: Большой выпадающий список с <optgroup>

    Все работает! YSandro - спасибо)))))



    Код (Text):
    1.  
    2. <div id="bus_content_up">
    3.  
    4.  
    5. <?php
    6. include("blocks/db.php");
    7. $string = 'SELECT id, city, way FROM city';
    8. $query = mysql_query($string);
    9. print '<form name = "bus_rasp" method="post">';
    10. $city=(isset($_POST['city']))?(int)$_POST['city']:0;
    11. echo '<select name="city" onchange="this.form.submit()">',"\n";
    12. $group = array();
    13. while  ($row = mysql_fetch_assoc($query)) {
    14. $group[$row['way']][] = $row;}        
    15. foreach ($group as $key => $values) {
    16. echo '<optgroup label="'.$key.'">',"\n";
    17. foreach ($values as $value) {
    18. echo sprintf('<option%svalue="%d">%s</option>%s',
    19. ($value['id']==$city)?' selected="selected" ':' ',$value['id'],$value['city'],"\n");}
    20. echo "</optgroup>";}              
    21. echo "</select>";
    22. print "</form>";
    23. ?>
    24. </div>
    25.  
    26.  
    27.  
    28. <div id="bus_content_rasp">
    29.  
    30. <?php
    31. $city=(isset($_POST['city']))?(int)$_POST['city']:0;
    32. $resultat = mysql_query('SELECT `table` FROM `city` WHERE `id`='.$city,$db);
    33. $array = mysql_fetch_array($resultat);
    34. echo $array['table'];
    35. ?>
    36. </div>
     
  9. BAbl_gun

    BAbl_gun Новичок

    С нами с:
    25 апр 2020
    Сообщения:
    32
    Симпатии:
    2
    Уважаемые форумчане, в просторах интернета встретил данный код, но чтобы в нем разобраться не хватила скилла ) Решил его проверить сработал только выпадающий список.
    PHP:
    1. <?php
    2. /*Соединяеся с базой и делаем выборку из таблицы*/
    3. mysql_connect("ip", "login", "password");
    4. mysql_select_db("name_db");
    5. $sql = "SELECT * FROM name_table";
    6. $result_select = mysql_query($sql);
    7. /*Выпадающий список*/
    8. echo "<select name = ''>";
    9. while($object = mysql_fetch_object($result_select)){
    10. echo "<option value = '$object->column_name' > $object->column_name </option>";
    11. }
    12. echo "</select>";
    13. ?>
     
  10. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @BAbl_gun, начни рассказ с того как ты решил его проверить?
    Вот прям по пунктам распиши свои действия после того как скачал скрипт из интернета.
     
  11. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    @BAbl_gun, почти 7 лет прошло, задача решена, и в списке нужен был элемент optgroup, и сейчас я бы чуть получше предложил код. Зачем ты пишешь в эту тему, да ещё без конкретного вопроса?