|
|
|
|
<FORM action="search.php" method="GET">
<INPUT type="hidden" name="page" value="gallery">
<INPUT type="hidden" name="action" value="search">
<DIV align="left" style="margin-left:2px;margin-top:10px" class="title">
<INPUT type="radio" name="gender" value="1"> Искать среди мужчин<BR>
<INPUT type="radio" name="gender_s" value="2"> Искать среди женщин<BR><INPUT type="radio" name="gender" value="" checked> Искать всех</DIV><BR>
<DIV align="left" style="margin-left:2px" class="title"><INPUT type="radio" name="family" value="1"> Не женат/Не замужем<BR>
<INPUT type="radio" name="family_s" value="2"> Женат/Замужем<BR>
<INPUT type="radio" name="family" value="" checked> Искать всех</DIV><BR>
<DIV align="left" style="margin-left:15px" class="title">От <SELECT name="age_f">
<OPTION value="16">16</OPTION><OPTION value="17">17</OPTION>
<OPTION value="18">18</OPTION><OPTION value="19">19</OPTION>
<OPTION value="20">20</OPTION><OPTION value="21">21</OPTION>
<OPTION value="22">22</OPTION><OPTION value="23">23</OPTION>
<OPTION value="24">24</OPTION></SELECT> лет</DIV>
<DIV align="center" style="margin-top:15px">
<INPUT type="submit" value="ИСКАТЬ"></DIV>>
</FORM>
|
подскажите чайнику - Как реализовать исполнение этой формы? | |
|
|
|
|
|
|
|
для: franko
(09.02.2011 в 23:12)
| | >вывод формы с условием
Требуется ли изменять саму форму или она остается статичной во время работы?
>Как реализовать исполнение этой формы?
Правильно ли я понимаю, что затруднение вызывает реализация обработчика search.php? Т.е. поиск (кстати, по чему ищем - файл, база данных)? | |
|
|
|
|
|
|
|
для: cheops
(09.02.2011 в 23:17)
| | знания заканчиваются здесь. Выводим по условию where gender = 1
<?php $result = mysql_query("SELECT login,id, avatar FROM users where gender = 1 ORDER BY login", $db);
$Row = 0;
echo"<table><tr>";
while($myrow = mysql_fetch_assoc($result))
{
echo "<td width = 100px>";
echo'<a href="page.php?id='.$myrow['id'].'"><img src="'.$myrow['avatar'].'">';
echo "<br />";
echo '<center><a href="page.php?id='.$myrow['id'].'">'.$myrow['login'].'</a></center>';
$Row ++;
echo !($Row % 3) ? '</tr><tr>' : ' ';
}
echo"</tr></table>";
?>
|
та форма пусть будет неизменной. Проблема как написать обработчик search.php | |
|
|
|
|
|
|
|
для: franko
(09.02.2011 в 23:22)
| | Нужна структура таблицы users - какие в ней поля (их тип) и что в них хранится? | |
|
|
|
|
|
|
|
для: cheops
(09.02.2011 в 23:28)
| | Структура таблицы `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL auto_increment,
`login` varchar(15) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`email` varchar(255) NOT NULL default '',
`gender` int(1) NOT NULL,
`country` int(3) NOT NULL,
`city_ru` varchar(100) NOT NULL,
`city_en` varchar(100) NOT NULL,
`b_day` int(2) NOT NULL,
`b_month` int(2) NOT NULL,
`b_year` int(4) NOT NULL,
`height` int(3) NOT NULL,
`family` int(1) NOT NULL,
`children` int(1) NOT NULL,
`education` int(1) NOT NULL,
`confession` int(2) NOT NULL,
`church` text NOT NULL,
`russian` int(1) NOT NULL,
`english` int(1) NOT NULL,
`french` int(1) NOT NULL,
`german` int(1) NOT NULL,
`spanish` int(1) NOT NULL,
`about_ru` text NOT NULL,
`about_en` text NOT NULL,
`activation` int(1) NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
`avatar` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=109 ; | |
|
|
|
|
|
|
|
для: franko
(10.02.2011 в 00:16)
| | Выпадающий список age_f с каким полем таблицы связан?
Фокус в составлении запросов к таким сложным обработчикам состоит в том, что WHERE условие формируется в несколько приемов
<?php
// Приводим значения GET-параметров к целому числу
$_GET['gender'] = intval($_GET['gender']);
$_GET['family'] = intval($_GET['family']);
// Формируем компоненты условия
$where = array();
if(!empty($_GET['gender'])) $where[] = "gender = ".$_GET['gender'];
if(!empty($_GET['family'])) $where[] = "family = ".$_GET['family'];
// Формируем WHERE-условие
if(!empty($where)) $sql = "WHERE ".implode(" AND ", $where);
else $sql = "";
// Формируем SQL-запрос
$query = "SELECT login,id, avatar
FROM users
$where
ORDER BY login";
$result = mysql_query($query, $db);
$Row = 0;
echo"<table><tr>";
while($myrow = mysql_fetch_assoc($result))
{
echo "<td width = 100px>";
echo'<a href="page.php?id='.$myrow['id'].'"><img src="'.$myrow['avatar'].'">';
echo "<br />";
echo '<center><a href="page.php?id='.$myrow['id'].'">'.$myrow['login'].'</a></center>';
$Row ++;
echo !($Row % 3) ? '</tr><tr>' : ' ';
}
echo"</tr></table>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.02.2011 в 08:49)
| | поставил. все как вы написали.
но не в зависимости, что я выбираю (возраст, пол, женат или нет) все равно выводтся все анкеты! | |
|
|
|
|
|
|
|
для: franko
(11.02.2011 в 11:39)
| | А правки из сообщения cheops (10.02.2011 в 08:38) тоже внесли? Как у вас сейчас HTML-форма выглядит? | |
|
|
|
|
|
|
|
для: cheops
(11.02.2011 в 11:50)
| | вот форма
<FORM action="search.php" method="GET">
<INPUT type="hidden" name="page" value="gallery">
<INPUT type="hidden" name="action" value="search">
<DIV align="left" style="margin-left:2px;margin-top:10px" class="title"><INPUT type="radio" name="gender" value="1"> Искать среди мужчин<BR>
<INPUT type="radio" name="gender" value="2"> Искать среди женщин<BR>
<INPUT type="radio" name="gender" value="" checked> Искать всех</DIV><BR>
<DIV align="left" style="margin-left:2px" class="title"><INPUT type="radio" name="family" value="1"> Не женат/Не замужем<BR>
<INPUT type="radio" name="family" value="2"> Женат/Замужем<BR>
<INPUT type="radio" name="family" value="" checked> Искать всех</DIV><BR>
<DIV align="left" style="margin-left:15px" class="title">От <SELECT name="age_f"><OPTION value="16">16</OPTION>
<OPTION value="17">17</OPTION><OPTION value="18">18</OPTION>
<OPTION value="19">19</OPTION><OPTION value="20">20</OPTION><OPTION value="21">21</OPTION>
<OPTION value="22">22</OPTION><OPTION value="23">23</OPTION>
<OPTION value="24">24</OPTION><OPTION value="25">25</OPTION>
<OPTION value="26">26</OPTION><OPTION value="27">27</OPTION>
<OPTION value="28">28</OPTION><OPTION value="29">29</OPTION>
<OPTION value="30">30</OPTION><OPTION value="31">31</OPTION>
<OPTION value="32">32</OPTION><OPTION value="33">33</OPTION>
<OPTION value="34">34</OPTION><OPTION value="35">35</OPTION>
<OPTION value="36">36</OPTION><OPTION value="37">37</OPTION>
<OPTION value="38">38</OPTION><OPTION value="39">39</OPTION>
<OPTION value="40">40</OPTION><OPTION value="41">41</OPTION>
<OPTION value="42">42</OPTION><OPTION value="43">43</OPTION>
<OPTION value="44">44</OPTION><OPTION value="45">45</OPTION>
<OPTION value="46">46</OPTION><OPTION value="47">47</OPTION>
<OPTION value="48">48</OPTION><OPTION value="49">49</OPTION>
<OPTION value="50">50</OPTION><OPTION value="51">51</OPTION>
<OPTION value="52">52</OPTION><OPTION value="53">53</OPTION>
<OPTION value="54">54</OPTION><OPTION value="55">55</OPTION>
<OPTION value="56">56</OPTION><OPTION value="57">57</OPTION>
<OPTION value="58">58</OPTION><OPTION value="59">59</OPTION>
<OPTION value="60">60</OPTION><OPTION value="61">61</OPTION>
<OPTION value="62">62</OPTION><OPTION value="63">63</OPTION>
<OPTION value="64">64</OPTION><OPTION value="65">65</OPTION>
<OPTION value="66">66</OPTION><OPTION value="67">67</OPTION>
<OPTION value="68">68</OPTION><OPTION value="69">69</OPTION>
<OPTION value="70">70</OPTION></SELECT> до <SELECT name="age_t"><OPTION value="16">16</OPTION><OPTION value="17">17</OPTION>
<OPTION value="18">18</OPTION><OPTION value="19">19</OPTION>
<OPTION value="20">20</OPTION><OPTION value="21">21</OPTION>
<OPTION value="22">22</OPTION><OPTION value="23">23</OPTION>
<OPTION value="24">24</OPTION><OPTION value="25">25</OPTION>
<OPTION value="26">26</OPTION><OPTION value="27">27</OPTION>
<OPTION value="28">28</OPTION><OPTION value="29">29</OPTION>
<OPTION value="30">30</OPTION><OPTION value="31">31</OPTION>
<OPTION value="32">32</OPTION><OPTION value="33">33</OPTION>
<OPTION value="34">34</OPTION><OPTION value="35">35</OPTION>
<OPTION value="36">36</OPTION><OPTION value="37">37</OPTION>
<OPTION value="38">38</OPTION><OPTION value="39">39</OPTION>
<OPTION value="40">40</OPTION><OPTION value="41">41</OPTION>
<OPTION value="42">42</OPTION><OPTION value="43">43</OPTION>
<OPTION value="44">44</OPTION><OPTION value="45">45</OPTION>
<OPTION value="46">46</OPTION><OPTION value="47">47</OPTION>
<OPTION value="48">48</OPTION><OPTION value="49">49</OPTION>
<OPTION value="50">50</OPTION><OPTION value="51">51</OPTION>
<OPTION value="52">52</OPTION><OPTION value="53">53</OPTION>
<OPTION value="54">54</OPTION><OPTION value="55">55</OPTION>
<OPTION value="56">56</OPTION><OPTION value="57">57</OPTION>
<OPTION value="58">58</OPTION><OPTION value="59">59</OPTION>
<OPTION value="60">60</OPTION><OPTION value="61">61</OPTION>
<OPTION value="62">62</OPTION><OPTION value="63">63</OPTION>
<OPTION value="64">64</OPTION><OPTION value="65">65</OPTION>
<OPTION value="66">66</OPTION><OPTION value="67">67</OPTION>
<OPTION value="68">68</OPTION><OPTION value="69">69</OPTION>
<OPTION value="70" selected>70</OPTION></SELECT> лет</DIV>
<DIV align="center" style="margin-top:15px"><INPUT type="submit" value="ИСКАТЬ"></DIV>>
</FORM>
|
| |
|
|
|
|
|
|
|
для: cheops
(11.02.2011 в 11:50)
| | и search.php
<?php
// Приводим значения GET-параметров к целому числу
$_GET['gender'] = intval($_GET['gender']);
$_GET['family'] = intval($_GET['family']);
// Формируем компоненты условия
$where = array();
if(!empty($_GET['gender'])) $where[] = "gender = ".$_GET['gender'];
if(!empty($_GET['family'])) $where[] = "family = ".$_GET['family'];
// Формируем WHERE-условие
if(!empty($where)) $sql = "WHERE ".implode(" AND ", $where);
else $sql = "";
// Формируем SQL-запрос
$query = "SELECT login,id, avatar
FROM users
$where
ORDER BY login";
$result = mysql_query($query, $db);
$Row = 0;
echo"<table><tr>";
while($myrow = mysql_fetch_assoc($result))
{
echo "<td width = 100px>";
echo'<a href="page.php?id='.$myrow['id'].'"><img src="'.$myrow['avatar'].'">';
echo "<br />";
echo '<center><a href="page.php?id='.$myrow['id'].'">'.$myrow['login'].'</a></center>';
$Row ++;
echo !($Row % 3) ? '</tr><tr>' : ' ';
}
echo"</tr></table>";
?>
|
| |
|
|
|
|
|
|
|
для: franko
(11.02.2011 в 12:10)
| | В обработчике search.php выведите еще дамп массива $_GET
<?php
echo "<pre>";
print_r($_GET);
echo "</pre>";
?>
| Что в нем? | |
|
|
|
|
|
|
|
для: cheops
(11.02.2011 в 12:15)
| | Array
(
[page] => gallery
[action] => search
[gender] => 0
[family] => 0
[age_f] => 16
[age_t] => 70
) | |
|
|
|
|
|
|
|
для: franko
(11.02.2011 в 12:20)
| | >[gender] => 0
>[family] => 0
Тогда все верно, у вас не поставлен выбор относительно пола и семейного статуса. А с возрастом мы еще правок не вносили, так как вы не сообщили с каким полем в таблице пользователей возраст связан. | |
|
|
|
|
|
|
|
для: cheops
(11.02.2011 в 13:27)
| | День рожение в этих полях
b_day` int(2) NOT NULL,
`b_month` int(2) NOT NULL,
`b_year` int(4) NOT NULL,
Семья вводится при регистрации
<tr><td>Семья </td><td><input name="family" type="radio" value="1" > Не женат/Не замужем
<input name="family" type="radio" value="2"> Женат/Замужем</td></tr>
|
Поле family - семья
Gender - пол | |
|
|
|
|
|
|
|
для: franko
(11.02.2011 в 13:53)
| | Попробуйте исправить скрипт следующим образом
<?php
// Приводим значения GET-параметров к целому числу
$_GET['gender'] = intval($_GET['gender']);
$_GET['family'] = intval($_GET['family']);
$_GET['age_f'] = intval($_GET['age_f']);
$_GET['age_t'] = intval($_GET['age_t']);
// Формируем компоненты условия
$where = array();
if(!empty($_GET['gender'])) $where[] = "gender = ".$_GET['gender'];
if(!empty($_GET['family'])) $where[] = "family = ".$_GET['family'];
if(!empty($_GET['age_f'])) $where[] = "b_year <= YEAR(NOW()) - ".$_GET['age_f'];
if(!empty($_GET['age_t'])) $where[] = "b_year >= YEAR(NOW()) - ".$_GET['age_t'];
// Формируем WHERE-условие
if(!empty($where)) $sql = "WHERE ".implode(" AND ", $where);
else $sql = "";
// Формируем SQL-запрос
$query = "SELECT login,id, avatar
FROM users
$where
ORDER BY login";
$result = mysql_query($query, $db);
$Row = 0;
echo"<table><tr>";
while($myrow = mysql_fetch_assoc($result))
{
echo "<td width = 100px>";
echo'<a href="page.php?id='.$myrow['id'].'"><img src="'.$myrow['avatar'].'">';
echo "<br />";
echo '<center><a href="page.php?id='.$myrow['id'].'">'.$myrow['login'].'</a></center>';
$Row ++;
echo !($Row % 3) ? '</tr><tr>' : ' ';
}
echo"</tr></table>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(11.02.2011 в 15:51)
| | Array
(
[page] => gallery
[action] => search
[family] => 2
[age_f] => 16
[age_t] => 70
[gender] => 0
)
также отображаются все аватары, вне зависмости от выбора | |
|
|
|
|
|
|
|
для: franko
(11.02.2011 в 21:33)
| | А пользователи младше 16 и старше 70 имеются в таблице? | |
|
|
|
|
|
|
|
для: cheops
(11.02.2011 в 23:37)
| | нет таких. все в предех 20-50 лет | |
|
|
|
|
|
|
|
для: franko
(11.02.2011 в 23:55)
| | Ну тогда все правильно - все попадают в интервал между 16 и 70, поэтому количество записей тоже, что и при обычном запросе. Чтобы пользователей выводилось меньше, нужно выбрать другой интервал возраста, чтобы часть пользователей туда не попала. | |
|
|
|
|
|
|
|
для: cheops
(12.02.2011 в 00:03)
| | разные интервалы выбираю. все равно выводятся все фотографиии | |
|
|
|
|
|
|
|
для: franko
(12.02.2011 в 00:50)
| |
<? ...
// Формируем WHERE-условие
if(!empty($where)) $sql = "WHERE ".implode(" AND ", $where);
else $sql = "";
// Формируем SQL-запрос
$query = "SELECT login,id, avatar
FROM users
[b]$where[/b]
ORDER BY login";
|
Выделенная жирным переменная при формировании текста запроса явно содержит что-то не то. | |
|
|
|
|
|
|
|
для: franko
(12.02.2011 в 00:50)
| | Да Trianon, прав, замените $where на $sql, т.е. вместо строк
<?php
// Формируем SQL-запрос
$query = "SELECT login,id, avatar
FROM users
$where
ORDER BY login";
?>
|
вставьте
<?php
// Формируем SQL-запрос
$query = "SELECT login,id, avatar
FROM users
$sql
ORDER BY login";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(12.02.2011 в 11:51)
| | Заменил.
Работает, но что интересно скрипт упорно не хочет видеть одну анкету. | |
|
|
|
|
|
|
|
для: franko
(12.02.2011 в 13:13)
| | А в ней какие значения gender, family, b_year? | |
|
|
|
|
|
|
|
для: cheops
(12.02.2011 в 13:47)
| | gender - 1
family - 1
b_year - 1997 | |
|
|
|
|
|
|
|
для: franko
(12.02.2011 в 13:54)
| | А у вас в форме 18 лет - минимум, т.е. позже 1993 года никого выбрать не удастся. | |
|
|
|
|
|
|
|
для: cheops
(12.02.2011 в 14:51)
| | а куда бы в этом коде прописать фразу "Ничего не найдено" в случае если ни подному условию никто не найден? | |
|
|
|
|
|
|
|
для: franko
(18.02.2011 в 15:51)
| | Замените строки
<?php
echo"<table><tr>";
while($myrow = mysql_fetch_assoc($result))
{
echo "<td width = 100px>";
echo'<a href="page.php?id='.$myrow['id'].'"><img src="'.$myrow['avatar'].'">';
echo "<br />";
echo '<center><a href="page.php?id='.$myrow['id'].'">'.$myrow['login'].'</a></center>';
$Row ++;
echo !($Row % 3) ? '</tr><tr>' : ' ';
}
echo"</tr></table>";
?>
|
на
<?php
if(mysql_num_rows($result))
{
echo"<table><tr>";
while($myrow = mysql_fetch_assoc($result))
{
echo "<td width = 100px>";
echo'<a href="page.php?id='.$myrow['id'].'"><img src="'.$myrow['avatar'].'">';
echo "<br />";
echo '<center><a href="page.php?id='.$myrow['id'].'">'.$myrow['login'].'</a></center>';
$Row ++;
echo !($Row % 3) ? '</tr><tr>' : ' ';
}
echo"</tr></table>";
}
else
{
echo "К сожалению, ничего не найдено";
}
?>
|
| |
|
|
|
|
12 Кб |
|
|
для: cheops
(19.02.2011 в 10:23)
| |
<h2>Женщины</h2>
$result = mysql_query("SELECT login, id, avatar FROM users where gender = 2 ORDER BY login", $db);
$Row = 0;
echo"<table><tr>";
while($myrow = mysql_fetch_assoc($result))
{
echo "<td width = 120 px>";
echo'<a href="page.php?id='.$myrow['id'].'"><img src="'.$myrow['avatar'].'">';
echo "<br />";
echo '<center><a href="page.php?id='.$myrow['id'].'">'.$myrow['login'].'</a></center>';
$Row ++;
echo !($Row % 3) ? '</tr><tr>' : ' ';
}
</p>
HERE;
|
Ошибка Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in... on line 151
151 строка - echo '<center><a href="page.php?id='.$myrow['id'].'">'.$myrow['login'].'</a></center>'; | |
|
|
|
|
|
|
|
для: franko
(09.02.2011 в 23:12)
| |
<INPUT type="radio" name="gender" value="1"> Искать среди мужчин<BR>
<INPUT type="radio" name="gender_s" value="2"> Искать среди женщин<BR>
|
Переключатели из одной группы должны иметь одинаковое название, т.е. либо gender, либо gender_s, аналогично, и в группе
<INPUT type="radio" name="family_s" value="2"> Женат/Замужем<BR>
<INPUT type="radio" name="family" value="" checked> Искать всех</DIV><BR>
|
| |
|
|
|