2012-07-20 135 views
0

我已经创建了一个下拉菜单来选择表,然后另一个下拉菜单填充选定表的一列中的数据。目前,当我第一次加载页面时,我收到一条错误消息,因为我的下拉列表中没有选择任何内容,所以索引freqtype未定义。当我选择一切正常时,除了我的选择未被保存在保管箱中。在一个脚本中有没有一种方法可以实现这一点。我想可能使用if语句作为初始表单,所以底部的下拉列表不会填充,直到顶部被选中,但我无法让代码工作。任何帮助将不胜感激。保持下拉选择,不要提交直到选择 - 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 2012-07-20 22:16:14

+0

刚刚意识到,尽管页面工作得很好,当我第一次加载页面,因为最初的下拉列表尚未提交,变量是未定义的。有没有办法让表单在页面加载时提交第一个空白条目? – Hux 2012-07-20 22:31:33

+0

变量名称前面的“@”可以禁用“未定义变量”通知,如果您打开了这些通知。更优雅的方式是在你的表单HTML之前添加它:'$ table = isset($ _ POST ['freqtype'])? $ _POST ['freqtype']:null;'然后用'$ table ['freqtype']'在两个if中替换$ _POST ['freqtype']'。 – lafor 2012-07-20 22:38:57

0

您可以检查是否$_POST['freqtype']使用PHP的isset()功能设置,然后不执行代码的其余部分:

<?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,所以这些都还是很新的。我正在构建的页面仅用于小型私有Intranet,因此我不关心SQL注入等,但这是我想了解更多信息。 – Hux 2012-07-20 22:30:36