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

Форум MySQL

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

 

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

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

тема: Что-то поиск не пашет ((
 
 автор: Alessandro   (02.03.2006 в 21:11)   письмо автору
 
 

Написал код и он не пашет вернее пашет, но не понимает параметров поиска


<title> Добавление работника в базу данных </title>
<?php
if($HTTP_SESSION_VARS['valid_user_login']!='guest')
{

if($submit)
{



/* Переменные для соединения с базой данных */
$hostname = "localhost";
$username = "root";
$password = "";
$dbName = "antikor";

/* Таблица MySQL, в которой хранятся данные */
$userstable = "rab";

/* создать соединение */
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error());


$searchtype=$_POST['searchtype'];
$searchterm=$_POST['searchterm'];
$searchterm=trim($searchtype);

/*Может здесь что ни так ?*/

$query= "SELECT * from $userstable where '.$searchtype.' = '.$searchterm.'";
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());

/* Как много нашлось таких */
$number = mysql_num_rows($res);

/* Напечатать всех в красивом виде*/
if ($number == 0) {
echo "<CENTER><P>Поиск не дал результата</CENTER>";
} else {
echo "<CENTER><P>Всего найдено: $number<BR><BR>";
/* Получать по одной строке из таблицы в массив $row, пока строки не кончатся */
while ($row=mysql_fetch_array($res)) {
echo "Фамилия ".$row['familiya'];
echo '</p>';
echo "Имя : ".$row['imya'];
echo '</p>';
echo "Объект : ".$row['name'];
echo "<BR><BR>";
}
echo "</CENTER>";
}

}

if(empty($submit))
{
?>
<form method="post" action="<?php echo $PHP_SELF?>?razd=search&sub_razd=s_rab">


Выберите тип поиска : </br>
<select name ="searchtype">
<option value ="familiya">По фамилии</option>
<option value ="name">По объекту</option>
</select>
<br />
Введите информацию для поиска : <br />
<input name="searchterm" type="text">
<br />
<center>
<input type="Submit" name="submit" value="Найти"></center>
</form>
<?php
}
}
else
{
?>
<p>Этот раздел доступен только зарегистрированным пользователям.
Если вы уже зарегистрированны, необходимо воспользоваться <a href=<?php $PHP_SELF?>?razd=user&sub_razd=enter>авторизацией</a>!!!</p>
<?php
}
?>

   
 
 автор: elenaki   (02.03.2006 в 21:14)   письмо автору
 
   для: Alessandro   (02.03.2006 в 21:11)
 

$searchtype=$_POST['searchtype'];
$searchterm=$_POST['searchterm'];
$searchterm=trim($searchtype);


последняя строчка мне не нравится. может, надо $searchterm=trim($searchterm);?

   
 
 автор: Alessandro   (02.03.2006 в 22:04)   письмо автору
 
   для: elenaki   (02.03.2006 в 21:14)
 

>$searchtype=$_POST['searchtype'];
>$searchterm=$_POST['searchterm'];
>$searchterm=trim($searchtype);
>
>
>последняя строчка мне не нравится. может, надо
>$searchterm=trim($searchterm);?

да вы правы здесь ошибка в коде я ее изменил как вы посоветовали теперь всегда выдает поиск не дал резутьтатов. Что за ерунда ?

   
 
 автор: Trianon   (02.03.2006 в 21:28)   письмо автору
 
   для: Alessandro   (02.03.2006 в 21:11)
 

Нужно убрать все четыре точки из выделенной жирным строки. В строке с двойными кавычками они явно лишние.
$query= "SELECT * from $userstable where '$searchtype' = '$searchterm'";


Хотя, может быть лучше как раз не убирать точки, а добавить недостающие двойные кавычки
$query= "SELECT * from $userstable where '". $searchtype . "' = '" . $searchterm . "'";

После чего можно будет заэкранировать кавычки во вводимых полях:
$query= "SELECT * from $userstable where '"
. mysql_escape_string($searchtype) . "' = '" . mysql_escape_string($searchterm) . "'";

   
 
 автор: Alessandro   (02.03.2006 в 21:54)   письмо автору
 
   для: Trianon   (02.03.2006 в 21:28)
 

Пробывал все 3 варианта не работает, вернее работает только не так - ему вообще все равон какие я параметры поиска задаю он мне всегда выводит одно и тоже. Может как-то не так я задаю эти переменные - $searchtype $searchterm, и поэтому он не понимает их ?

   
 
 автор: elenaki   (02.03.2006 в 22:07)   письмо автору
 
   для: Alessandro   (02.03.2006 в 21:54)
 

в таких случаях полезно выводить на экран сам запрос и смотреть, что там не так. или пробовать его выполнить не через скрипт.

   
 
 автор: Alessandro   (02.03.2006 в 22:16)   письмо автору
 
   для: elenaki   (02.03.2006 в 22:07)
 

