2012-07-20 131 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