1 (изменено: Maxnight, 2011-05-10 13:46:56)

Тема: Выпадающий список

Здравствуйте! у меня такая проблема у же все перепробовал, а все равно ничего не получается....  у меня есть БД колледжа в ней такие таблицы:
1я. CiklovKomis (кафедры они же цикловые комиссии в колледже) - там названия кафедр.
2я. Specialnost(Специальность) - названия специальностей.
3я. Groups(группы) - названия учебных групп.
4я. Students - список студентов.
5я. Uspevaemost -  оценки студентов, даты сдачи и вид контроля (зачет или экзамен)

Все таблици в БД связаны между собой.

Мне нужно сделать  4 выпадающих списка:
1й  - Я ввожу кафедру и  в следующем списке появляются специальности, которые относятся к этой кафедре, после выбора специальности соответственно группы, которые относятся к этой СП,и в 4ой студенты, кот учатся в этой группе, т.е. связной список. и далее кнопка

2

Re: Выпадающий список

И далее кнопка "Вывести" после нажатия на которую на этой страничке выводится табличка со списком дисциплин, конкретного студента ( по ID) c оценками зачетом или экзаменом и датой сдачи

http://i024.radikal.ru/1105/c1/4d44b997515at.jpg

Эти списки я сделал, все выводится из БД, но нету связного списка (тоесть выводится все подяд) связной список получилось реализовать максимум из 3х элементов и то без вывода из БД!  Или лучше сделать такое как то без таких списков? Может как в контакте при поиске университета? И запрос на вывод таблички тоже релизовал, но только в phpmyadmine!
http://s015.radikal.ru/i330/1105/50/0d9b71a588cct.jpg
Подскажите пожалуйста как можно при нажатии на кнопку на этой странице вывести эту табличку с помощь  php?

3

Re: Выпадающий список

Вот код выпадающих списков:

          <?php
          
               
   $ck = "<p><select id='var_grupa' name='var_grupa' size='1'>
                <option value='vse'>Выберите цикловую комисию</option>";

                $query = mysql_query("SELECT * FROM CiklovKomis ORDER BY id_ciklovKomis");
                $result = mysql_fetch_array($query);
                do
                {
                       $ck .= "<option value='".$result['id_ciklovKomis']."'>".$result['nazv_ciklovKomis']."</option>";
                }
                while($result = mysql_fetch_array($query));

$ck .= "</select>";

echo $ck."<br>"."<br>";


$spec = "<p><select id='var_grupa' name='var_grupa' size='1'>
                <option value='vse'>Выберите cпециальность</option>";

                $query = mysql_query("SELECT * FROM Specialnost ORDER BY id_specialnost");
                $result = mysql_fetch_array($query);
                do
                {
                       $spec .= "<option value='".$result['id_specialnost']."'>".$result['nazv_specialnosti']."</option>";
                }
                while($result = mysql_fetch_array($query));

$spec .= "</select>";

echo $spec."<br>"."<br>";
               
                $grupa = "<p><select id='var_grupa' name='var_grupa' size='1'>
                <option value='vse'>Выберите группу</option>";

                $query = mysql_query("SELECT * FROM Groups ORDER BY nazv_groups");
                $result = mysql_fetch_array($query);
                do
                {
                        $grupa .= "<option value='".$result['id_groups']."'>".$result['nazv_groups']."</option>";
                }
                while($result = mysql_fetch_array($query));

$grupa .= "</select>";

echo $grupa."<br>"."<br>";


$st = "<p><select id='var_grupa' name='var_grupa' size='1'>
                <option value='vse'>Выберите студента</option>";

                $query = mysql_query("SELECT * FROM Students ORDER BY id_student");
                $result = mysql_fetch_array($query);
                do
                {
                       $st .= "<option value='".$result['id_student']."'>".$result['lastname']."</option>";
                }
                while($result = mysql_fetch_array($query));

$st .= "</select>";

echo $st."<br>"."<br>";
echo '<input type="submit" value="Вывести" />';
?>

4

Re: Выпадающий список

Первое поле оставляем как есть, только добавляем обработку события onchange.

<?php

