2012-07-20 4 views
0

Я создал раскрывающееся меню, чтобы выбрать таблицу, а затем другое раскрывающееся меню, которое заполняется данными из одного столбца выбранной таблицы. В настоящее время, когда я впервые загружаю страницу, я получаю сообщение об ошибке, так как в моем раскрывающемся списке ничего не выбрано, поэтому индекс freqtype не определен. Когда я выбираю что-то, все работает хорошо, за исключением того, что мой выбор не сохраняется в Dropbox. Есть ли способ в PHP для достижения этого в рамках одного скрипта. Я подумал, возможно, используя инструкцию if для начальной формы, поэтому нижний раскрывающийся список не заполняется до тех пор, пока верх не будет выбран, но я не могу заставить код работать. Любая помощь будет принята с благодарностью.Поддерживайте выделение и не отправляйте до тех пор, пока не будет выбран Selection - PHP/MYSQL

<html> 
<head> 
<title>Frequency Chart Update</title> 
</head> 

<body text="#FFFFFF" bgcolor="#000000"> 

<font size="4">Please Select the Frequency You Wish To Edit. 
</font> 
<br> 
<br> 
<?php 

echo '<form ENCTYPE=multipart/form-data action=editfreq.php method=post>'; 
echo '<select name=freqtype onChange=this.form.submit()>'; 
echo '<option value="empty"> </option>'; 
echo '<option value="rptfreq">Repeater (Base) Frequencies</option>'; 
echo '<option value="pltfreq">Pilot Frequencies (VDV Leaky Feeder)</option>'; 
echo "</select>"; 

//define variables to be used 
$table = $_POST['freqtype']; 

//Connect to database 
include 'connect.php'; 

$sql = "SELECT channel FROM $table"; 
$result = mysql_query($sql); 


echo '<form ENCTYPE=multipart/form-data action=editrptfreq.php method=post>'; 
echo 'Channel '; 
echo '<select name=channel>'; 
while ($row = mysql_fetch_array($result)) { 
echo "<option value='" . $row['channel'] . "'>" . $row['channel'] . "</option>"; 
} 
echo "</select>"; 
echo "<button type=submit>Select</button> 
"; 
echo "</form>"; 



?> 

</body> 
</html> 

ответ

2
<option value="rptfreq"<?php if(@$_POST['freqtype'] == 'rptfreq') echo ' selected="selected"'; ?>>Repeater (Base) Frequencies</option> 
<option value="pltfreq"<?php if(@$_POST['freqtype'] == 'pltfreq') echo ' selected="selected"'; ?>>Pilot Frequencies (VDV Leaky Feeder)</option> 
+0

Большое спасибо за помощь. Это работает блестяще. – Hux

+0

Просто понял, что хотя страница работает очень хорошо, когда я впервые загружаю страницу, потому что исходное выпадающее меню еще не представлено, переменная не определена. Есть ли способ, чтобы форма представляла первую пустую запись при загрузке страницы? – Hux

+0

Имя переменной '@' перед именем подавляет уведомление «Неопределенная переменная», если у вас есть те, которые включены. Более элегантный способ добавил бы это перед вашей формой HTML: '$ table = isset ($ _ POST ['freqtype'])? $ _POST ['freqtype']: null; 'затем заменяет' $ _POST ['freqtype'] 'на' $ table ['freqtype'] 'в обоих' if's. – lafor

0

Вы можете проверить, если $_POST['freqtype'] устанавливается с помощью isset() функции PHP, а затем не выполнять остальную часть кода:

<?php 
$table = isset($_POST['freqtype'])?$_POST['freqtype']:false; 
echo '<form ENCTYPE=multipart/form-data action=editfreq.php method=post>'; 
echo '<select name=freqtype onChange=this.form.submit()>'; 
echo '<option value="empty"> </option>'; 
echo '<option value="rptfreq" '.($table=='rptfreq'?'selected="selected"':''.).'>Repeater (Base) Frequencies</option>'; 
echo '<option value="pltfreq" '.($table=='pltfreq'?'selected="selected"':''.).'>Pilot Frequencies (VDV Leaky Feeder)</option>'; 
echo "</select>"; 

if($table){ 
    //Connect to database 
    include 'connect.php'; 

    $sql = "SELECT channel FROM $table"; 
    $result = mysql_query($sql); 
    echo '<form ENCTYPE=multipart/form-data action=editrptfreq.php method=post>'; 
    echo 'Channel '; 
    echo '<select name=channel>'; 
    while ($row = mysql_fetch_array($result)) { 
     echo "<option value='" . $row['channel'] . "'>" . $row['channel'] . "</option>"; 
    } 
    echo "</select>"; 
} 
echo "<button type=submit>Select</button>"; 
echo "</form>"; 
?> 

На стороне записки, только потому, что вы даете варианты в выпадающий квадрат, могут быть представлены значения, отличные от того, что вы решите. Это означает, что если вы не дезинфицируете входные данные, у вас может быть очень плохой опыт SQL.

Другое примечание. Вы должны изучить PDO вместо использования очень старых функций mysql.

+0

Спасибо за совет. Я буду исследовать больше в PDO. Я только начал использовать PHP/MySQL неделю назад, так что все это еще очень новое. Страница, которую я создаю, предназначена только для использования в небольшой частной интрасети, поэтому я не должен заниматься инъекциями SQL и т. Д., Но это то, о чем я пытаюсь узнать больше. – Hux

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