выборка из бд по форме

xdoc

Новичок
выборка из бд по форме

Здрасти, есть некая таблица kino_all из которой нужно сделать выборку(сортировку) строк по жанру и год как написано в форме. То есть заполняю я форму с выпадающим списком нажимаю "показать" и он выводит мне все строки из таблицы, которые совпадают с выбраными мною даными. К примеру Жанр - боевик, Год-2010 и он выводит мне все строки из таблицы где есть такие совпадения.
Проблема заключается в том, что я незнаю как правильно оформить вот этот файл view.php, который служит обработчиком в форме. Нужно что бы он обрабавал форму, перезагружал страницу и выводил новые строки.

Постарался объяснить более подробно, помогите пожалуйста.


форма по которой будет задаваться значения:

<FORM action="view.php" method=post>
<b> Выбрать жанр</b>
<select name = "genre">
<option value = "">выбрать</option>
<option value = "1">боевик</option>
<option value = "2">комедия</option>
<option value = "3">триллер</option>
<option value = "4">фантастика</option>
<option value = "5">мелодрамма</option>
</select>
<b> Выбрать год</b>
<select name = "year">
<option value = "">выбрать</option>
<option value = "1">2010</option>
<option value = "2">2011</option>
<option value = "3">2010</option>
<option value = "4">2012</option>
<option value = "5">2011</option>
</select>
<INPUT type=submit name="показать" value=" показть ">
</FORM>



Вот таблица которая выводит строки в цикле.
PHP:
<?php 
$result = mysql_query ("SELECT * FROM kino_all ORDER BY id DESC", $db);        
$myrow = mysql_fetch_array ($result);    
 
do {    
printf
("<tbody> 
   <tr style='height:26px;'>
    <td style='padding:4px;' ><a href='viewt_kino.php?id=%s'><strong>%s</strong></a></td>
    <td style='padding:4px;'>%s</td>
        <td style='padding:4px;'>%s</td>
    <td style='padding:4px;'>%s</td>
    <td style='padding:4px;'>%s</td>
        <td style='padding:4px;'>%s</td>
  </tr>
</tbody> ",
        
        $myrow["id"], $myrow["title"], $myrow["genre"], $myrow["year"], $myrow["perevod"], $myrow["date_release"], $myrow["date_insert"]);
 
}
while ($myrow = mysql_fetch_array ($result)) ;
    
?>
[sql]
# phpMyAdmin SQL Dump
# version 2.5.6
# http://www.phpmyadmin.net
#
# Хост: localhost
# Время создания: Авг 17 2010 г., 12:30
# Версия сервера: 3.23.53
# Версия PHP: 4.3.6
#
# БД : `enjoybox`
#

# --------------------------------------------------------

#
# Структура таблицы `kino_all`
#

CREATE TABLE `kino_all` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`meta_d` varchar(255) NOT NULL DEFAULT '',
`meta_k` varchar(255) NOT NULL DEFAULT '',
`title` text NOT NULL,
`genre` varchar(255) NOT NULL DEFAULT '',
`year` varchar(255) NOT NULL DEFAULT '',
`perevod` varchar(255) NOT NULL DEFAULT '',
`date_release` varchar(255) NOT NULL DEFAULT '',
`date_insert` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=13 ;

#
# Дамп данных таблицы `kino_all`
#

