За последние 24 часа нас посетили 22604 программиста и 1278 роботов. Сейчас ищут 749 программистов ...

Получение ID из <select><option>

Тема в разделе "PHP для новичков", создана пользователем alekslkta, 26 дек 2010.

  1. alekslkta

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

    С нами с:
    12 авг 2008
    Сообщения:
    32
    Симпатии:
    0
    Добрый день. У меня такой вопрос, как мне сохранить в переменную id из таблицы, которому соответствует выбранное значение из выпадающего списка? Пример ниже
    PHP:
    1.  
    2. <select name="Client">';
    3.                                    require_once("config.php");
    4.                                    mysql_connect($dbhost,$dbuser,$dbpasswd);
    5.                                    mysql_select_db($dbname);
    6.                                    $res = mysql_query('SELECT cl_id, name FROM tab_clients') or die(mysql_error());
    7.                                    while($arr=mysql_fetch_array($res)){
    8.                                    printf('<option value="%s">%s</option>',htmlspecialchars($arr['cl_id']),htmlspecialchars($arr['name']));
    9.                                    };
    10.                                    echo '</select>
    11.  
    Т.е у меня для списка значения отбираются из таблици, как видно отсюда htmlspecialchars($arr['cl_id']),htmlspecialchars($arr['name']) отбираются поля id и name. ИД в списке я конечно не вижу, но мне хотелось бы сохранить это значение в переменную и затем передать на другой пхп сценарий. Т.е я выбрал на сайте из списка что-то, и этого что-то ид сохраняется в переменную и по нажатию кнопки "сохранить" отправляется на другой сценарий.

    Заранее спасибо.

    Подскажите , как реализовать.
     
  2. jenya777777

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

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    тут легче сохранять это значение в сессию
     
  3. alekslkta

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

    С нами с:
    12 авг 2008
    Сообщения:
    32
    Симпатии:
    0
    Не подскажите на примере , как это можно реализовать? Спасибо.
     
  4. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    HTML:
    1.  
    2. <form action="next.php" method="get">
    3.   <select name="option">
    4.     <option value="1">M</option>
    5.     <option value="2">W</option>
    6.   </select>
    7.   <input type="submit">
    8. </form>
    9.  
    next.php
    PHP:
    1.  
    2. $option = isset($_GET['option']) ? $_GET['option'] : 1;
    3.  
     
  5. alekslkta

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

    С нами с:
    12 авг 2008
    Сообщения:
    32
    Симпатии:
    0
    Т.е. вместо 1 поставить передваемый ид? Не могли бы подсказать каким образом ? На моем примере имеется

    <select name="position">';
    require_once("config.php");
    mysql_connect($dbhost,$dbuser,$dbpasswd);
    mysql_select_db($dbname);
    $res = mysql_query('SELECT pos_id, Name FROM tab_positions') or die(mysql_error());
    while($arr=mysql_fetch_array($res)){
    echo '<option value="'.$arr['pos_id'].'" selected="selected">'.$arr['Name'].'</option>';
    };
    echo '</select>

    На до передать на другой сценарий выбранный pos_id.
     
  6. alekslkta

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

    С нами с:
    12 авг 2008
    Сообщения:
    32
    Симпатии:
    0
    Люди добрые плиз, отзовитесь . Помогите с решением. Как мне получить это ид в другом пхп сценарии? Если с помощью сессий , то это примерно так должно выглядеть :

    PHP:
    1.  
    2. $_SESSION['id'] = $arr['pos_id'];
    3.  
    4. <select name="position">';
    5. require_once("config.php");
    6. mysql_connect($dbhost,$dbuser,$dbpasswd);
    7. mysql_select_db($dbname);
    8. $res = mysql_query('SELECT pos_id, Name FROM tab_positions') or die(mysql_error());
    9. while($arr=mysql_fetch_array($res)){
    10. echo '<option value="'.$arr['pos_id'].'" selected="selected">'.$arr['Name'].'</option>';
    11. };
    12. echo '</select>
    13.  
    Т.е. если сесси , то я правильно подаю переменную

    session_start();
    $_SESSION['id'] = $arr['pos_id']; ?

    И потом например в другом сценарии next.php я смогу использовать значение этой переменной сессии.Предположем передать её другой переменной :


    PHP:
    1.  
    2. $test_id = $_SESSION['id'];
    3.  
    4. if($test_id == 1) {
    5. .........
    6. }
    7.  
    Это всё верно, или как-то по другому?
     
  7. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    from.php
    PHP:
    1. <?php
    2.  
    3.   require_once("config.php");
    4.   mysql_connect($dbhost,$dbuser,$dbpasswd);
    5.   mysql_select_db($dbname);
    6.   $res = mysql_query('SELECT `pos_id`, `name` FROM tab_positions') or die(mysql_error());
    7. ?>
    8. <html>
    9. <head><title>FROM</title></head>
    10. <body>
    11.   <form method="post" action="to.php">
    12.     <select name="position">
    13.       <?php
    14.         while($arr=mysql_fetch_array($res)){
    15.           echo '<option value="'.$arr['pos_id'].'">'.$arr['name'].'</option>';
    16.         };
    17.       ?>
    18.     </select>
    19.     <input type="submit">
    20.   </form>
    21. </body>
    22. </html>

    to.php
    PHP:
    1. <?php
    2.   echo 'SELECTED POSITION - '.$_POST['position'];
    3. ?>
    Please, note that I changed your sql request - I've enclosed fields' names with `.
    It's required if your field name is the same as sql reserved word, like NAME
     
  8. vicky

    vicky Новичок

    С нами с:
    25 июн 2019
    Сообщения:
    19
    Симпатии:
    0
    Добрый день! Подскажите, как вы решили свою проблему? Сейчас возник такой вопрос, только я совсем новичок в этом деле
     
  9. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @vicky покажите ваш запрос к бд
     
  10. vicky

    vicky Новичок

    С нами с:
    25 июн 2019
    Сообщения:
    19
    Симпатии:
    0
    на этом примере можно? тоже самое, только мои значения. Суть вопроса - надо для записи в тбл взять из списка name и соответствующий ему id. (как и здесь в запросе берется id, name). По аналогии с рекордсетом - выбираю name и сразу известен id и все остальные поля.
     
  11. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    PHP:
    1. <select name="position">
    2.       <?php
    3.         while($arr=mysql_fetch_array($res)){
    4.           echo '<option value="'.$arr['pos_id'].'">'.$arr['name'].'</option>';
    5.         };
    6.       ?>
    7.     </select>
     
  12. vicky

    vicky Новичок

    С нами с:
    25 июн 2019
    Сообщения:
    19
    Симпатии:
    0
    И как потом достать id и name одновременно? По селекту я достану что-то одно
    --- Добавлено ---
    На сколько я понимаю
     
  13. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @vicky а как ты select.value получаешь, покажи.
     
  14. vicky

    vicky Новичок

    С нами с:
    25 июн 2019
    Сообщения:
    19
    Симпатии:
    0
    Я потом $_post от имени селекта делаю в другом файле,но туда берётся же только что укажешь,либо id, либо name
     
  15. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    немного javascript и будет у тебя и то и другое
    Код (Javascript):
    1. formData.append(name, value);
     
  16. vicky

    vicky Новичок

    С нами с:
    25 июн 2019
    Сообщения:
    19
    Симпатии:
    0
    Можно мне уточнить,для id должна быть такая же строчка ещё?
    --- Добавлено ---
    И конечно,спасибо огромнейшее,нигде не могла найти ответ‍♀️
     
  17. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @vicky ну вот один из множества способов:
    HTML:
    1. <form method="post" action="test.php">
    2.     <select name="test">
    3.         <option value="1">Пункт 1</option>
    4.         <option value="2">Пункт 2</option>
    5.         <option value="3">Пункт 3</option>
    6.         <option value="4">Пункт 4</option>
    7.     </select>
    8.     <p><input type="text" size="30" name="name"></p>
    9.     <p><input type="submit">
    10.     </p>
    11. </form>
    12.     var form = document.querySelector('form'),
    13.         select = form.querySelector('select');
    14.  
    15.  
    16.     select.addEventListener("change", function() {
    17.         var name = this.querySelector('option:checked').text;
    18.         input = form.querySelector('input[type="text"]');
    19.         input.value = name;
    20.     })
    21. </script>
     
  18. vicky

    vicky Новичок

    С нами с:
    25 июн 2019
    Сообщения:
    19
    Симпатии:
    0
    Вот не пойму, я же только учусь, отнеситесь с понимаем). И как теперь узнать эти значения? Т.е.,например, echo ....?
     
  19. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    в файле куда отправляет форма (в данном случае test.php) напишите:

    PHP:
    1. if(isset($_POST['name'])){
    2.     echo $_POST['test']; // в примере select name = test
    3.     echo $_POST['name'];
    4. }
     
  20. vicky

    vicky Новичок

    С нами с:
    25 июн 2019
    Сообщения:
    19
    Симпатии:
    0
    Вы мой спаситель!!!
     
  21. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @vicky Предмет какой то сдаете?
     
  22. vicky

    vicky Новичок

    С нами с:
    25 июн 2019
    Сообщения:
    19
    Симпатии:
    0
    Нет, подрабатываю, будет перевод программы с Access на php.
     
  23. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Ну удачи =)
     
  24. vicky

    vicky Новичок

    С нами с:
    25 июн 2019
    Сообщения:
    19
    Симпатии:
    0
    Спасибо) Вы пока не отключайтесь, я на своем примере буду пробовать, вдруг опять что приключится
    --- Добавлено ---
    <form method="post" action="test.php">

    <?php

    include ("db.php");
    $query="SELECT * FROM `SprExp`";

    $mysqli->query("SET NAMES 'cp1251'");
    $result=$mysqli->query($query)or die ('error database');

    if (mysqli_num_rows($result)<=0)
    {echo ("«записей не обнаружено");}
    else {
    echo "<select name=type_pr >";
    while ($myrow=mysqli_fetch_assoc($result)){
    echo "<option
    value=\"$myrow[ID_Exp]\">$myrow[Name]</option>\n";
    }
    echo "</select>";
    }
    ?>
    <br><input type="submit" name="submit" value="Oтправить" <br>
    </form>
    Подскажите, как в моем случае это же сделать? Мне надо чтобы только список и кнопка была. Или надо делать невидимое поле по типу 'text'?
    Может есть способ проще?) Как вы писали, через Append
     
  25. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    да , невидимое поле
    PHP:
    1. <?php
    2.  
    3. include ("db.php");
    4. $query="SELECT * FROM `SprExp`";
    5.  
    6. $mysqli->query("SET NAMES 'cp1251'");
    7. $result=$mysqli->query($query)or die ('error database');
    8. $options = '';
    9. if (mysqli_num_rows($result) === 0){
    10.  
    11.     echo ("«записей не обнаружено");
    12. }else {
    13.  
    14.     while ($myrow=mysqli_fetch_assoc($result)){
    15.         $options .= '<option value="'.$myrow['ID_Exp'].'">'.$myrow['Name'].'</option>';
    16.     }
    17. }
    18. ?>
    19.  
    20. <form method="post" action="test.php">
    21.     <select name="type_pr">
    22.         <?=$options;?>
    23.     </select>
    24.     <input type="text" name="name" hidden>
    25.     <br>
    26.     <input type="submit" name="submit" value="Oтправить" >
    27.     <br>
    28. </form>