За последние 24 часа нас посетили 22190 программистов и 1058 роботов. Сейчас ищут 677 программистов ...

Помогите: INSERT из сложной формы

Тема в разделе "Вопросы от блондинок", создана пользователем Димон, 24 май 2009.

  1. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Уважаемые кодеры, подскажите мне, как произвести запись в $_POST из выпадающего списка (select) не значение селекта при выборе, а id данного значения селекта. Т.Е. есть форма ввода данных нового сотрудника в которой кроме текстовых полей выводится выпадаюшие списки из данных других (дочерних ) таблиц, пользователь вводит необходимые данные в текстовые поля ручками, а некоторые поля ему предлагается выбор, тыкает кнопочку....
    Так вот тут и проблема: Все данные текстовых полей заносятся нормально, кроме полей из селектов - записывается "0", а надо соответствующий id.
    Форма ввода:
    PHP:
    1.  
    2. <form name="newUser" action="scripts\insert_sotrud.php" method="POST">
    3. <table>
    4. <tr>
    5. <td>
    6. Фамилия:</td>
    7. <td>
    8. <input type="text" name="Femyli" size="30"/></td><td style="color: #FF0000;">*</td></tr>
    9. <tr>
    10. <td>
    11. Имя:</td>
    12. <td>
    13.  <input type="text" name="Name" size="30"/></td><td style="color: #FF0000;">*</td></tr>
    14.  <tr><td>
    15. Отчество:</td><td>
    16. <input type="text" name="Otchestvo" size="30"/></td><td style="color: #FF0000;">*</td></tr>
    17. <tr><td>
    18. Отдел:</td><td >
    19. <?php
    20.  include "scripts\putdb.php";
    21.  putdb_connect () or exit ();
    22. $sql21 = "SELECT `OtdelName` FROM `Otdels`";
    23.   $result21 = mysql_query($sql21)or die ("Query failed: " .mysql_error());
    24.   if ($sql21)
    25.   echo "<select name = 'otdel'>";
    26.   echo "<option value='' SELECTED></option>";{
    27.   while ($row21 = mysql_fetch_array ($result21))
    28.   {
    29.  
    30.     echo "<option value ='",$row21['OtdelName'],"'size='30'/>",$row21['OtdelName'],"</option>";
    31.     }
    32.     echo "</select>";
    33.  }
    34.  
    35. ?>
    36. </td><td style="color: #FF0000;">*</td></tr>
    37. <tr><td>
    38. Должность:</td><td>
    39. <?
    40. $sql1 ="SELECT `DolgnostName` FROM `Dolgnost`";
    41. $result1 = mysql_query($sql1)or die ("Query failed: " .mysql_error());
    42. if ($sql1)
    43.      echo "<select name = 'dolgnost'>";
    44.      echo "<option value='' SELECTED></option>";{
    45. while ($row1= mysql_fetch_array($result1))
    46. {
    47.     echo "<option value ='",$row1['DolgnostName'],"'>",$row1['DolgnostName'],"</option>";
    48. }
    49. echo "</select>";
    50.  }
    51. ?>
    52. </td><td style="color: #FF0000;">*</td></tr>
    53. <tr><td>
    54. Домашний адрес:</td><td>
    55. <input type="text" name="Adress" size="30"/></td><td style="color: #FF0000;">*</td></tr>
    56. <tr><td>
    57. Рабочий телефон:</td><td>
    58. <input type="text" name="RabTel" size="30"/></td></tr>
    59. <tr><td>
    60. Домашний телефон:</td><td>
    61. <input type="text" name="HomeTel" size="30"/></td></tr>
    62. <tr><td>
    63. Мобильный телефон:</td><td>
    64. <input type="text" name="SotaTel" size="30"/></td></tr>
    65. </table>
    66. <h4 style="color: #FF0000;">* - Обязательные поля для заполнения</h4>
    67. <input type="submit" value="Ввести данные"/>
    68. </form>
    Обработчик:
    PHP:
    1.  
    2. <?php
    3.  
    4. #Проверяем глобальные переменные и присваиваем им имена
    5.  
    6. if (isset ($_POST['Femyli']))
    7. {
    8.     $Femyli = $_POST['Femyli'];
    9.     }
    10. if (isset ($_POST['Name']))
    11. {
    12.     $Name = $_POST['Name'];
    13.     }
    14. if (isset ($_POST ['Otchestvo']))
    15. {
    16.     $Otchestvo = $_POST ['Otchestvo'];
    17.     }
    18. if (Isset ($_POST ['otdel']))
    19. {
    20.     $otdel = $_POST ['otdel'];
    21.     }
    22. if (isset ($_POST ['dolgnost']))
    23. {
    24.     $dolgnost = $_POST ['dolgnost'];
    25.     }
    26. if (isset ($_POST ['Adress']))
    27. {
    28.     $Adress = $_POST ['Adress'];
    29.     }
    30. if (isset ($_POST['RabTel']))
    31. {
    32.     $RabTel = $_POST['RabTel'];
    33.     }
    34. if (isset ($_POST['HomeTel']))
    35. {
    36.     $HomeTel = $_POST['HomeTel'];
    37.     }
    38. if (isset ($_POST ['SotaTel']))
    39. {
    40.     $SotaTel = $_POST ['SotaTel'];
    41.     }
    42.  
    43. #Подключаемся к БД
    44.  
    45.     include "putdb.php";
    46.  putdb_connect () or exit ();
    47.  
    48. #Запрос на добавление данных в таблицу "Сотрудники"
    49.  
    50.  $result = mysql_query  ("INSERT INTO Sotrudniki(Femyli,Name,Otchestvo,Otdel_kod,Dolgnost_kod,Adress,RabTel,HomeTel,SotaTel)
    51. VALUES ('$Femyli','$Name','$Otchestvo','$otdel','$dolgnost','$Adress','$RabTel','$HomeTel','$SotaTel')");
    52. ?>
    Премного Вам благодарен, если поможете, подобного нигде не нашел, а роюсь в сети уже неделю.
     
  2. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Так никто и не хочет помочь? Сам догадываюсь, что нужно найти id из полученной переменно с помощью запроса, но получается что-то не так.
    Вот что наваял в обработчике:
    PHP:
    1.  
    2. <?php
    3.  
    4. #Проверяем глобальные переменные и присваиваем им имена
    5.  
    6. if (isset ($_POST['Femyli']))
    7. {
    8.     $Femyli = $_POST['Femyli'];
    9.     }
    10. if (isset ($_POST['Name']))
    11. {
    12.     $Name = $_POST['Name'];
    13.     }
    14. if (isset ($_POST ['Otchestvo']))
    15. {
    16.     $Otchestvo = $_POST ['Otchestvo'];
    17.     }
    18. if (Isset ($_POST ['otdel']))
    19. {
    20.     $otdel = $_POST ['otdel'];
    21.     }
    22.  
    23.     #Подключаемся к БД
    24.         include "putdb.php";
    25.  putdb_connect () or exit ();
    26.    #Запрос на выявление id отдела
    27.     $sql1 = "SELECT
    28.  `Otdel_id`
    29.  FROM
    30.  `Otdels`
    31.  WHERE
    32.  `OtdelName`='$otdel'";
    33.  $result1 = mysql_query($sql1)or die ("Query failed: " .mysql_error());
    34. if (isset ($_POST ['dolgnost']))
    35. {
    36.     $dolgnost = $_POST ['dolgnost'];
    37.     }
    38.    #Запрос на выявление id должности
    39.     $sql2 = "SELECT
    40.  `Dolgnost_id`
    41.  FROM
    42.  `Dolgnost`
    43.  WHERE
    44.  `DolgnostName`= '$dolgnost'";
    45.  $result2 = mysql_query($sql2)or die ("Query failed: " .mysql_error());
    46. if (isset ($_POST ['Adress']))
    47. {
    48.     $Adress = $_POST ['Adress'];
    49.     }
    50. if (isset ($_POST['RabTel']))
    51. {
    52.     $RabTel = $_POST['RabTel'];
    53.     }
    54. if (isset ($_POST['HomeTel']))
    55. {
    56.     $HomeTel = $_POST['HomeTel'];
    57.     }
    58. if (isset ($_POST ['SotaTel']))
    59. {
    60.     $SotaTel = $_POST ['SotaTel'];
    61.     }
    62.  
    63.  
    64. #Запрос на добавление данных в таблицу "Сотрудники"
    65.  
    66.  $result3 = mysql_query  ("INSERT INTO Sotrudniki(Femyli,Name,Otchestvo,Otdel_kod,Dolgnost_kod,Adress,RabTel,HomeTel,SotaTel)
    67. VALUES ('$Femyli','$Name','$Otchestvo','$result1','$result2','$Adress','$RabTel','$HomeTel','$SotaTel')");
    68. ?>
    Но снова "0" в полях "Otdel" и "Dolgnost", что я сделал не так??????
     
  3. Inoi

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

    С нами с:
    4 авг 2008
    Сообщения:
    52
    Симпатии:
    0
    Адрес:
    Волгоград
    Я точно не уверен, но вродебы POST русские буквы не передает, так, что если у тебя должность и отдел на русском то переделывай...
     
  4. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    блин, сцусь под столом :lol: :lol: :D
     
  5. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Русские буквы -- это те же 1010101... Поэтому передавать их должно по определению. Но вот отображать может некорректно, если указана неверная кодировка.

    Вы так тщательно проверяете все данные на наличие и присваиваете значение другой переменной. А если данных не будет, то присвоение не произойдет. Но запрос-то все равно выполнится и вставятся пустые значение + будут Notice.

    А еще смысла в такой проверке нет практически. Дело в том, что если форма не заполняется, то её значение равно пустой строке. А isset проверяет существование переменной.

    А еще Ваш код уязвим. http://phpfaq.ru/slashes#injection
     
  6. kostyl

    kostyl Guest

    Да делай все на английском, потому что Inoi иной...
     
  7. Inoi

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

    С нами с:
    4 авг 2008
    Сообщения:
    52
    Симпатии:
    0
    Адрес:
    Волгоград
    *лять, чет тупанул...у самого форма регистрации методом пост передает...
     
  8. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Я проверял, $_POST передает нормальный русский язык без проблем.
    А вот запрос с использованием $_POST в выражении WHERE не работает. Вот пример:
    PHP:
    1.  
    2. $sql1 = "SELECT
    3.  `Otdel_id`
    4.  FROM
    5.  `Otdels`
    6.  WHERE
    7.  `OtdelName`='".trim($_POST ['otdel'])."'";
    8.  $result1 = mysql_query($sql1)or die ("Query failed: " .mysql_error());
    9.  echo $result1;
    Выдает вот такую строчку (в обработчике два подобных запроса): Resource id #4Resource id #5
    Ну, и кто силен это понять?
     
  9. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Мы бессильны объяснить вам, что сначала следует хотя бы одну книжечку по РНР прочесть.

    http://php.net/manual/en/function.mysql-query.html — ВНИМАТЕЛЬНО прочитайте.
     
  10. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Я и читаю, но без толкового разъяснения очень туго!!! Всех кто-то но учил, хоть на примерах. А литературу НАДО ЧИТАТЬ, ЧЕМ БОЛЬШЕ ТЕМ ЛУЧШЕ, с этим я вполне согласен. Но ребят выручайте, ну очень нужно разобраться мне в этом вопросе.
    Пожалуйста.
     
  11. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Да, я знаю об этом, но на данном этапе мне необходимо заставить работать данную схему. С кодировками тоже все нормально, за исключением этих поле в БД ложится нормальный Русский.
     
  12. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    PHP:
    1.  
    2. <?php
    3.  
    4. /* ....
    5.  */
    6.  
    7. $sql = "SELECT
    8.   `Otdel_id`
    9.   FROM
    10.   `Otdels`
    11.   WHERE
    12.   `OtdelName`='".trim($_POST ['otdel'])."'";
    13.  
    14.   $query = @mysql_query($sql);
    15.  
    16. if($query) {
    17.     while($row = mysql_fetch_assoc($query)) {
    18.         echo $row['id']; // Ключ массива совпадает с именем столбца в БД
    19.     }
    20. } else {
    21.     echo 'Query has been failed';
    22. }
     
  13. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Нет, не работает. Выдает:
    Уведомление: Неопределенный индекс: 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'];
     
  14. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Не то, данная схема выводит номер ида сотрудника, а в полях "Otdel_id" и "Dolgnost_id" все теже нули. :(
     
  15. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    ЛЮДИ, УМОЛЯЮ ВАС — ХВАТИТЬ МЫСЛИТЬ ШАБЛОНАМИ!
    Ведь вы учитесь программированию — искусству, которое требует умения использовать дедуктивное, логическое и визуальное мышление, требует от вас крепких знаний математики.
    Если вам написали какой-либо пример, это не значит, что за вас решит кто-то ваши проблемы и избавит вас от труда ПОДУМАТЬ. Вам дают пищу для ума, разжевывают так, как только можно разжевать, но вы привыкаете к этому и требуете ещё больше и больше ГОТОВЫХ РЕШЕНИЙ.

    Ей богу, сколько можно?
    УЧИТЕСЬ ДУМАТЬ САМОСТОЯТЕЛЬНО, ВЫ ПРИШЛИ НА ФОРУМ ПРОГРАММИСТОВ, А НЕ В ДЕТСКИЙ САД.
     
  16. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Спасибо и на этом. Я стал изучать РНР 3 недели назад, кроме книг ничего нет! А кого мне спросить еще???????
     
  17. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Вы спросили, я вам ответил.
    Я разжевал и написал вам код, неужели не разобраться в этих 5 строчках?
    Ведь это так просто, нужно вникнуть в этот код, в нем именно то, что вы просили, только вы этого ещё не видите.
     
  18. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Спасибо огромное, уже понял, что браузер выводит те самые иды!!!!! что мне и нужны. Немного над этим поработаю, и думаю все получится! :D
     
  19. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я спрашивал себя до посинения, пока не начинал понимать сути.
     
  20. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Что то я все равно притормаживаю, хотя очень интересно. Не подскажите где можно СКАЧАТЬ справочник по функциям MqSQL end PHP?
     
  21. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    http://mysql.com
    http://php.net

    А ещё открою секрет: на САААААМОМ верху этой страницы посмотреть.
     
  22. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Я точно тормоз! :)
     
  23. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Димон
    > Я стал изучать РНР 3
    Извините, ЧТО Вы начали изучать?
     
  24. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Я занялся написанием скриптов на РНР всего-ничего, всего несколько недель назад.
    Кстати с данным вопросом разобрался, спасибо форуму!
     
  25. Димон

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

    С нами с:
    12 май 2009
    Сообщения:
    152
    Симпатии:
    0
    Точнее, огромное спасибо Apple