您的表单需要一个操作来提交给自身:
<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" />
这看起来是如何使用选择框的方便参考:PHP 代码获取组合框的选定文本 https://stackoverflow.com/questions/18268068/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();"
如果您愿意,请将其替换为表单上的普通提交按钮。