INSERT INTO `kino_all` VALUES (1, '', '', '2012', 'боевик', '2010', 'Русский', '20.04.2006', '14.08.2010');
INSERT INTO `kino_all` VALUES (2, '', '', 'Солт', 'комедия', '2011', 'Английский', '10.12.2004', '14.08.2011');
INSERT INTO `kino_all` VALUES (3, '', '', 'Начало', 'фантастика', '2010', 'русский', '10.10.2010', '12.10.2013');
INSERT INTO `kino_all` VALUES (4, '', '', 'Первый фильм', 'фантастика', '2012', 'английсий', '12.10.2013', '12.10.2013');
INSERT INTO `kino_all` VALUES (5, '', '', 'Второй фильм', 'боевик', '2010', 'русский', '4.11.2013', '5.10.2013');
INSERT INTO `kino_all` VALUES (6, '', '', 'Третий фильм', 'триллер', '2010', 'русский', '9.10.2011', '12.10.2013');
INSERT INTO `kino_all` VALUES (7, '', '', 'Четвёртый фильм', 'меложрамма', '2010', 'анлийский', '12.10.2010', '12.10.2013');
INSERT INTO `kino_all` VALUES (8, '', '', 'Пятый фильм', 'комедия', '2011', 'русский', '12.4.2015', '12.10.2013');
INSERT INTO `kino_all` VALUES (9, '', '', 'Шестой фильм', 'боевик', '2013', 'анлийский', '3.10.2011', '12.10.2013');
INSERT INTO `kino_all` VALUES (10, '', '', 'Седьмой фильм', 'триллер', '2010', 'русский', '12.10.2013', '12.10.2013');
INSERT INTO `kino_all` VALUES (11, '', '', 'Восьмой фильм', 'фантастика', '2012', 'анлийский', '12.4.2014', '12.10.2013');
INSERT INTO `kino_all` VALUES (12, '', '', 'Девятый фильм', 'комедия', '2010', 'анлийский', '6.11.2012', '12.10.2013');
[/sql]
 

Lakr

Новичок
Re: выборка из бд по форме

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

$result = mysql_query ("SELECT * FROM kino_all where year='$year' and genre='$genre' ", $db);
предварительно ессесна получив переменные

<?php
$year=$_POST['year'];
$genre=$_POST['genre'];
//ниже уже сам запрос к базе и тд
$result = mysql_query (...

Но до этого поправить сами опшены в селектах, что бы они не передавали 1,2,3 и тд а сами названия жанров и года, тобиш поменять на такого плана
...
<option value = "боевик">боевик</option>
...
<option value = "2010">2010</option>
...

Вот собстна как-то так, с низу вверх правда получилось =)
 

FB3

Новичок
Lakr
и, как минимум, еще не забыть про sql инъекцию
 

xdoc

Новичок
Re: Re: выборка из бд по форме

LarkСпасибо почти всё получилось, но есть одна проблема. Куда именно вписывать вот эти переменные $year=$_POST['year'];
$genre=$_POST['genre']; Я их перед началом запроса к бд написал.
И когда я перехожу на страницу kino_all мне выдаёт ошибку Notice: Undefined index: year in z:\home\localhost\www\mysite\kino_all.php on line 101. Но самое интересное когда после этого я выбераю жанр и год сортировка работает и ошибки как бы и нет :)
В форме action="" я убрал.

<?php
$year=$_POST['year']; $genre=$_POST['genre'];
$result = mysql_query ("SELECT * FROM kino_all where year='$year' and genre='$genre' ORDER BY id DESC", $db);
$myrow = mysql_fetch_array ($result);

do {
printf
("<tbody>
<tr style='height:26px;'>
<td style='padding:4px;' ><a href='viewt_kino.php?id=%s'><strong>%s</strong></a></td>
<td style='padding:4px;'>%s</td>
<td style='padding:4px;'>%s</td>
<td style='padding:4px;'>%s</td>
<td style='padding:4px;'>%s</td>
<td style='padding:4px;'>%s</td>
</tr>
</tbody> ",

$myrow["id"], $myrow["title"], $myrow["genre"], $myrow["year"], $myrow["perevod"], $myrow["date_release"], $myrow["date_insert"]);

}
while ($myrow = mysql_fetch_array ($result)) ;

?>
 

Adelf

Administrator
Команда форума
надо написать
PHP:
if(isset($_POST['year'],$_POST['genre']))
{
делать запрос в базу
}
А если их нет, то просто показывать форму.
 

Lakr

Новичок
писал писал... потомувидел пост выше =) да просто проверку поставь с начала view.php
 

xdoc

Новичок
Вот как у меня сейчас написано, если я в action впишу файл view.php то он его будет загружать, а мне нужно что бы перезагружалась страничка kino_all а в view была только обработка и проверка.

