Войти

Показать полную графическую версию : Создание поисковика.


Страниц : 1 [2]

stalingrad432006
19-11-2008, 22:51
Сверстал РНР-страничку с тремя формами и одной кнопкой. В первой форме 2 объекта ( пронумерованы 1.1, 1.2 ), во второй 8 ( пронумерованы 2.1, 2.2, 2.3,...,2.8 ), в третьей 52 ( пронумерованы 3.1, 3.2, 3.3,...,3.52 ) и одна кнопка "Поиск". Примерно следующим образом выглядит:
http://pic.ipicture.ru/uploads/081119/thumbs/xV6RD5BsnP.jpg (http://ipicture.ru/Gallery/Viewfull/9308968.html)
Код набросал такой:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
</head>
<body>
<?php
$db = mysql_connect("localhost");
mysql_select_db("firstbd",$db);

$result = mysql_query("SELECT * FROM objects",$bd);
$myrow = mysql_fetch_array($result);

do
{
echo "Объект №"$myrow['такой-то']."<br/>";
echo $myrow['вот это']."<br/>";
echo $myrow['вот то']."<br/>";
echo $myrow['не это']."<br/>";
echo $myrow['не то']."<br/>";
echo $myrow['и т.д.']."<br/>";
}
while ($myrow = mysql_fetch_array($result));
?>
<div style="text-align:center"/>
<p>Для того, чтобы выбрать интересующий объект, выполните четыре следующих шага:
</p><br/><br/>
<p>1.<select size="8" cols="15" style="width: 150px; vertical-align:text-top"/>
<option value="1.1"/>1.1</option>
<option value="1.2"/>1.2</option>
</select>
2.<select size="8" cols="15" style="width: 190px; vertical-align:text-top"/>
<option value="2.1"/>2.1</option>
<option value="2.2"/>2.2</option>
<option value="2.3"/>2.3</option>
<option value="2.4"/>2.4</option>
<option value="2.5"/>2.5</option>
<option value="2.6"/>2.6</option>
<option value="2.7"/>2.7</option>
<option value="2.8"/>2.8</option>
</select>
3.<select size="8" cols="15" style="width: 150px; vertical-align:text-top"/>
<option value="3.1"/>3.1</option>
<option value="3.2"/>3.2</option>
<option value="3.3"/>3.3</option>
<option value="3.4"/>3.4</option>
<option value="3.5"/>3.5</option>
<option value="3.6"/>3.6</option>
<option value="3.7"/>3.7</option>
<option value="3.8"/>3.8</option>
<option value="3.9"/>3.9</option>
<option value="3.10"/>3.10</option>
<option value="3.11"/>3.11</option>
<option value="3.12"/>3.12</option>
<option value="3.13"/>3.13</option>
<option value="3.14"/>3.14</option>
<option value="3.15"/>3.15</option>
<option value="3.16"/>3.16</option>
<option value="3.17"/>3.17</option>
<option value="3.18"/>3.18</option>
<option value="3.19"/>3.19</option>
<option value="3.20"/>3.20</option>
<option value="3.21"/>3.21</option>
<option value="3.22"/>3.22</option>
<option value="3.23"/>3.23</option>
<option value="3.24"/>3.24</option>
<option value="3.25"/>3.25</option>
<option value="3.26"/>3.26</option>
<option value="3.27"/>3.27</option>
<option value="3.28"/>3.28</option>
<option value="3.29"/>3.29</option>
<option value="3.30"/>3.30</option>
<option value="3.31"/>3.31</option>
<option value="3.32"/>3.32</option>
<option value="3.33"/>3.33</option>
<option value="3.34"/>3.34</option>
<option value="3.35"/>3.35</option>
<option value="3.36"/>3.36</option>
<option value="3.37"/>3.37</option>
<option value="3.38"/>3.38</option>
<option value="3.39"/>3.39</option>
<option value="3.40"/>3.40</option>
<option value="3.41"/>3.41</option>
<option value="3.42"/>3.42</option>
<option value="3.43"/>3.44</option>
<option value="3.44"/>3.44</option>
<option value="3.45"/>3.45</option>
<option value="3.46"/>3.46</option>
<option value="3.47"/>3.47</option>
<option value="3.48"/>3.48</option>
<option value="3.49"/>3.49</option>
<option value="3.50"/>3.50</option>
<option value="3.51"/>3.51</option>
<option value="3.52"/>3.52</option>
</select>
</p><br/><br/>
<p>4.<input type="button" value="Поиск" onclick="Get_Logon()" style="height: 25px; width: 190px; text-align:center"/>
</p><br/><br/>
</div>
</body>
</html>

