【问题标题】:html select option tag in php (oracle database)php中的html选择选项标签(oracle数据库)
【发布时间】:2011-12-27 05:56:31
【问题描述】:

我在 php 代码中动态选择标签时遇到问题。我正在使用 php 创建一个网站(作业)并连接到一个包含所有所需信息的 oracle 数据库。每个agency 都有一个vehicules 列表。

我为agenciesvehicules 创建了一个select option 标签。我希望车辆的数据根据​​用户选择的机构而改变。因此,如果用户选择agency A,则select option 标签上的车辆应该是agency A1 的车辆,而不是其他机构。到目前为止,我在select 标签中拥有所有机构的所有车辆。

我尝试创建一个函数来检查用户的输入并从用户选择的代理机构中选择车辆。然后它在函数中初始化一个$query。然后使用该查询填写我的select 标签。这是代码

function chooseVehicule(){
                    if( ($_POST['agence'])=='CARPORT'){
                        $query='SELECT marque, modele, nom_agence, num_immatriculation from vehicules v, agences ag
                                WHERE v.id_agence=ag.id_agence
                                AND ag.nom_agence=="CARPORT"';
                    }
                }

然后

chooseVehicule();

但它给了我Undefined index: agence 错误。 请问有什么想法吗?这是我的完整代码。

<?php

                function chooseVehicule(){
                    if( ($_POST['agence'])=='CARPORT'){
                        $query='SELECT v.marque, modele, ag.nom_agence, v.num_immatriculation from vehicules v, agences ag
                                WHERE v.id_agence=ag.id_agence
                                AND ag.nom_agence=="CARPORT"';
                    }
                }
        echo '<h3>'; echo 'Pour la location d\'une vehicule, veuillez remplir ce formulaire';echo'</h3>';


               /*CLIENTS*/
               $query="SELECT nom_client from CLIENTS";
               $state=oci_parse($conn, $query);
               oci_execute($state, OCI_COMMIT_ON_SUCCESS);

               echo '
                   <form action="location.php" method="post">
                   <p><label for="client">Select your Name</label>
                   <select name="client" id="client">';

               while(($row = oci_fetch_array($state, OCI_BOTH))){
                   echo'<option value="'.$row[0].'">'.$row[0]; echo'</option>';
               }
               echo'</select></p>'; 
               echo '</form>';


               /*AGENCES*/
        $query="SELECT nom_agence from AGENCES";
        $state=oci_parse($conn, $query);
                oci_execute($state, OCI_COMMIT_ON_SUCCESS);
                echo '
                    <form action="location.php" method="post">
                        <p><label for="agence">Select a Company</label>
                        <select name="agence" id="agence">';

                        while(($row = oci_fetch_array($state, OCI_BOTH))){
                            echo '<option value="'.$row[0].'">'.$row[0]; echo'</option>';
                        }

                    echo '</select></p>';
                    echo '</form>';


                /*VEHICULES*/

               $query="SELECT marque, modele, nom_agence, num_immatriculation from vehicules v, agences ag
                       WHERE v.id_agence=ag.id_agence
                       AND type_vehicule='UTILITAIRE'
                       order by nom_agence";

               $state=oci_parse($conn, $query);
               oci_execute($state, OCI_COMMIT_ON_SUCCESS);

               echo '
                   <form action="location.php" method="post">
                   <p><label for="vehicule">Select a Vehicule</label>
                   <select name="vehicule" id="vehicule">';
               echo '<optgroup label="Utilitaire">';
               while(($row = oci_fetch_array($state, OCI_BOTH))){
                   echo '<option value="'.$row[3].'">'.$row[2]. ' ' . $row[0] . ' ' . $row[1]; echo '</option>';
               }
               echo '</optgroup>';

               $query="SELECT v.marque, v.modele, ag.nom_agence, v.num_immatriculation from vehicules v, agences ag
                       WHERE v.id_agence=ag.id_agence
                       AND type_vehicule='VOITURE'
                       order by nom_agence";

               echo '<optgroup label="Voiture">';
               $state=oci_parse($conn, $query);
               oci_execute($state, OCI_COMMIT_ON_SUCCESS);
               while(($row = oci_fetch_array($state, OCI_BOTH))){
                   echo '<option value="'.$row[3].'">'.$row[2]. ' ' . $row[0] . ' ' . $row[1]; echo '</option>';
               }
               echo '</optgroup>';

               echo'</select></p>'; 
               echo '</form>';

    oci_free_statement($state);
    oci_close($conn);
        ?>