Сама форма
<FORM action="" method=post>
<b> Выбрать жанр</b>
<select name = "genre">
<option value = "0">выбрать</option>
<option value = "боевик">боевик</option>
<option value = "комедия">комедия</option>
<option value = "триллер">триллер</option>
<option value = "фантастика">фантастика</option>
<option value = "мелодрамма">мелодрамма</option>
</select>
<b> Выбрать год</b>
<select name = "year">
<option value = "0">выбрать</option>
<option value = "2010">2010</option>
<option value = "2011">2011</option>
<option value = "2012">2012</option>
<option value = "2013">2013</option>
<option value = "2014">2014</option>
</select>
<INPUT type=submit name="сортировать" value=" сортировать ">
</FORM>

Начало таблицы
<table class="title_trailers_all" border="0px" cellspacing="0" cellpadding="0">
<thead>
<tr style=" height:22px; background-image:url(img/bg_title_allkino.gif); color:#FFF; font-weight:bold;">
<th width="40%" style="text-align:left; padding:5px;"> Название</th>
<th style="padding:5px;" width="15%">Жанр</th>
<th style="padding:5px;" width="10%">Год</th>
<th style="padding:5px;" width="15%">Перевод</th>
<th style="padding:5px;" width="15%">Премьера <img src="flagru.gif" width="16" height="13" /></th>
<th style="padding:5px;" width="15%">Добавлено</th>
</tr>
</thead>

Строка таблицы, которая выводится в цикле
<?php
$year=$_POST['year'];$genre=$_POST['genre'];
$result = mysql_query ("SELECT * FROM kino_all where year='$year' and genre='$genre' ORDER BY id DESC", $db);
$myrow = mysql_fetch_array ($result);

do {
printf
("<tbody>
<tr style='height:26px;' class='allkino'>
<td style='padding:4px;' ><a href='view_kino.php?id=%s'><strong>%s</strong></a></td>
<td style='padding:4px;'>%s</td>
<td style='padding:4px;'>%s</td>
<td style='padding:4px;'>%s</td>
<td style='padding:4px;'>%s</td>
<td style='padding:4px;'>%s</td>
</tr>
</tbody> ",

$myrow["id"], $myrow["title"], $myrow["genre"], $myrow["year"], $myrow["perevod"], $myrow["date_release"], $myrow["date_insert"]);

}
while ($myrow = mysql_fetch_array ($result));



?>
 

Lakr

Новичок
кажется мы не поняли друг друга...как я понял "грубо" есть страница на ней два селекта , жанр и год, выбираем нужное тулим пимпу показать данные отправляем пхп скрипту <?php что во view.php который выбирает из базы нужное и выдаёт юзеру список.
если логика другая то опишите (без кода) детально по шагам типа :
заходим туда, видим то, выбираем то , видим то, дальше делаем тото и получаем тото.
 

xdoc

Новичок
На страницы есть форма. Жанр и Год. Ниже идёт таблица первая строка отвечает за оглавление, вторая строка выводит в цикле название фильма жанр, год и т.д. мне нужно. Мне нужно, что бы человек выбрал из формы нужный ему жанр и год нажал кнопку "показать" и ниже вывелся список тех фильмов.
Вот пример из одно сайта (надеюсь здесь можно ссылки вылаживать) http://movies.ign.com/index/trailers.html Выбераеш жанр тыкаеш - он показывает.
 

Lakr

Новичок
делай ссылку передачи формы на этот же файл где описаны селекты, ты открыл свой сайт index.php ты и делаеш такой код
<FORM action="index.php" method=post>
...
Только обязательно перед этим выяснить были ли собственно данные в переменных как было указано выше
<?php
if(isset($_POST['year'],$_POST['genre']))
{
?>
код выбора <FORM action и до пхп
<?php
делать запрос в базу и тд
}
?>
ну и else какой нужно
выглядит конечно мрачно но вроди должно работать
ну или както так...
 
Сверху