$ck = "<p><select id='var_grupa' name='var_grupa' size='1' onchange="this.form.submit();">
                <option value='vse'>Выберите цикловую комисию</option>";
                $query = mysql_query("SELECT * FROM CiklovKomis ORDER BY id_ciklovKomis");
                $result = mysql_fetch_array($query);
                do
                {
                       $ck .= "<option value='".$result['id_ciklovKomis']."'>".$result['nazv_ciklovKomis']."</option>";
                }
                while($result = mysql_fetch_array($query));
$ck .= "</select>";
echo $ck."<br>"."<br>";

// Далее идет формирование второго поля, которое будет выведено только при наличии значения в первом.
// Обязательно замените id и name в теге select, они должны быть уникальными.
if (!empty($_POST['var_grupa'])) {
    $spec = "<p><select id='Specialnost' name='Specialnost' size='1' onchange="this.form.submit();">
                <option value='vse'>Выберите cпециальность</option>";
                $query = mysql_query("SELECT * FROM Specialnost WHERE `var_grupa` = "' . addslashes($_POST['var_grupa']) . '" ORDER BY id_specialnost");
                $result = mysql_fetch_array($query);
                do
                {
                       $spec .= "<option value='".$result['id_specialnost']."'>".$result['nazv_specialnosti']."</option>";
                }
                while($result = mysql_fetch_array($query));
    $spec .= "</select>";
}

if (!empty($_POST['var_grupa']) && !empty($_POST['Specialnost'])) {
  // Здесь уже будет третье поле.
}

?>

Еще раз: обратите внимание на id и name в тегах select, эти параметры должны быть уникальными и именно по их именам надо проверять содержимое переменных в POST массиве.

Как только сделаете связанные выпадающие списки, вывести данные по идентификатору пользователя будет, думаю, не сложно.

5

Re: Выпадающий список

Cпасибо большое!

у меня вот такая вот ошибка:

Parse error: syntax error, unexpected T_STRING in Z:\home\College_db\www\form3.php on line 21


поле 21 вот: $ck = "<p><select id='var_grupa' name='var_grupa' size='1' onchange="this.form.submit();">

Hanut сказал:

Еще раз: обратите внимание на id и name в тегах select, эти параметры должны быть уникальными и именно по их именам надо проверять содержимое переменных в POST массиве.

Если я правильно понял это в БД нужно ID заместо первичного ключа поставить уникальный? и также namе....

6

Re: Выпадающий список

нужно ли подключать какие-то  библиотеки? ajax,jquery,javascript?

7

Re: Выпадающий список

По ошибке: экранируйте двойные кавычки в строке, я не обратил на них внимание.
$ck = "<p><select id='var_grupa' name='var_grupa' size='1' onchange=\"this.form.submit();\">...

id вам не нужен, можете его убрать. name какой будет - совершенно не важно, главное, чтобы он был уникален и вы понимали к какой таблице он относится. name используется только для передачи данных через отправку формы методом POST. Проследите, чтобы все поля и кнопка submit находились внутри тега <form method="post" action="">

Maxnight сказал:

нужно ли подключать какие-то  библиотеки?

Ничего не надо.

8

Re: Выпадающий список

При выборе из первого списка ошибка:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\College_db\www\form3.php on line 41

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\College_db\www\form3.php on line 46

9

Re: Выпадающий список

<?php
       
echo '<form method="post" action="">';
$ck = "<p><select name='CiklovKomis' size='1' onchange=\"this.form.submit();\">;
        <option value='vse'>Выберите цикловую комисию</option>";
            $query = mysql_query("SELECT * FROM CiklovKomis ORDER BY id_ciklovKomis");
              $result = mysql_fetch_array($query);
                do
                {
                      $ck .= "<option value='".$result['id_ciklovKomis']."'>".$result['nazv_ciklovKomis']."</option>";
                }
               while($result = mysql_fetch_array($query));
$ck.= "</select>";
echo $ck."<br>"."<br>";

