Уважаемые кодеры, подскажите мне, как произвести запись в $_POST из выпадающего списка (select) не значение селекта при выборе, а id данного значения селекта. Т.Е. есть форма ввода данных нового сотрудника в которой кроме текстовых полей выводится выпадаюшие списки из данных других (дочерних ) таблиц, пользователь вводит необходимые данные в текстовые поля ручками, а некоторые поля ему предлагается выбор, тыкает кнопочку.... Так вот тут и проблема: Все данные текстовых полей заносятся нормально, кроме полей из селектов - записывается "0", а надо соответствующий id. Форма ввода: PHP: <form name="newUser" action="scripts\insert_sotrud.php" method="POST"> <table> <tr> <td> Фамилия:</td> <td> <input type="text" name="Femyli" size="30"/></td><td style="color: #FF0000;">*</td></tr> <tr> <td> Имя:</td> <td> <input type="text" name="Name" size="30"/></td><td style="color: #FF0000;">*</td></tr> <tr><td> Отчество:</td><td> <input type="text" name="Otchestvo" size="30"/></td><td style="color: #FF0000;">*</td></tr> <tr><td> Отдел:</td><td > <?php include "scripts\putdb.php"; putdb_connect () or exit (); $sql21 = "SELECT `OtdelName` FROM `Otdels`"; $result21 = mysql_query($sql21)or die ("Query failed: " .mysql_error()); if ($sql21) echo "<select name = 'otdel'>"; echo "<option value='' SELECTED></option>";{ while ($row21 = mysql_fetch_array ($result21)) { echo "<option value ='",$row21['OtdelName'],"'size='30'/>",$row21['OtdelName'],"</option>"; } echo "</select>"; } ?> </td><td style="color: #FF0000;">*</td></tr> <tr><td> Должность:</td><td> <? $sql1 ="SELECT `DolgnostName` FROM `Dolgnost`"; $result1 = mysql_query($sql1)or die ("Query failed: " .mysql_error()); if ($sql1) echo "<select name = 'dolgnost'>"; echo "<option value='' SELECTED></option>";{ while ($row1= mysql_fetch_array($result1)) { echo "<option value ='",$row1['DolgnostName'],"'>",$row1['DolgnostName'],"</option>"; } echo "</select>"; } ?> </td><td style="color: #FF0000;">*</td></tr> <tr><td> Домашний адрес:</td><td> <input type="text" name="Adress" size="30"/></td><td style="color: #FF0000;">*</td></tr> <tr><td> Рабочий телефон:</td><td> <input type="text" name="RabTel" size="30"/></td></tr> <tr><td> Домашний телефон:</td><td> <input type="text" name="HomeTel" size="30"/></td></tr> <tr><td> Мобильный телефон:</td><td> <input type="text" name="SotaTel" size="30"/></td></tr> </table> <h4 style="color: #FF0000;">* - Обязательные поля для заполнения</h4> <input type="submit" value="Ввести данные"/> </form> Обработчик: PHP: <?php #Проверяем глобальные переменные и присваиваем им имена if (isset ($_POST['Femyli'])) { $Femyli = $_POST['Femyli']; } if (isset ($_POST['Name'])) { $Name = $_POST['Name']; } if (isset ($_POST ['Otchestvo'])) { $Otchestvo = $_POST ['Otchestvo']; } if (Isset ($_POST ['otdel'])) { $otdel = $_POST ['otdel']; } if (isset ($_POST ['dolgnost'])) { $dolgnost = $_POST ['dolgnost']; } if (isset ($_POST ['Adress'])) { $Adress = $_POST ['Adress']; } if (isset ($_POST['RabTel'])) { $RabTel = $_POST['RabTel']; } if (isset ($_POST['HomeTel'])) { $HomeTel = $_POST['HomeTel']; } if (isset ($_POST ['SotaTel'])) { $SotaTel = $_POST ['SotaTel']; } #Подключаемся к БД include "putdb.php"; putdb_connect () or exit (); #Запрос на добавление данных в таблицу "Сотрудники" $result = mysql_query ("INSERT INTO Sotrudniki(Femyli,Name,Otchestvo,Otdel_kod,Dolgnost_kod,Adress,RabTel,HomeTel,SotaTel) VALUES ('$Femyli','$Name','$Otchestvo','$otdel','$dolgnost','$Adress','$RabTel','$HomeTel','$SotaTel')"); ?> Премного Вам благодарен, если поможете, подобного нигде не нашел, а роюсь в сети уже неделю.
Так никто и не хочет помочь? Сам догадываюсь, что нужно найти id из полученной переменно с помощью запроса, но получается что-то не так. Вот что наваял в обработчике: PHP: <?php #Проверяем глобальные переменные и присваиваем им имена if (isset ($_POST['Femyli'])) { $Femyli = $_POST['Femyli']; } if (isset ($_POST['Name'])) { $Name = $_POST['Name']; } if (isset ($_POST ['Otchestvo'])) { $Otchestvo = $_POST ['Otchestvo']; } if (Isset ($_POST ['otdel'])) { $otdel = $_POST ['otdel']; } #Подключаемся к БД include "putdb.php"; putdb_connect () or exit (); #Запрос на выявление id отдела $sql1 = "SELECT `Otdel_id` FROM `Otdels` WHERE `OtdelName`='$otdel'"; $result1 = mysql_query($sql1)or die ("Query failed: " .mysql_error()); if (isset ($_POST ['dolgnost'])) { $dolgnost = $_POST ['dolgnost']; } #Запрос на выявление id должности $sql2 = "SELECT `Dolgnost_id` FROM `Dolgnost` WHERE `DolgnostName`= '$dolgnost'"; $result2 = mysql_query($sql2)or die ("Query failed: " .mysql_error()); if (isset ($_POST ['Adress'])) { $Adress = $_POST ['Adress']; } if (isset ($_POST['RabTel'])) { $RabTel = $_POST['RabTel']; } if (isset ($_POST['HomeTel'])) { $HomeTel = $_POST['HomeTel']; } if (isset ($_POST ['SotaTel'])) { $SotaTel = $_POST ['SotaTel']; } #Запрос на добавление данных в таблицу "Сотрудники" $result3 = mysql_query ("INSERT INTO Sotrudniki(Femyli,Name,Otchestvo,Otdel_kod,Dolgnost_kod,Adress,RabTel,HomeTel,SotaTel) VALUES ('$Femyli','$Name','$Otchestvo','$result1','$result2','$Adress','$RabTel','$HomeTel','$SotaTel')"); ?> Но снова "0" в полях "Otdel" и "Dolgnost", что я сделал не так??????
Я точно не уверен, но вродебы POST русские буквы не передает, так, что если у тебя должность и отдел на русском то переделывай...
Русские буквы -- это те же 1010101... Поэтому передавать их должно по определению. Но вот отображать может некорректно, если указана неверная кодировка. Вы так тщательно проверяете все данные на наличие и присваиваете значение другой переменной. А если данных не будет, то присвоение не произойдет. Но запрос-то все равно выполнится и вставятся пустые значение + будут Notice. А еще смысла в такой проверке нет практически. Дело в том, что если форма не заполняется, то её значение равно пустой строке. А isset проверяет существование переменной. А еще Ваш код уязвим. http://phpfaq.ru/slashes#injection
Я проверял, $_POST передает нормальный русский язык без проблем. А вот запрос с использованием $_POST в выражении WHERE не работает. Вот пример: PHP: $sql1 = "SELECT `Otdel_id` FROM `Otdels` WHERE `OtdelName`='".trim($_POST ['otdel'])."'"; $result1 = mysql_query($sql1)or die ("Query failed: " .mysql_error()); echo $result1; Выдает вот такую строчку (в обработчике два подобных запроса): Resource id #4Resource id #5 Ну, и кто силен это понять?
Мы бессильны объяснить вам, что сначала следует хотя бы одну книжечку по РНР прочесть. http://php.net/manual/en/function.mysql-query.html — ВНИМАТЕЛЬНО прочитайте.
Я и читаю, но без толкового разъяснения очень туго!!! Всех кто-то но учил, хоть на примерах. А литературу НАДО ЧИТАТЬ, ЧЕМ БОЛЬШЕ ТЕМ ЛУЧШЕ, с этим я вполне согласен. Но ребят выручайте, ну очень нужно разобраться мне в этом вопросе. Пожалуйста.
Да, я знаю об этом, но на данном этапе мне необходимо заставить работать данную схему. С кодировками тоже все нормально, за исключением этих поле в БД ложится нормальный Русский.
PHP: <?php /* .... */ $sql = "SELECT `Otdel_id` FROM `Otdels` WHERE `OtdelName`='".trim($_POST ['otdel'])."'"; $query = @mysql_query($sql); if($query) { while($row = mysql_fetch_assoc($query)) { echo $row['id']; // Ключ массива совпадает с именем столбца в БД } } else { echo 'Query has been failed'; }
Нет, не работает. Выдает: Уведомление: Неопределенный индекс: id в z:\home\put.kz\www\put\scripts\insert_sotrud.php на линии 34 Уведомление: Неопределенный индекс: id в z:\home\put.kz\www\put\scripts\insert_sotrud.php на линии 51 Вот линии: 34 echo $row1['id']; // Ключ массива совпадает с именем столбца в БД 50 echo $row2['id'];
Не то, данная схема выводит номер ида сотрудника, а в полях "Otdel_id" и "Dolgnost_id" все теже нули.
ЛЮДИ, УМОЛЯЮ ВАС — ХВАТИТЬ МЫСЛИТЬ ШАБЛОНАМИ! Ведь вы учитесь программированию — искусству, которое требует умения использовать дедуктивное, логическое и визуальное мышление, требует от вас крепких знаний математики. Если вам написали какой-либо пример, это не значит, что за вас решит кто-то ваши проблемы и избавит вас от труда ПОДУМАТЬ. Вам дают пищу для ума, разжевывают так, как только можно разжевать, но вы привыкаете к этому и требуете ещё больше и больше ГОТОВЫХ РЕШЕНИЙ. Ей богу, сколько можно? УЧИТЕСЬ ДУМАТЬ САМОСТОЯТЕЛЬНО, ВЫ ПРИШЛИ НА ФОРУМ ПРОГРАММИСТОВ, А НЕ В ДЕТСКИЙ САД.
Спасибо и на этом. Я стал изучать РНР 3 недели назад, кроме книг ничего нет! А кого мне спросить еще???????
Вы спросили, я вам ответил. Я разжевал и написал вам код, неужели не разобраться в этих 5 строчках? Ведь это так просто, нужно вникнуть в этот код, в нем именно то, что вы просили, только вы этого ещё не видите.
Спасибо огромное, уже понял, что браузер выводит те самые иды!!!!! что мне и нужны. Немного над этим поработаю, и думаю все получится!
Что то я все равно притормаживаю, хотя очень интересно. Не подскажите где можно СКАЧАТЬ справочник по функциям MqSQL end PHP?
Я занялся написанием скриптов на РНР всего-ничего, всего несколько недель назад. Кстати с данным вопросом разобрался, спасибо форуму!