И сам вопрос: Как сделать, что бы при выборе позиций в формах и при нажатии кнопки "Поиск" код РНР обращался к серверу и т.д. Другими словами, какой код написать и на каком языке для того, что бы оживить формы и кнопку "Поиск"? Спасибо. Если что-либо некорректно назвал или не достаточно ясно произвел постановку вопроса, просьба поправить.

Coutty
20-11-2008, 04:06
stalingrad432006, так формы-то и нет! Это весь код? Потому что я смотрю - Get_Logon() вызывается, но нигде не описыватеся.
Пишите так:

<form action='script.php' method='post'>
<select name='var1nya'>...</select>
<select name='var2nya'>...</select>
<input type='text' name='nyaText' value='Для примера' />
<input type='submit' value='Поиск' />
</form>


При нажатии на кнопку submit отсылаются данные на скрипт script.php методом post.
В самом скрипте получить доступ к переменным - $_POST['var1nya'], $_POST['var2nya'], $_POST['nyaText'].

Если хотите обработать правильность заполнения формы перед отправкой, то можно добавить JavaScript'а:

<form name='formSearch' action='script.php' method='post' onsubmit='check_data()'>
<select name='var1nya'>...</select>
<select name='var2nya'>...</select>
<input type='text' name='nyaText' value='Для примера' />
<input type='submit' value='Поиск' onclick='return false;' />
</form>


В функции check_data() нужно проверить данные и выполнить что-то вроде document.getElementById('formSearch').submit();

stalingrad432006
20-11-2008, 04:57
так формы-то и нет! »
может я неправильно выразился. Я подразумевал под термином "форма" окошко со строчками, одну из которых надо обязательно выбрать ( в HTML, насколько я помню, это безобразие заключается в теги <form></form> ). Но, пока редактировал страничку сайта до минимума, который можно было бы выставить на форуме в качестве исходной, по собственной невнимательности, эти теги удалил вместе с остальным.
Смотрится комично, когда участник форума выставляет свое творенье на показ искушенной публике, декларирует наличие форм и их не указывает в коде. :biggrin:
Это весь код? »
постарался выложить минимум, который будет смотреться в браузере и не отвлекать внимание на скрипты, к вопросу неотносящиеся:

$db = mysql_connect("localhost");
mysql_select_db("firstbd",$db);
если я не ошибаюсь, это подключение к MySQL-серверу и базе данных.
.................................................................

$result = mysql_query("SELECT * FROM objects",$db);
$myrow = mysql_fetch_array($result);
это выбор объекта из таблицы и вывод как массив.
.................................................................

do
{
echo "Объект №"$myrow['такой-то']."<br/>";
echo $myrow['вот это']."<br/>";
echo $myrow['вот то']."<br/>";
echo $myrow['не это']."<br/>";
echo $myrow['не то']."<br/>";
echo $myrow['и т.д.']."<br/>";
}
while ($myrow = mysql_fetch_array($result));
это вывод объектов в цикле.
...............................................................
На понимание остального содержимого Вашего поста мне необходимо время. Дело в том, что отродясь не программировал и сразу взялся за базы данных и РНР. Тяжеловато на первых порах приходится. Но, что-то мне подсказывает, что не все потеряно в этой области для меня :). Спасибо.

Coutty
20-11-2008, 13:11
stalingrad432006, простите, вы комментируете свой код для меня? Я-то понял :) Кстати, утром, когда я писал, кода было меньше. Да и сопровождающего текста тоже. Но нед надписи "последний раз редактировалось". У меня провал?))