if (!empty($_POST['CiklovKomis'])) {
   
        $spec = "<select name='Specialnost' size='1' onchange=\"this.form.submit();\">;
          <option value='vse'>Выберите cпециальность</option>";
                 $query= mysql_query("SELECT * FROM Specialnost WHERE `CiklovKomis` = ' " . addslashes($_POST['CiklovKomis']) . " ' ORDER BY id_specialnost");
                $result = mysql_fetch_array($query);
                do
                {
                       $spec .= "<option value='".$result['id_specialnost']."'>".$result['nazv_specialnosti']."</option>";
                }
                while($result = mysql_fetch_array($query));
$spec.= "</select>";

}

if (!empty($_POST['CiklovKomis']) && !empty($_POST['Specialnost'])) {

}

echo '<input type="submit" value="Вывести" />';

echo "</form>";
?>

10

Re: Выпадающий список

Maxnight сказал:

При выборе из первого списка ошибка:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\College_db\www\form3.php on line 41

Укажите какие строки выдают ошибку. Я же их не вижу.

Обратите внимание на лишние пробелы между кавычками, с этими пробелами ничего найдено не будет.  ' " . addslashes($_POST['CiklovKomis']) . " '
$query= mysql_query("SELECT * FROM Specialnost WHERE `CiklovKomis` = ' " . addslashes($_POST['CiklovKomis']) . " ' ORDER BY id_specialnost");

11 (изменено: Maxnight, 2011-05-11 13:30:19)

Re: Выпадающий список

Вот вроде все пробелы поубирал, а все равно таже ошибка

http://radikal.ru/F/s58.radikal.ru/i162 … a.jpg.html

http://s58.radikal.ru/i162/1105/42/47452afd248a.jpg

12

Re: Выпадающий список

Maxnight сказал:

вроде все пробелы поубирал, а все равно таже ошибка

Попробуйте перехватить содержимое переменной $_POST['CiklovKomis']. Подставьте содержимое в запрос и выполните его в phpMyAdmin. Если ошибка в запросе, то она будет выведена.

13 (изменено: Maxnight, 2011-05-11 13:44:13)

Re: Выпадающий список

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CiklovKomis']).&quot;' ORDER BY id_specialnost LIMIT 0, 30' at line 1

SELECT *
FROM Specialnost
WHERE 'CiklovKomis' = '".addslashes($_POST['CiklovKomis '])."'       
LIMIT 0 , 30

14 (изменено: Maxnight, 2011-05-11 13:45:30)

Re: Выпадающий список

как убрать этот пробел????  .addslashes($_POST['CiklovKomis '])."'   буква "s" стирается!  В КОДЕ ПРОБЕЛА НЕТ!

15

Re: Выпадающий список

http://s54.radikal.ru/i144/1105/fc/78378db6edd3t.jpg

16

Re: Выпадающий список

Вместо переменной подставьте строку, которую надо найти.

SELECT *
FROM Specialnost
WHERE `CiklovKomis` = 'строка'

Значение переменной отловите в скрипте перехватив ее функцией exit().
exit($_POST['CiklovKomis']);

17

Re: Выпадающий список

по второму клику из списка выпадает сразу 3 и 4 поле! как только условие напишу в запросе ошибка в строке while($result = mysql_fetch_array($query));

в пхпадмине запрос работает!

18 (изменено: Maxnight, 2011-05-12 16:09:38)

Re: Выпадающий список

Я исправил! мне кажется что проблема только в запросах так как "ЦК Разработки программного обеспечения"(кафедра) по Id-1 связана со специальностью "Разработка программного обеспечения"
http://s57.radikal.ru/i156/1105/95/1d059aba8689t.jpg
<?php   
echo '<form method="post" action="">';
$ck = "<p><select id='id_ciklovKomis' name='nazv_ciklovKomis' size='1' onchange=\"this.form.submit();\">;
        <option value='vse'>Выберите цикловую комисию</option>";
          $query = mysql_query("SELECT * FROM CiklovKomis ORDER BY id_ciklovKomis");
              $result = mysql_fetch_array($query);
                do
                {
                      $ck .= "<option value='".$result['id_ciklovKomis']."'>".$result['nazv_ciklovKomis']."</option>";
                }
               while($result = mysql_fetch_array($query));
$ck.= "</select>";
echo $ck."<br>"."<br>";

if (!empty($_POST['nazv_ciklovKomis'])) {
    
     $spec = "<p><select id='id_specialnost' name='nazv_specialnosti' size='1' onchange=\"this.form.submit();\">;
                <option value='vse'>Выберите cпециальность</option>";
       $query = mysql_query("SELECT * FROM Specialnost, CiklovKomis WHERE CiklovKomis.id_ciklovKomis = Specialnost.id_specialnost ORDER BY id_specialnost");
                $result = mysql_fetch_array($query);
                do
                {
                       $spec .= "<option value='".$result['id_specialnost']."'>".$result['nazv_specialnosti']."</option>";
                }
                while($result = mysql_fetch_array($query));
$spec .= "</select>";
echo $spec."<br>"."<br>";

}
if (!empty($_POST['nazv_ciklovKomis']) && !empty($_POST['nazv_specialnosti'])) {
   
$grupa = "<p><select id='id_groups' name='nazv_groups' size='1' onchange=\"this.form.submit();\">;
                <option value='vse'>Выберите группу</option>";
                $query = mysql_query("SELECT * FROM Groups ORDER BY nazv_groups");
                $result = mysql_fetch_array($query);
                do
                {
                        $grupa .= "<option value='".$result['id_groups']."'>".$result['nazv_groups']."</option>";
                }
                while($result = mysql_fetch_array($query));
$grupa .= "</select>";
echo $grupa."<br>"."<br>";

if (!empty($_POST['nazv_ciklovKomis']) && !empty($_POST['nazv_specialnosti']) && !empty($_POST['nazv_groups'])); {
}
$st = "<p><select id='id_student' name='lastname' size='1' onchange=\"this.form.submit();\">;
                <option value='vse'>Выберите студента</option>";
                $query = mysql_query("SELECT * FROM Students ORDER BY id_student");
                $result = mysql_fetch_array($query);
                do
                {
                       $st .= "<option value='".$result['id_student']."'>".$result['lastname']."</option>";
                }
                while($result = mysql_fetch_array($query));
$st .= "</select>";
echo $st."<br>"."<br>";
}
if (!empty($_POST['nazv_ciklovKomis']) && !empty($_POST['nazv_specialnosti']) && !empty($_POST['nazv_groups'])&& !empty($_POST['lastname'])); {
}
echo '<input type="submit" value="Вывести" />';
echo "</form>";
?>

19

Re: Выпадающий список

Проверьте код, сейчас он выглядит нерабочим. Во всяком случае, в такой строке смысла нет.
if (!empty($_POST['nazv_specialnosti']) && !empty($_POST['nazv_groups'])) {
}