我没有使用函数chooseVehicule,因为它给了我一个错误。 谢谢。

【问题讨论】:

    标签: php html oracle


    【解决方案1】:

    $_POST 超全局中的键将被发送到与表单字段同名的服务器。如果此表单提交给自己,您将需要发送一个名称为 agence 的字段以避免此错误。 PHP 抛出错误是因为 $_POST 数组中没有键 agence

    为了绕过这个检查,因为这个页面正在处理大量的表单,你可以先设置每个键,然后再对它进行检查:

    if( isset($_POST['agence']) && $_POST['agence'])=='CARPORT'){
                            $query='SELECT marque, modele, nom_agence, num_immatriculation from vehicules v, agences ag
                                    WHERE v.id_agence=ag.id_agence
                                    AND ag.nom_agence=="CARPORT"';
                        }
    

    您应该对所有选择性发送的表单执行此操作。

    编辑:

    您需要在页面中添加一些状态,“状态”是指用户进入选择过程的程度。让我们让车辆的表格仅在用户已经选择了代理商时才显示。此表单应包含在条件中。

    在此条件中包装车辆表单的所有逻辑:

    if(isset($_POST['agence'])){
      $query="SELECT nom_agence from AGENCES";
        $state=oci_parse($conn, $query);
                oci_execute($state, OCI_COMMIT_ON_SUCCESS);
                echo '
                    <form action="location.php" method="post">
                        <p><label for="agence">Select a Company</label>
                        <select name="agence" id="agence">';
    
                        while(($row = oci_fetch_array($state, OCI_BOTH))){
                            echo '<option value="'.$row[0].'">'.$row[0]; echo'</option>';
                        }
    
                    echo '</select></p>';
                    echo '</form>';
    }
    

    由于此页面是程序性的,因此在为代理机构做出选择后,车辆表格才会出现。

    我们需要使车辆查询具有反映用户所做选择的 WHERE 子句。看起来好像您要跨两个表连接 id,因此 where 子句需要按机构 id 或机构名称查找,具体取决于数据库设计。

    如果将车辆表单放在这样的条件中,我们可以确定用户已经选择了代理并进入表单的第二个“状态”。然后,您需要参数化您的 sql 语句并传入选定的 id。

    【讨论】:

    • 是的,该页面正在向自身发布(它是同一页面)。我不明白你的意思change the select name attr from client to agence
    • @mkab - 已编辑,我没有注意到您有几个不同的表单元素。
    • 谢谢。忘记使用isset。让我试试,我会回复你的。编辑:我认为$_POST['agence']之后的括号有问题
    • 还是不行。我没有错误了,但 select 标签没有按我想要的方式工作。
    • 您能详细说明一下您希望选择标签做什么吗?只是猜测我假设您希望它根据第一次提交选择默认值。在这种情况下,您必须将查询值与循环中的值进行比较,并回显“选择”以获得正确的值。
    【解决方案2】:

    由于某种原因,没有设置 $_POST['agence']。 如果你执行 isset($_POST['agence']) 它将返回 false。

    【讨论】:

    • 是的,它返回 false 并且 $query 未初始化。你有什么想法吗?
    • $_POST['agence'] 需要在您的代码中设置一些位置;首先,检查 isset 并避免如果返回 false;并发现您需要归因于 $_POST['agence'] 的值在哪里。也许这是一个表单字段输入错误的名称......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2013-12-28
    • 2013-10-28
    • 2016-07-28
    • 1970-01-01
    • 2015-04-28
    相关资源
    最近更新 更多