Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Два списка и заполнение полей
 
 автор: TetRiska   (04.01.2009 в 21:30)   письмо автору
7 Кб
 
 

Добрый вечер. Насколько я понимаю средставми ПХП польностью реализовать не выйдет :(. Вопрос в массы. Как при выборе в первом списке категории фильма в другой загрузились все фильмы этой категории, и при выборе фильма во все поля загрузилась информация о этом фильме...Все это нужно для редактирования.
Так вот делаю я первый список так.

<div align='left'>
<?php
$query 
mysql_query("SELECT * FROM categories GROUP BY title",$db);
if (!
$query)
{
echo 
"<span class='info'>Запрос на выборку данных из базы не прошел! <br> <strong>Код ошибки:</strong></span>";
exit (
mysql_error());
}
if (
mysql_num_rows ($query)>0)
{
$myrow mysql_fetch_array($query);
echo 
" <select name='select_jan'>";
do
{
echo 
" <option value='$myrow[title]'>$myrow[title]</option> "
}
while (
$myrow mysql_fetch_array($query));
echo 
" </select>";
}
else
{
echo 
"<span class='info'>База пуста и не содержит жанров!</span>";
exit();
}
?>
</div> 

В первом списке отображаются все категории фильмов.

Второй список:

<div align='left'>
<?php
//запрос что ниже как я думал определит номер категории, который я бы просто использовал для вывода второго списка
$qer mysql_query("SELECT id FROM categories WHERE title='$myrow[title]'",$db);
$myqer mysql_fetch_array($qer);
//если в запросе что ниже указать номер jan='9'" то выведутся все фильмы
$query mysql_query("SELECT * FROM data WHERE jan='$myqer'",$db);
if (!
$query)
{
echo 
"<span class='info'>Запрос на выборку данных из базы не прошел! <br> <strong>Код ошибки:</strong></span>";
exit (
mysql_error());
}
if (
mysql_num_rows ($query)>0)
{
$myrow mysql_fetch_array($query);
echo 
" <select name='select_jan'>";
do
{
echo 
" <option value='$myrow[title]'>$myrow[title]</option> "
}
while (
$myrow mysql_fetch_array($query));
echo 
" </select>";
}
else
{
echo 
"<span class='info'>Даный жанр не имеет фильмов!</span>";
exit();
}
?>
</div>

Во втором должны отобразится все фильмы принадлежащие этой категории.

И как после выбора из всех списков загрузить поля?? Я полагаю что луче делать без перезгрузки страницы, лишнее... Не знал что такая мелочь заведет меня в тупик, программно легко бы такое реализовал)) жду с нетерпением помощи, привелико благодарен буду :) Вот еще приложу файл для наглядности.

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 21:40)   письмо автору
 
   для: TetRiska   (04.01.2009 в 21:30)
 

Ммдя... А что имеется ввиду под "загрузить поля"?

  Ответить  
 
 автор: TetRiska   (04.01.2009 в 21:50)   письмо автору
 
   для: Николай2357   (04.01.2009 в 21:40)
 

Выбрали в списке№1 категорию, выбрали во втором списке№2 фильм, ниже идут поля: дата выхода фильма, размер и тд..., так вот после выбора фильма в эти поля загружаются его данные, чтобы потом отредактировать и отправить в базу

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 21:57)   письмо автору
 
   для: TetRiska   (04.01.2009 в 21:50)
 

Ну если без перезагрузки, то нужно юзать аякс. А так как непонятно, какой список будет выбран последним, то нужен либо хитрый обработчик на JS, или кнопка "загрузить". Включать аякс кнопкой - затея по меньшей мере глуповатая. Так что либо нужно довольно серьёзно поработать над этим, либо делать с перезагрузкой, той же кнопкой. В этом то проблемы я думаю не будет?

  Ответить  
 
 автор: TetRiska   (04.01.2009 в 22:34)   письмо автору
 
   для: Николай2357   (04.01.2009 в 21:57)
 

Пожалуй с перезагрузкой, с аяксом еще не встречался и времени на изучение покамисть нет. Как я понял самый простой вариант это сделать кнопку и по клику на нее загружать список второй и поля? Более сложный это автоматическая загрузка второго списка после выбора в первом (тут нужен обработчик который бы различал в котором списке был сделан выбор) ? Пойдем от простого - кнопки.
Значит так:
<input class='sub_com2' onclick='...' type='submit' value='Загрузить фильмы' />

На событие onclick вешаю функцию которая бы загружала фильмы с перезагрузкой страницы? Если чтото я не так понял прошу разъясните.

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 22:55)   письмо автору
 
   для: TetRiska   (04.01.2009 в 22:34)
 

