【问题标题】:many elements of a listbox to another一个列表框的许多元素到另一个
【发布时间】:2015-12-18 18:02:40
【问题描述】:

这是我第一次使用这种媒介寻求帮助。我想知道如何在我的代码中包含两个列表框。一个查询数据库,并通过一个按钮将其发送给另一个,并使用多个选项来执行此操作,然后,就像在 php 代码中一样,将第二个列表框中的数据放在表数据库中。谢谢。

<?php
include("server.php");
$conexion = mysql_connect($server,$user, $pass) or die ("<br> No se puede conectar con la base de datos");
$conectarbase = mysql_select_db ($bd);

$consulta = mysql_query("SELECT * FROM modalidad")

?>
<html lang = "es">
  <head>
    <meta charset = "iso-8859-1"/>
    <meta name = "description" content = "Ejemplo de HTML5"/>
    <meta name = "keywords" content = "HTML5, CSS3, Javascript"/>
    <title>PRECEPTORÍA</title>
    <link rel="shortcut icon" href="./style/favicon.png" /> 
    <link rel = "stylesheet" href = "./style/style.css">
  </head>
  <body class = "body">
    <section class = "section">
      <div class = "div">
        <form>
          <fieldset id = "fieldsetalum">
            <legend id = "legendalum">Registro de nuevos alumnos</legend>
            <select name="combo1" multiple size="8">
              <?php
while ($fila = mysql_fetch_row($consulta))
{
echo "<option value='".$fila['0']."'>".$fila['1']."</option>";
}
?>
            </select>
            <select name="combo2" multiple size=></select>
          </fieldset>
        </form>
      </div>
    </section>
  </body>
</html>

【问题讨论】:

  • 停止使用 mysql* 函数。它们已被弃用。接下来,你想要什么。
  • 我认为您将需要使用会话将第二个组合框值构建到一个数组中,同时组装主要的组合框值 - 我会看看我是否可以为您构建一个框架。第二级的值在哪里 - $fila[2]]; 等?
  • @ShakaDiocares 尝试将新代码块放在 php 页面上,看看它做了什么——我希望你应该能够将数据库值放入其中。让我知道这是否符合您的要求。

标签: javascript php jquery listbox


【解决方案1】:

你的表单需要一个动作来提交给它自己:

     <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();">

并在您的 &lt;head&gt; 中有一个 JavaScript 脚本

     <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 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();" 并将其替换为表单上的普通提交按钮。

【讨论】:

  • 非常感谢您的回答,但我不能完全理解。我不会说英语,翻译者破坏了他们告诉我的一切,如果你能善意地纠正我的代码会更好地理解,但非常感谢你。
猜你喜欢
  • 2011-10-22
  • 1970-01-01
  • 2012-09-19
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多