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

Форум PHP

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

 

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

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

тема: Где я ошибся T?
 
 автор: helovek   (27.05.2007 в 17:07)   письмо автору
 
 

Привет Trionon! Добавил ещё один столбец. Его не найти.
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");

// восстановление строк входных параметров
function unmq($a)
{ return $a === null ? null : (get_magic_quotes_gpc() && is_string($a)
? stripslashes($a): $a); }

//подготовка параметров формы
function arg($a){ return'"'.htmlspecialchars($a).'"';}

// генерация выражения поиска
function gen_filter($a, $fld)
{
if($a == '' || $a == '**')return 1;

$d1 = array('|', '&'); $s1 = array('%', '_');
$d2 = $s1; $s2 = array('*','?');
$d3 = array('\\%', '\\_'); $s3 = $d1;

$t1 = array();
foreach(explode('|', $a) as $b) // цикл по логическим суммам
{
$t2 = array();
foreach(explode('&', $b) as $val) // цикл по термам
{ $not = '';
if($val[0] == '^') {$val = substr($val, 1); $not = 'NOT ';}
$val = str_replace($s1, $d1, $val);
$val = str_replace($s2, $d2, $val);
$val = "$not( &1 LIKE '".str_replace($s3, $d3, //
mysql_escape_string($val))."')";
$t2[] = $val;
}
$t2 = implode(" AND ", $t2); // объединение термов
$t1[] = $t2;
}
$t1 = implode(" OR ", $t1); // объединение сумм
return "( ". str_replace('&1',"$fld", $t1 ). " )"; // подстановка полей
}


// ----- начало кода -----

// загрузка строк параметров поиска
$name = unmq(@$_GET['name']);
$evid = unmq(@$_GET['evid']);
$contr= unmq(@$_GET['contr']);
$doz= unmq(@$_GET['doz']);

// вывод формы запроса
echo ("
<form action=? >
<br>Название: <input name=name value=".arg($name).">
<br>Показания: <input name=evid value=".arg($evid).">
<br>Противопоказания: <input name=contr value=".arg($contr).">
<br>Дозы:<input name=contr value=".arg($doz).">
<input type=submit value=Искать>
</form>");

// построение фильтрующих выражений
$t = array();
$t[] = gen_filter("$name", 'name');
$t[] = gen_filter("*$evid*", 'evid');
$t[] = gen_filter("*$contr*", 'contr');
$t[] = gen_filter("*$doz*", 'doz');
if($t[0] == '1' && $t[1] == '1' && $t[2] == '1') $t[0] = 0;

// сборка фильтров в запроос

$sql = "SELECT * FROM evid WHERE ". implode(" AND ", $t);

// исполнение запроса
$res = mysql_query($sql) or die("Error in $sql :". mysql_error());
$numrows = mysql_num_rows($res);

// вывод отчета

echo "$numrows rows found<br>\r\n";
for($n = 1; $row = mysql_fetch_assoc($res); $n++)
{
$name = nl2br(htmlspecialchars($row['name']));
$evid = nl2br(htmlspecialchars($row['evid']));
$contr = nl2br(htmlspecialchars($row['contr']));
$doz = nl2br(htmlspecialchars($row['doz']));
echo "<hr/><b>$n.</b> Name: <b>$name</b><br/>\r\n"
. "<br/><U><B>Показания:</B></U> <I>$evid</I><br/>\r\n"
. "<br/><U><B>Противопоказания</B></U>: <I>$contr</I><br/>\r\n"
. "<br/><U><B>Способ применения, дозы</B></U>: <I>$contr</I><br/>\r\n";
}

?>

   
 
 автор: Trianon   (27.05.2007 в 23:48)   письмо автору
 
   для: helovek   (27.05.2007 в 17:07)
 

Вы все правильно сделали.
Единственное нужно было продолжить одну строку
if($t[0] == '1' && $t[1] == '1' && $t[2] == '1'&& $t[3] == '1') $t[0] = 0;

Но она не играет большой роли, и Ваш вариант тоже должен работать.
Почему он не работает, я не знаю.

   
Rambler's Top100
вверх

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