|
 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>
|
Во втором должны отобразится все фильмы принадлежащие этой категории.
И как после выбора из всех списков загрузить поля?? Я полагаю что луче делать без перезгрузки страницы, лишнее... Не знал что такая мелочь заведет меня в тупик, программно легко бы такое реализовал)) жду с нетерпением помощи, привелико благодарен буду :) Вот еще приложу файл для наглядности. | |
|
|
|
|
|
|
|
для: TetRiska
(04.01.2009 в 21:30)
| | Ммдя... А что имеется ввиду под "загрузить поля"? | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2009 в 21:40)
| | Выбрали в списке№1 категорию, выбрали во втором списке№2 фильм, ниже идут поля: дата выхода фильма, размер и тд..., так вот после выбора фильма в эти поля загружаются его данные, чтобы потом отредактировать и отправить в базу | |
|
|
|
|
|
|
|
для: TetRiska
(04.01.2009 в 21:50)
| | Ну если без перезагрузки, то нужно юзать аякс. А так как непонятно, какой список будет выбран последним, то нужен либо хитрый обработчик на JS, или кнопка "загрузить". Включать аякс кнопкой - затея по меньшей мере глуповатая. Так что либо нужно довольно серьёзно поработать над этим, либо делать с перезагрузкой, той же кнопкой. В этом то проблемы я думаю не будет? | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2009 в 21:57)
| | Пожалуй с перезагрузкой, с аяксом еще не встречался и времени на изучение покамисть нет. Как я понял самый простой вариант это сделать кнопку и по клику на нее загружать список второй и поля? Более сложный это автоматическая загрузка второго списка после выбора в первом (тут нужен обработчик который бы различал в котором списке был сделан выбор) ? Пойдем от простого - кнопки.
Значит так:
<input class='sub_com2' onclick='...' type='submit' value='Загрузить фильмы' />
|
На событие onclick вешаю функцию которая бы загружала фильмы с перезагрузкой страницы? Если чтото я не так понял прошу разъясните. | |
|
|
|
|
|
|
|
для: TetRiska
(04.01.2009 в 22:34)
| | В аяксе ничего сложного нет. Просто если Вы выводите списки по очереди, то кнопка в принципе не нужна. Как обойтись без нё я Вам уже как то писал. Я не совсем уловил алгоритм выбора. Вот как я понял:
1. Выводится 1-й спиисок.
2. В зависимости от выбора значения первого селекта выводится второй
3. В зависимости от выбора значения 2-го селекта выводится информация для редактирования.
Правильно, или я не так понял? | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2009 в 22:55)
| | Да Вы правильно поняли:
3. В зависимости от выбора значения 2-го селекта выводится информация для редактирования. (инфа выводится в поля) | |
|
|
|
|
|
|
|
для: TetRiska
(04.01.2009 в 23:03)
| | Ну вот это же Ваш пост... Организуйте вывод селектов по тому же принципу и будет незаметно даже, что что то перезагружается... Если графики на странице не много. | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2009 в 23:11)
| | Хмм нада попробывать..Но всегда после перезагрузки сбрасывается выбранное значение в предыдущем списке :( Выберу к примеру Мелодрама - загрузится второй список и в первом значение станет Боевик.. Как избежать этого? | |
|
|
|
|
|
|
|
для: TetRiska
(04.01.2009 в 23:49)
| | Там же всё сделано. В моём посте. Ничего не сбросится. Если сложно, могу повторить в третий раз ))) | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2009 в 23:55)
| | Сорри) Я глянул недоконца пост, видать Вы его отредактировали и я туда не смотрел больш)) Сейчас буду ченить думать этакое:) | |
|
|
|
|
|
|
|
для: Николай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=Драма Ну или вместо словесного Драма ставить числовое значение. | |
|
|
|
|
|
|
|
для: 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>";
}
?>
|
| |
|
|
|
|
|
|
|
для: Николай2357
(05.01.2009 в 08:01)
| | )))) Вопрос, в адресной строке должно передаваться параметр jan=....? У меня при смене жанра в адресной строке нечего не изменяется..Или из-за того, что методом пост отправляем невидно? Отловить же можно будет который жанр выбран? | |
|
|
|
|
|
|
|
для: TetRiska
(05.01.2009 в 15:29)
| | Да, это проще, так как не нужно кодировать кирилицу. "Отловить" оч. просто, нужно принимать не GET['jan'], а POST['jan']. | |
|
|
|
|
|
|
|
для: Николай2357
(05.01.2009 в 15:45)
| | А если по методу гет передавать, можно ж в запросе указать еще ИД и потом указать в value='$id', а перед этим list($id,$title)...То будет передаваться не кириллический параметр, а номер строки, что более луче, т.к. потом мне не надо будет ее определять по title, чтобы узнать какие фильмы относятся к этому жанру. Тоесть в списке должны отображаться к примеру Драма (ее номер 2), а в строке jan=2..Ловим эту двойку и узнаем из другой таблицы все фильмы принадлежащие двойке (Драме)..Как такой вариант? Остается, чтобы параметр передавался в адресной строке. | |
|
|
|
|
|
|
|
для: 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> ";
|
| |
|
|
|
|
|
|
|
для: Николай2357
(05.01.2009 в 15:45)
| | >> Вопрос, в адресной строке должно передаваться параметр jan=....
>Да, это проще, так как не нужно кодировать кирилицу. "Отловить" оч. просто, нужно принимать не GET['jan'], а POST['jan'].
Это не так. Массив при методе POST определяется местом размещения параметра (среди URI или в параметрах формы) | |
|
|
|
|
|
|
|
для: Trianon
(05.01.2009 в 17:49)
| | Тут вопрос стоял именно в методах передачи формы. Сайт автора давно кочует по форуму, и в предыдущих версиях он использовал в формах GET. Я опять увлекся и забыл, что не только он читает этот топик... | |
|
|
|
|
|
|
|
для: Николай2357
(05.01.2009 в 17:59)
| |
<?php
if (isset($_POST['jan'])) { $jan = $_POST['jan']; }
$query = mysql_query("SELECT * FROM data WHERE jan='$jan'",$db);
//формируем второй список
?>
|
так я понял словить значение первого списка и подставить его в запрос для формирования второго? | |
|
|
|
|
|
|
|
для: TetRiska
(05.01.2009 в 20:21)
| | Да, только подстраховаться никогда не помешает:
<?
$jan = isset($_POST['jan']))?mysql_escape_string($_POST['jan']):null;
|
| |
|
|
|
|
|
|
|
для: Николай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." </option> ";
echo "</select>
</form>";
}
?>
|
При выборе жанра должен загружаться данными второй список? Где я ошибся? | |
|
|
|
|
|
|
|
для: TetRiska
(05.01.2009 в 20:56)
| | Ошиблись Вы в том, что не сделали диагностику запросов при отладке скрипта. Запрос у вас с ошибкой, но этого Вы никогда не узнаете, пока не будете пользоваться подобной конструкцией:
<?
$res2 = mysql_query("SELECT title FROM data WHERE jan='$jan",$db) or die ('Error: ' . mysql_error());
|
Кроме того, я не совсем понял логики, но если у Вас отдельная форма на каждый селект, Вы POST данные (ровно как и GET) получите только из одной формы, которую отправляете в данный момент. | |
|
|
|
|
|
|
|
для: Николай2357
(05.01.2009 в 21:01)
| | Огромное спасибо, вопрос снят:) | |
|
|
|