你的表單需要一個操作來提交自己:
<form name="form" id="form" action="<?php echo echo htmlspecialchars($_SERVER["REQUEST_URI"]); ?>" method="post">
您可以添加一個onchange();事件您select1
下拉
<select name="combo1" multiple size="8" onChange="submit_this();">
,並有一個JavaScript腳本在<head>
<script language="javascript"> function submit_this(){ this.form.submit();}</script>
然後,你將不得不使用PHP來從提交的網頁收集值
$combo1 = mysqli_real_escape_string($_POST['combo1']);
和那麼您可以使用第二個下拉菜單返回頁面,其構建方式與創建第一個下拉菜單的方式大致相同,使用您從第一個下拉菜單中獲取的數據進行設置第二個。你可以換第一個下拉在isset()
:
if(!isset($combo1)){
// make your first select boxes
}
,第二個在
if(isset($combo1)){
// make your second select boxes if combo1 returned a value
}
,以便需要時纔會出現。
正如@NanaPartykar所說,mysqli是唯一的出路。
這將是依賴於JavaScript,因此,如果你願意,你可以有一個提交的,而不是JavaScript的功能按鈕:
<input type="submit" name="submit" value="Pick Sizes" />
這看起來如何使用選擇框一個方便和借鑑E:PHP code to get selected text of a combo box
我希望這會給你一個關於如何完成的想法 - SESSION變量在第二個下拉列表的循環中仍有待正確定義,但它們可能直接來自您的數據庫,而不是來自會話數組用於演示目的。
所有值都設置爲數字;
intval();
將提交的任何內容轉換爲整數以清理它。
然後,您可以找回從您最初從數據庫中設置的會話變量提交的內容的相應值。
這樣,你只會讓您的下拉列表中的單個數字值,你可以用它來查找得到的答案你想
<?php session_start(); ?>
<!DOCTYPE html>
<html lang = "es">
<head>
<title>PRECEPTORÍA</title>
</head>
<body>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>" method="post">
<?php
$main_opt = array();
$_SESSION['opt_vals'] = array();
$main_opt[0] = "Select Item";
$main_opt[1] = "Ice Cream";
$main_opt[2] = "Trousers";
$main_opt[3] = "Tee Shirts";
$_SESSION['opt_vals'][1][0] = "Select Flavour";
$_SESSION['opt_vals'][1][1] = "Vanilla";
$_SESSION['opt_vals'][1][2] = "Chocolate";
$_SESSION['opt_vals'][1][3] = "Strawberry";
$_SESSION['opt_vals'][1][4] = "Tuttifrutti";
$_SESSION['opt_vals'][2][0] = "Select Colour";
$_SESSION['opt_vals'][2][1] = "Black";
$_SESSION['opt_vals'][2][2] = "Red";
$_SESSION['opt_vals'][2][3] = "Green";
$_SESSION['opt_vals'][2][4] = "Blue";
$_SESSION['opt_vals'][3][0] = "Select Size";
$_SESSION['opt_vals'][3][1] = "Small";
$_SESSION['opt_vals'][3][2] = "Medium";
$_SESSION['opt_vals'][3][3] = "Large";
$_SESSION['opt_vals'][3][4] = "X Large";
$i = 0;
if(!isset($_POST['combo1']) && !isset($_POST['combo2'])){
echo '<select name="combo1" onChange="submit();">' . "\n";
//while ($fila = mysqli_fetch_row($consulta)){
while($i < count($main_opt)){
echo "<option value='".$i."'>".$main_opt[$i]."</option>\n";
$o = 0;
// load your sub options array here
if(!$_SESSION['opt_vals'][$i]) $_SESSION['opt_vals'][$i] = array();
while($i < count($_SESSION['opt_vals'][$i])){
$_SESSION['opt_vals'][$i] = $o;
if(!$_SESSION['opt_vals'][$i]) $_SESSION['opt_vals'][$i] = array();
$_SESSION['opt_vals'][$i][$o] = $_SESSION['opt_vals'][$i][$o];
$o++;
}
$i++;
}
echo '</select>' . "\n";
}else{
if(intval($_POST['combo1']) >= 1) $_SESSION['combo1_val'] = $combo1_val =intval($_POST['combo1']);
if(intval($_POST['combo1']) >=1){
$i = 0;
echo '<select name="combo2" onChange="submit();">' . "\n";
while($i < count($_SESSION['opt_vals'][$combo1_val])){
echo "<option value='".$i."'>".$_SESSION['opt_vals'][$combo1_val][$i]."</option>\n";
$i++;
}
}
echo '</select>' . "\n";
}
if(intval($_POST['combo2']) >= 1) $_SESSION['combo2_val'] = $combo2_val =intval($_POST['combo2']);
if($_SESSION['combo1_val'] >=1 && $_SESSION['combo2_val'] >=1){
// use the result to do whatever you want
echo 'Thank you! You have selected ' . $_SESSION['opt_vals'][$_SESSION['combo1_val']][$_SESSION['combo2_val']] . " " . $main_opt[$_SESSION['combo1_val']] . '.';
}
// Do any mysqli adjustments to your database here
// reset to go again
if($_SESSION['combo2_val'] >= 1){
$_SESSION['combo1_val'] = 0;
$_SESSION['combo2_val'] = 0;
}
?>
</form>
<a href="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?>">Click to start a new selection</a>
</body>
</html>
你可以刪除onChange="submit();"
並與正常提交按鈕替換在表格上,如果你願意。
停止使用* mysql **函數。他們已被棄用。接下來的事情,你想要什麼。 –
我認爲您需要使用會話將第二個組合框的值構建到數組中,同時組裝主要的一個 - 我會看看是否可以爲您構建的框架創建一個框架。價值在哪裏?第二級 - '$ fila [2]];'等等? – Steve
@ShakaDiocares嘗試把新的代碼塊放在一個php頁面上,看看它的作用 - 你應該能夠把你的數據庫值放入它,我希望。讓我知道,如果這是你想要的東西。 – Steve