$myrow = mysql_fetch_array($result);

do
{
echo "Объект №"$myrow['такой-то']."<br/>";
echo $myrow['вот это']."<br/>";
echo $myrow['вот то']."<br/>";
echo $myrow['не это']."<br/>";
echo $myrow['не то']."<br/>";
echo $myrow['и т.д.']."<br/>";
}
while ($myrow = mysql_fetch_array($result));
Зачем такая странная конструкция? Можно проще:
while ($myrow = mysql_fetch_array($result))
{
echo "Объект №"$myrow['такой-то']."<br/>";
echo $myrow['вот это']."<br/>";
echo $myrow['вот то']."<br/>";
echo $myrow['не это']."<br/>";
echo $myrow['не то']."<br/>";
echo $myrow['и т.д.']."<br/>";
}

И впереди не придётся инициализировать $myrow.
Вместо mysql_fetch_array() я предпочитаю использовать mysql_fetch_assoc(). Всё равно ведь только ассоциативными элементами массива пользуетесь, так зачем и нумерованный и ассоциативный вместе делать?

<div style="text-align:center"/>
<option value="2.2"/>2.2</option>
Такие строки некорректны с точки зрения HTML (сначала почему-то тег закрывает сам себя />, а потом ещё и другим закрывается. Тот же div не может быть одиночным тегом - иначе зачем он вообще нужен?
Вообще, достаточно написать <option>2.2</option>, чтобы передавались соответствующие данные. Вот если вам надо показывать одно, а передавать другое, то используем <option value='2.2'>Мяу-мур</option>.

Далее, повторюсь: в элементах должен быть атрибут name. Т.е. <select name='var1'>... Если имя не указано, то и данные вы потом в скрипте не обработаете. После отправки формы методом post скрипт может получить значение выбранного элемента в select'e по запросу, например, echo $_POST['var1']; Т.е. если был выбран элемент 2.2, то echo выведет 2.2.


Ладно, для понимания приведу конкретный пример:

<html><head><title>Заголовок</title></head>
<body>
<?php
if ($_POST['city']) // если передаётся запрос с формы, то входим в этот блок
{
echo "Результаты поиска по городу " . $_POST['city'];
$sql = mysql_query("SELECT * FROM `table_name` WHERE `city`='" . $_POST['city'] . "'"); // Обратите внимание на правильность расстановки кавычек.
// можно использовать и такие запросы ... WHERE `city` LIKE '%" . $_POST['city'] . "%'". Тогда поиск осуществляться поиск не точного совпадения, а строк, содержащих значение.
// Но есть ограничение на минимальную длину строки в запросе LIKE. Какое именно - трудно сказать.
// Я писал поиск по прайсу, так там при запросе длиной 4 символа и меньше находилась всякая фигня.
//Даже на слово из трёх букв свой товар находился :) Хотя ничего такого в прайсе не было.
while ($result = mysql_fetch_assoc($sql))
{
echo "Улица " . $result['street'] . ", дом " . $result['home'] . "<br />"; // предполагается, что таблица имеет структуру [ id | city | street | home | и т.д. ]
}
}
// а после вывода результатов показываем форму. Если не было запроса с формы, значит просто форма будет.
?>
<form action="" method="post">
<select name="city">
<option checked="checked">Челябинск</option>
<option>Москва</option>
<option>Самара</option>
<option value="Бобруйск">Замухрыжинск</option>
</select>
<br />
<input type="submit" value="Отправить" />
</form>
</body>
</html>

Теперь комментарии по html:
- В форме стоит action="" - отправка запроса на самого себя.
- <select name="city"> будет сохранять значение в переменную city ($_POST['city').
- По умолчанию в списке выбран Челябинск.
- Если в тэге <option> не указано значение value="nya", значит передаётся содержимое тэга. Т.е. для Челябинска, Москвы и Самары будет передаваться "Челябинск", "Москва" и "Самара" соответственно. При выборе "Замухрыжинск"а скрипт получит значение переменной $_POST['city'] == "Бобруйск" (указано значение value).




© OSzone.net 2001-2012