В аяксе ничего сложного нет. Просто если Вы выводите списки по очереди, то кнопка в принципе не нужна. Как обойтись без нё я Вам уже как то писал. Я не совсем уловил алгоритм выбора. Вот как я понял:
1. Выводится 1-й спиисок.
2. В зависимости от выбора значения первого селекта выводится второй
3. В зависимости от выбора значения 2-го селекта выводится информация для редактирования.
Правильно, или я не так понял?

  Ответить  
 
 автор: TetRiska   (04.01.2009 в 23:03)   письмо автору
 
   для: Николай2357   (04.01.2009 в 22:55)
 

Да Вы правильно поняли:

3. В зависимости от выбора значения 2-го селекта выводится информация для редактирования. (инфа выводится в поля)

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 23:11)   письмо автору
 
   для: TetRiska   (04.01.2009 в 23:03)
 

Ну вот это же Ваш пост... Организуйте вывод селектов по тому же принципу и будет незаметно даже, что что то перезагружается... Если графики на странице не много.

  Ответить  
 
 автор: TetRiska   (04.01.2009 в 23:49)   письмо автору
 
   для: Николай2357   (04.01.2009 в 23:11)
 

Хмм нада попробывать..Но всегда после перезагрузки сбрасывается выбранное значение в предыдущем списке :( Выберу к примеру Мелодрама - загрузится второй список и в первом значение станет Боевик.. Как избежать этого?

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 23:55)   письмо автору
 
   для: TetRiska   (04.01.2009 в 23:49)
 

Там же всё сделано. В моём посте. Ничего не сбросится. Если сложно, могу повторить в третий раз )))

  Ответить  
 
 автор: TetRiska   (04.01.2009 в 23:59)   письмо автору
 
   для: Николай2357   (04.01.2009 в 23:55)
 

Сорри) Я глянул недоконца пост, видать Вы его отредактировали и я туда не смотрел больш)) Сейчас буду ченить думать этакое:)

  Ответить  
 
 автор: TetRiska   (05.01.2009 в 02:10)   письмо автору
 
   для: Николай2357   (04.01.2009 в 23:55)
 

Ну вот застрял:) В адресной строке по методу гет не прописывается жанр:
http://localhost/video_blog/admin/index.php?a=2

<?php
function selicted($select

if(
$select == $_GET['a=2?&jan']) 
return 
"selected"

$query mysql_query("SELECT title FROM categories GROUP BY title",$db);  
if(
mysql_num_rows($query) > 0)  
{  
echo  
" <form id='select1' methog='get'>  
    <select onchange=\"document.getElementById('select1').submit()\" name='jan'>"
;  
    while (list(
$title) = mysql_fetch_row($query))  
    {  
    echo 
" <option ".selicted($title)." value='".$title."' >".$title."</option> "
    }  
echo 
"</select>
  </form>"
;  
}  
?>

Тобишь после выбора должно получиться так:
http://localhost/video_blog/admin/index.php?a=2&jan=Драма Ну или вместо словесного Драма ставить числовое значение.

  Ответить  
 
 автор: Николай2357   (05.01.2009 в 08:01)   письмо автору
 
   для: TetRiska   (05.01.2009 в 02:10)
 

Ну вот, застдял. Теперь придётся ждать, пока он похудеет. Неделю, не меньше! )))
<?php 
function selicted($select)  
{  
if(
$select == $_POST['jan'])  
return 
"selected";  
}  
$res  mysql_query("SELECT title FROM categories GROUP BY title",$db); 
if(
mysql_num_rows($res) > 0)   
{   
echo  
" <form  action='?a=".$_GET['a']."' id='select1' method='post'>   
    <select onchange=\"document.getElementById('select1').submit()\" name='jan'>"
;   
    while (list(
$title) = mysql_fetch_row($res))    
    echo 
" <option ".selicted($title)." value='".$title."' >".$title."</option> ";    
echo 
"</select> 
  </form>"
;   
}   
?>

  Ответить  
 
 автор: TetRiska   (05.01.2009 в 15:29)   письмо автору
 
   для: Николай2357   (05.01.2009 в 08:01)
 

)))) Вопрос, в адресной строке должно передаваться параметр jan=....? У меня при смене жанра в адресной строке нечего не изменяется..Или из-за того, что методом пост отправляем невидно? Отловить же можно будет который жанр выбран?

  Ответить  
 
 автор: Николай2357   (05.01.2009 в 15:45)   письмо автору
 
   для: TetRiska   (05.01.2009 в 15:29)
 

Да, это проще, так как не нужно кодировать кирилицу. "Отловить" оч. просто, нужно принимать не GET['jan'], а POST['jan'].

  Ответить  
 
 автор: TetRiska   (05.01.2009 в 15:55)   письмо автору
 
   для: Николай2357   (05.01.2009 в 15:45)
 