Остальные поля проверяйте точно так же, как и первые два, добавляя имена полей к строке условия:
!empty($_POST['nazv_ciklovKomis']) && !empty($_POST['nazv_specialnosti']) && !empty($_POST[ ...

20 (изменено: Maxnight, 2011-05-12 20:06:28)

Re: Выпадающий список

Возможно нужно нетолько по именам, а и по айди проверять значения переменных в POST масиве! только как это будет в коде выглядить правильно?

И как сделать чтоб оно выбор из списка запоминало? а то так и остается "Выберите....."

Вот например по такому запросу:

SELECT *
FROM CiklovKomis, Specialnost, Groups, Students
WHERE id_student = '1'
AND CiklovKomis.id_ciklovKomis = Specialnost.id_specialnost
AND Specialnost.id_specialnost = Groups.id_groups
AND Groups.id_groups = Students.id_student

http://s43.radikal.ru/i100/1105/1f/6e7c5aa22c87t.jpg

ПО Id-1 Это "Иванов", который учится в группе "ДИ-106" на специальности "Разработка программного обеспечения", которая относится к кафедре "ЦК Разработки программного обеспечения"

21

Re: Выпадающий список

id в теге select вам не нужен, он не используется.

Если первый список формируется правильно, то предварительный выбор делается так:
$ck .= "<option value='".$result['id_ciklovKomis']."'" . (isset($_POST['nazv_ciklovKomis']) && $_POST['nazv_ciklovKomis'] == $result['id_ciklovKomis'] ? ' selected="selected"' : '') . ">".$result['nazv_ciklovKomis']."</option>";

У остальных списков предварительный выбор делается аналогично, с помощью параметра selected.

Начните с двух списков, не делайте все сразу.

22 (изменено: Maxnight, 2011-05-13 10:04:53)

Re: Выпадающий список

Вот сделал 2 списка, но они не связаны,что нужно добавить в запрос, что запоминает Id кафедры того названия что я выберу из первого списка?
http://s015.radikal.ru/i331/1105/79/aa885f37069ft.jpg

Поэтому запросу если я например выберу 1й пункт то по  id=1 должен во втором списке оказаться только та специальность, кот в базе под  id=1....  у меня в базе связь идет по айди, а не по названию, может из-за это ничего не получаеться?

<?php   
echo '<form method="post" action="">';
$ck = "<p><select name='nazv_ciklovKomis' size='1' onchange=\"this.form.submit();\">;
        <option value='vse'>Выберите цикловую комисию</option>";
          $query = mysql_query("SELECT * FROM Specialnost,CiklovKomis WHERE CiklovKomis.id_ciklovKomis=Specialnost.id_specialnost  ORDER BY id_ciklovKomis");
              $result = mysql_fetch_array($query);
                do
                {
          $ck .= "<option value='".$result['id_ciklovKomis']."'" . (isset($_POST['nazv_ciklovKomis']) && $_POST['nazv_ciklovKomis'] == $result['id_ciklovKomis'] ? ' selected="selected"' : '') . ">".$result['nazv_ciklovKomis']."</option>";
                }
               while($result = mysql_fetch_array($query));
$ck.= "</select>";
echo $ck."<br>"."<br>";

if (!empty($_POST['nazv_ciklovKomis'])) {
     
     $spec = "<p><select name='nazv_specialnosti' size='1' onchange=\"this.form.submit();\">;
                <option value='vse'>Выберите cпециальность</option>";
       $query = mysql_query("SELECT * FROM Specialnost,CiklovKomis WHERE CiklovKomis.id_ciklovKomis=Specialnost.id_specialnost ORDER BY id_specialnost");
                $result = mysql_fetch_array($query);
                do
                {
    $spec .= "<option value='".$result['id_specialnost']."'" . (isset($_POST['nazv_specialnosti']) && $_POST['nazv_specialnosti'] == $result['id_specialnost'] ? ' selected="selected"' : '') . ">".$result['nazv_specialnosti']."</option>";
                }
                while($result = mysql_fetch_array($query));
$spec .= "</select>";
echo $spec."<br>"."<br>";
}
if (!empty($_POST['nazv_ciklovKomis']) && !empty($_POST['nazv_specialnosti'])){
}
echo '<input type="submit" value="Вывести" />';
echo "</form>";
?>

23 (изменено: Maxnight, 2011-05-13 12:40:31)

Re: Выпадающий список

Значение переменной в первом списке отловил в скрипте перехватив ее функцией exit(). - выводятся айди, того пункта,что я выбираю, а во втором списке уже не выходит!

24

Re: Выпадающий список

Добавьте условие в SQL запрос формирующий второй список.

$query = mysql_query("SELECT * FROM Specialnost,CiklovKomis
WHERE CiklovKomis.id_ciklovKomis=Specialnost.id_specialnost
AND CiklovKomis.id_ciklovKomis = '" . addslashes($_POST['nazv_ciklovKomis']) . "'
ORDER BY id_specialnost");

25 (изменено: Maxnight, 2011-05-13 20:04:09)

Re: Выпадающий список

Спасибо работает! а как теперь сделать чтоб при нажатии кнопки "Вывести" отправлялся этот запрос:

SELECT nazv_discipline, vid_kontrolya, otsenka, date_sdachi
FROM Students, Discipline, Uspevaemost WHERE Students.id_student='1'
AND Discipline.Id_Discipline=Uspevaemost.Id_Uspevaemost

(а айди студента в зависимости от того кого выберу)

и у меня почему-то выводится только одна группа и один студент, а в базе у меня несколько групп под одним id и так же со студентами....

может у меня переизбыточность информации
http://s54.radikal.ru/i145/1105/c3/d298a290dd20t.jpg