2013-07-31 3 views
0

Я пытаюсь заполнить в выпадающих окне, восстановить базу данных из MySQL . Вот мои формы и php файлы ниже. Мне все хорошо, но я не понимаю, почему это не появляется, когда я нажимаю на submit button. Есть ли что-нибудь, что я могу сделать, чтобы исправить эту ошибку? Любые исправления и предложения будут оценены.Populate выпадающий список не будет отображаться базами данных

CS_JOBS стол состоит из: job_title, category_code (17, 27, 37 ....), ... и т.п.

connect.php прекрасно работает в этом случае.

МОЯ ФОРМА

<!DOCTYPE html> 
<html> 
    <head></head> 
    <body> 
     <form action = "csjob.php" method = "POST" name = "jobsearch"> 
      <select name = "category_code[]"> 
       <option value = "17">Architecture and Engineering</option> 
       <option value = "27">Arts, Design, Entertainment, Sports, and Media</option> 
       <option value = "37">Building and Grounds Cleaning and Maintenance</option> 
       <option value = "13">Business and Financial Operations</option> 
       <option value = "21">Community and Social Services</option> 
       <option value = "15">Computer and Mathematical</option> 
       <option value = "47">Construction and Extraction</option> 
       <option value = "25">Education, Training, and Library</option> 
       <option value = "45">Farming, Fishing, and Forestry</option> 
       <option value = "35">Food Preparation and Serving Related</option> 
       <option value = "29">Healthcare Practitioner and Technical</option> 
       <option value = "31">Healthcare support</option> 
       <option value = "49">Installation, Maintenance, and Repair</option> 
       <option value = "23">Legal</option> 
       <option value = "19">Life, Physical, and Social Science</option> 
       <option value = "11">Management</option> 
       <option value = "43">Office and Administrative Support</option> 
       <option value = "39">Personal Care and Service</option> 
       <option value = "51">Production</option> 
       <option value = "33">Protective Service</option> 
       <option value = "41">Sales and Related</option> 
       <option value = "53">Transportation and Material Moving</option> 
      </select> 
      <input type="submit" value="Submit"> 
     </form> 
    </body> 
</html> 

csjob.php

<?php 
    require("connect.php"); 
    if(isset($_POST['submit'])){ 
     $sql = "SELECT * FROM CS_JOBS WHERE category_code=".$_POST['category_code']; 
     $result = mysql_query($sql); 

     echo "<select name='category_code'>"; 
     while ($row = mysql_fetch_array($result)) { 
      echo "<option value='".$row['job_title']"'>".$row['job_title']"</option>"; 
     } 
     echo "</select>"; 
    } 
?> 

Так много опечаток в этом вопросе, вот мой фактический код, который я загружаю: a link!

+0

Уязвимость к уязвимостям [SQL injection attack] (http://bobby-tables.com) в вашем коде. Что для вас важнее ... получение выпадающего списка для правильного отображения или сохранение вашего сервера pwn3d? –

+0

Включите $ sql в кавычки – Mihai

+0

@MarcB: ОБА. Я не вижу какой-либо уязвимости в моем коде. Это всего лишь образец. Я могу быть не прав. Спасибо –

ответ

2

У вас есть 3 небольшие проблемы. Первый из них находится в форме:

<select name = "category_code[]"> 

должен быть

<select name="category_code"> 

Так без скобок [] в наименовании и нет необходимости в дополнительных пространств ... только необходимы
Скобки если у вас есть опция, которая имеет множественный выбор, и вернет массив (следовательно, скобки). Это не происходит в вашем случае.

И вторая проблема, что сказано раньше: в PHP:

$row['job_title'} 

должен быть

$row['job_title'] 

Меняем } с ]

Ваша третья проблема должна делать с проверкой:

if(isset($_POST['submit'])){ 

должен быть

if(isset($_POST['category_code'])){ 

Потому что у вас нет поля с именем 'Отправить'. У вас есть поле с ID отправить и значение отправить. Но не имя отправить. Вы можете добавить name='submit' в кнопку отправки. Или просто перейдите с моим предложенным изменением выше ...

+0

[более новая версия] (https://www.dropbox.com/s/kwlc4x7el7clejh/test.txt)! Я уже исправил все, что вы упомянули выше. Спасибо! @ nl-x –

+0

Приятно слышать, что ваша маленькая проблема решена. Теперь у вас также есть одна большая проблема: теперь возможна инъекция SQL ... Перед установкой $ sql вы должны добавить: '$ _POST ['category_code'] =" '".mysql_real_escape_string ($ _ POST [' category_code ' ]). "'"; 'Это будет охватывать большинство проблем, связанных с инъекцией sql. –

+0

Это имеет смысл. Я собираюсь добавить эту строку кода. Благодарю. –

0

Ваш код не имеет смысла. Вы запускаете запрос, если присутствует конкретное поле формы, но только запускаете код «результатов отображения», когда это же поле формы NOT настоящее время.

Самый простой фикс: REMOVE} else { ...

+0

Да, я удалил инструкцию else из моего кода. Он отображается пустым на экране. @MarcB –

+0

добавить обработку ошибок, например. '$ result = mysql_query ($ sql) или die (mysql_error());'. Если код этой категории является буквенно-цифровым, вам нужны котировки вокруг значения, например. 'Category_code = '$ val''. Весь ваш код предполагает, что мир совершенен, и ничто никогда не потерпит неудачу. Плохой выбор дизайна. Предположим, что все терпит неудачу, и рассматривать успех как приятный сюрприз. –

+0

Большое спасибо. Это очень полезно. @MarcB –

1
<?php 
    require("connect.php"); 
    if(isset($_POST['submit'])) 
    { 
     $sql = "SELECT * FROM CS_JOBS WHERE category_code=".$_POST['category_code']; 
     $result = mysql_query($sql); 
     if(mysql_num_rows($result) > 0){ 
      echo "<select name='category_code'>"; 
       while ($row = mysql_fetch_array($result)) { 
        echo "<option value='".$row['job_title']"'>".$row['job_title']"</option>"; 
       } 

      echo "</select>"; 
      } 
    } 


?> 
+0

Обратите внимание, что это '$ row ['job_title'}' должно быть '$ row ['job_title']' =) – ROMMEL

Смежные вопросы