А если по методу гет передавать, можно ж в запросе указать еще ИД и потом указать в value='$id', а перед этим list($id,$title)...То будет передаваться не кириллический параметр, а номер строки, что более луче, т.к. потом мне не надо будет ее определять по title, чтобы узнать какие фильмы относятся к этому жанру. Тоесть в списке должны отображаться к примеру Драма (ее номер 2), а в строке jan=2..Ловим эту двойку и узнаем из другой таблицы все фильмы принадлежащие двойке (Драме)..Как такой вариант? Остается, чтобы параметр передавался в адресной строке.

  Ответить  
 
 автор: Николай2357   (05.01.2009 в 16:26)   письмо автору
 
   для: TetRiska   (05.01.2009 в 15:55)
 

Разницы что передавать и как особой нет. Это зависит от логики приложения. по номерам конечно предпочтительней, чем по строкам. А пост интереснее в данном случае потому, что этого не будет видно в адресной строке. Ни кто не мешает передать id из формы методом POST. Вот если по ссылке, тогда другое дело. Но и тогда мне кажется все таки лучше использовать оба массива, как я написал:
<form  action='?a=".$_GET['a']."' id='select1' method='post'>

а дальше:
<?
echo " <option ".selicted($id)." value='".$id."' >".$title."</option> ";

  Ответить  
 
 автор: Trianon   (05.01.2009 в 17:49)   письмо автору
 
   для: Николай2357   (05.01.2009 в 15:45)
 

>> Вопрос, в адресной строке должно передаваться параметр jan=....
>Да, это проще, так как не нужно кодировать кирилицу. "Отловить" оч. просто, нужно принимать не GET['jan'], а POST['jan'].

Это не так. Массив при методе POST определяется местом размещения параметра (среди URI или в параметрах формы)

  Ответить  
 
 автор: Николай2357   (05.01.2009 в 17:59)   письмо автору
 
   для: Trianon   (05.01.2009 в 17:49)
 

Тут вопрос стоял именно в методах передачи формы. Сайт автора давно кочует по форуму, и в предыдущих версиях он использовал в формах GET. Я опять увлекся и забыл, что не только он читает этот топик...

  Ответить  
 
 автор: TetRiska   (05.01.2009 в 20:21)   письмо автору
 
   для: Николай2357   (05.01.2009 в 17:59)
 

<?php
if (isset($_POST['jan']))   { $jan $_POST['jan']; }
$query mysql_query("SELECT * FROM data WHERE jan='$jan'",$db); 
//формируем второй список
?>


так я понял словить значение первого списка и подставить его в запрос для формирования второго?

  Ответить  
 
 автор: Николай2357   (05.01.2009 в 20:26)   письмо автору
 
   для: TetRiska   (05.01.2009 в 20:21)
 

Да, только подстраховаться никогда не помешает:
<?
$jan 
= isset($_POST['jan']))?mysql_escape_string($_POST['jan']):null;

  Ответить  
 
 автор: TetRiska   (05.01.2009 в 20:56)   письмо автору
 
   для: Николай2357   (05.01.2009 в 20:26)
 

Формирование второго списка я пологаю таким же принципом. Вот сделал, но не вышло сформировать второй список.

<?php
$jan 
= isset($_POST['jan'])?mysql_escape_string($_POST['jan']):null
function 
selicte($select)  
{  
if(
$select == $_POST['film'])  
return 
"selected";  
}  
$res2  mysql_query("SELECT title FROM data WHERE jan='$jan",$db); 
if(
mysql_num_rows($res2) > 0)   
{   
echo  
" <form  action='?a=".$_GET['a']."' id='select2' method='post'>   
    <select onchange=\"document.getElementById('select2').submit()\" name='film'>"
;   
    while (list(
$title) = mysql_fetch_row($res2))    
    echo 
" <option ".selicte($title)." value='".$title."' >".$title."&nbsp;&nbsp;</option> ";  
echo 
"</select> 
  </form>"
;   
}   
?>

При выборе жанра должен загружаться данными второй список? Где я ошибся?

  Ответить  
 
 автор: Николай2357   (05.01.2009 в 21:01)   письмо автору
 
   для: TetRiska   (05.01.2009 в 20:56)
 

Ошиблись Вы в том, что не сделали диагностику запросов при отладке скрипта. Запрос у вас с ошибкой, но этого Вы никогда не узнаете, пока не будете пользоваться подобной конструкцией:
<?
$res2  
mysql_query("SELECT title FROM data WHERE jan='$jan",$db) or die ('Error: ' mysql_error());

Кроме того, я не совсем понял логики, но если у Вас отдельная форма на каждый селект, Вы POST данные (ровно как и GET) получите только из одной формы, которую отправляете в данный момент.

  Ответить  
 
 автор: TetRiska   (06.01.2009 в 00:37)   письмо автору
 
   для: Николай2357   (05.01.2009 в 21:01)
 

Огромное спасибо, вопрос снят:)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования