HTML выбор тега опции в PHP (база данных оракула) - PullRequest
0 голосов
/ 11 ноября 2011

У меня проблема с созданием тега select в php-коде.Я создаю веб-сайт (домашнее задание) с помощью php и подключаюсь к базе данных оракула, в которой есть вся необходимая информация.У каждого agency есть список vehicules.

. Я создал тег select option для agencies и для vehicules.Я хочу, чтобы данные об автомобилях менялись в зависимости от того, какое агентство выбирает пользователь.Таким образом, если пользователь выбирает 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, так как она выдает ошибку.Спасибо.

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Ключи в суперглобальном $_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"';
                    }

Вы должны сделать это для всех форм, которые отправляются выборочно.

EDIT:

Вам нужно будет ввести какое-то состояние на странице, «состояние» в смысле того, как далеко пользователь попал в процесс выбора. Давайте сделаем так, чтобы форма для транспортных средств отображалась только в том случае, если пользователь уже выбрал агентство. Эта форма должна быть обернута в условную.

обернуть всю логику для формы транспортных средств в это условие:

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, которое отражает выбор, сделанный пользователем. Выглядит так, как будто вы объединяете идентификатор для двух таблиц, поэтому в предложении where нужно будет искать по идентификатору агентства или названию агентства, в зависимости от структуры базы данных.

Если форма транспортного средства помещена в условное выражение, подобное этому, мы можем быть уверены, что пользователь уже сделал выбор агентства и перешел ко второму «состоянию» формы. Затем вам нужно будет параметризовать оператор SQL и передать выбранный идентификатор.

0 голосов
/ 11 ноября 2011

По какой-то причине это не установлено $ _POST ['agence']. Если вы сделаете isset ($ _ POST ['agence']), он вернет false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...