Может у кого есть код похожих поисков только желательно чтобы именно также можно было выбрать столбец по которому надо искать ну и набрать ключевое слово ?

   
 
 автор: elenaki   (03.03.2006 в 09:33)   письмо автору
 
   для: Alessandro   (02.03.2006 в 22:16)
 

я вот так строю динамический запрос. у меня в форме есть выбор из селектов, текстовых
полей, календаря и радио-кнопок. сначала проверяю, задан ли определенный параметр, потом
были ли уже условия ДО (по разному добавляется строка - с where или без него) и строю
запрос. потом обязательно вывожу его и смотрю, что получилось, даю этот запрос программе
(MySQL-Front), проверяю, что выдал скрипт и что программа. листинг в аттаче.

   
 
 автор: Trianon   (02.03.2006 в 22:14)   письмо автору
 
   для: Alessandro   (02.03.2006 в 21:54)
 

Зависит от структуры таблицы rab . Например, от того, есть ли там поля name и familiya и какого они типа?
Ошибку, которую заметила elenaki ($searchterm заполняется явно не оттуда) тоже стоит исправить. Если еще не исправили.
А еще я бы перед mysql_query($query) or die...
напечатал бы echo $query; и поглядел бы на текст запроса, чтоб зря не гадать.

Да и сам запрос жестковат... я бы написал не where name = 'pupkin' , а where name like '%pupkin%' .... Но это уже когда заработает хоть что-то...

   
 
 автор: Alessandro   (03.03.2006 в 15:57)   письмо автору
 
   для: Trianon   (02.03.2006 в 22:14)
 

Ошибка не в запросе а в том что данные которые я выбираю это фамлию и объект и ключевое слово поиска которое я ввожу они не доходят до запроса - вот эти


if(empty($submit))
{
?> 
<form method="post" action="<?php echo $PHP_SELF?>?razd=search&sub_razd=s_rab">


Выберите тип поиска : </br>
<select name ="searchtype">
<option value ="familiya">По фамилии</option> 
<option value ="name">По объекту</option>
</select>
<br />
Введите информацию для поиска : <br />
<input name="searchterm" type="text">
<br />
<center>
<input type="Submit" name="submit" value="Найти"></center>
</form>
<?php
}
}


Так как если вместо этого прописать


$searchtype=$_POST['searchtype'];
$searchterm=$_POST['searchterm'];
$searchterm=trim($searchtype);


Вот это :


$searchtype="name";
$searchterm='Алтуфьево';
$searchterm=trim($searchterm);


Т.е. принудительно написать столбец - name и ключевое слово - Алтуфьево, то поиск работает верно. Из-за чего может работать присвоение значений $searchtype, $searchterm ?

   
 
 автор: elenaki   (03.03.2006 в 16:20)   письмо автору
 
   для: Alessandro   (03.03.2006 в 15:57)
 

а если вывести на экран эти переменные перед вставкой в запрос? а если прописать
метод get и посмотреть, что передается в ссылке?

   
 
 автор: Trianon   (03.03.2006 в 16:35)   письмо автору
 
   для: Alessandro   (03.03.2006 в 15:57)
 

Когда я не уверен, что поступает на вход моего скрипта, я просто добавляю в самое начало вызов phpinfo(); Громоздко несколько, зато видны все параметры, как значения, так и имена через которые они доступны.

>Так как если вместо этого прописать
>$searchtype=$_POST['searchtype'];
>$searchterm=$_POST['searchterm'];
>$searchterm=trim($searchtype);

меж тем последнюю строку Вы так и не исправили.
$searchterm=trim($_POST['searchterm']);
$searchtype=trim($_POST['searchtype']);

   
 
 автор: Alessandro   (03.03.2006 в 17:20)   письмо автору
 
   для: Trianon   (03.03.2006 в 16:35)
 

>Когда я не уверен, что поступает на вход моего скрипта, я
>просто добавляю в самое начало вызов phpinfo(); Громоздко
>несколько, зато видны все параметры, как значения, так и
>имена через которые они доступны.
>
>>Так как если вместо этого прописать
>>$searchtype=$_POST['searchtype'];
>>$searchterm=$_POST['searchterm'];
>>$searchterm=trim($searchtype);
>
>меж тем последнюю строку Вы так и не исправили.
>$searchterm=trim($_POST['searchterm']);
>$searchtype=trim($_POST['searchtype']);

Я взял и удалил эти самые 3 строчки


>>$searchtype=$_POST['searchtype']; 
>>$searchterm=$_POST['searchterm']; 
>>$searchterm=trim($searchtype); 


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

   
Rambler's Top100
вверх

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