|
|
|
| Структура БД:
CREATE TABLE IF NOT EXISTS `reg_users` (
`uid` int(11) NOT NULL auto_increment,
`login` varchar(255) NOT NULL default ' ',
`name` varchar(255) NOT NULL default ' ',
`old` int(2) NOT NULL default '0',//Записывается количество полных лет (пример: 25)
`pol` int(1) NOT NULL default '0',//1-М;2-Ж
`last` varchar(255) NOT NULL default ' ',//time()
`id` int(11) NOT NULL,//Значение=1
PRIMARY KEY (`uid`)
) ;
|
Есть форма которая имеет несколько полей ввода:
<?php
echo "<form action='".$_SERVER['PHP_SELF']."?act=send' method='post> ";
echo "Ник или ID:<br/>\n";
echo "<input type='text' name='idus' maxlength='30'/><br/>";
echo "Имя:<br/>";
echo "<input type='text' name='imya'/><br/>";
echo "Первая буква ника:<br/>";
echo "<input type='text' name='words' maxlength='1'/><br/>";
echo "Пол:<br/>";
echo "<select name='sex'>";
echo "<option value='0'>-</option>";
echo "<option value='1'>М</option>";
echo "<option value='2'>Ж</option>";
echo "</select><br/>";
echo "On-Line:<br/>";
echo "<select name='online'>";
echo "<option value='0'>-</option>";
echo "<option value='1'>Нет</option>";
echo "<option value='2'>Да</option>";
echo "</select><br/>";
echo "Возраст:<br/>";
echo "От: <input type='text' name='ot' maxlength='2' /><br/>";
echo "До: <input type='text' name='do' maxlength='2' /><br/>";
echo "<input type='submit' value='Отправить'/></form>";
?>
|
Я вот таким способом сделал поиск данных по БД (логика "И")
<?php
if (!empty($_POST['act']))
{
if ($_POST['idus']!="")
{
$sql=" and (uid='".$_POST['idus']."' or login='".$_POST['idus']."')";
}
if ($_POST['imya']!="")
{
$sql=" and name='".$_POST['imya']."'";
}
if ($_POST['words']!="")
{
$sql=" and login LIKE '".$_POST['words']."%'";
}
if ($_POST['sex']!="0")
{
$sql="and pol='".$_POST['sex']."'";
}
if ($_POST['online']=="2")
{
$sql="and last>'".intval(time()-1000)."'";
}
if ($_POST['ot']!="" and $_POST['do']!="")
{
$sql="and (old between '".$_POST['ot']."' and '".$_POST['do']."')";
}
if (!empty($sql))
{
$result = mysql_query("select * from `table` where id='1' ".$sql."");
if (mysql_num_rows($result)!=0)
{
while($row=mysql_fetch_array($result))
{
echo "<a href='index.php'>".$row['login']."</a><br/>";
}
}
else
{
echo "Пользователь не найден!<br/>";
}
}
else
{
echo "Ни одно значение поиска не задано!<br/>";
}
}
?>
|
Подскажите как из этого сделать логику ("ИЛИ") | |
|
|
|
|
|
|
|
для: chexov
(28.02.2008 в 10:41)
| | Исправьте каждый фрагмент с and в начале
<?php
$sql=" and (uid='".$_POST['idus']."' or login='".$_POST['idus']."')";
?>
|
следующим образом
<?php
$sql=" $logic (uid='".$_POST['idus']."' or login='".$_POST['idus']."')";
?>
|
А переменной $logic присваивайте значение AND (И) или OR (ИЛИ) в зависимости от выбранной логики. | |
|
|
|
|
|
|
|
для: cheops
(28.02.2008 в 12:34)
| | хорошо, но к примеру, если выбрана логика ИЛИ то следовательно перед скобкой будет OR,
а если пользователь будет использовать например сразу второе поле ввода, получится:
select * from `table` where id='1' or
|
А это не верно, выводит всех пользователей, если же id=1 поставить в конец
select * from `table` or where id='1'
|
то выдает ошибку
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in...
|
| |
|
|
|
|
|
|
|
для: chexov
(28.02.2008 в 14:03)
| | Вы условия лучше вообще в массив помещайте, а потом объединяйте при помощи функции implode() в строку
<?php
$sql[] = "...";
$sql[] = "...";
$sql[] = "...";
$sql[] = "...";
$where = implode($logic, $sql);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(29.02.2008 в 01:18)
| | Не совсем понял конечно, можно пример понагляднее (на одном из условий) и как сформировать запрос?
=====================================================================
При логике ИЛИ
<?php
if (!empty($_POST['act']))
{
if ($_POST['idus']!="")
{
$sql[]="(uid='".$_POST['idus']."' or login='".$_POST['idus']."')";
}
if (!empty($sql))
{
$result = mysql_query("select * from `table` where (".implode("OR", $sql).") and id='1'");
if (mysql_num_rows($result)!=0)
{
while($row=mysql_fetch_array($result))
{
echo "<a href='index.php'>".$row['login']."</a><br/>";
}
}
else
{
echo "Пользователь не найден!<br/>";
}
}
else
{
echo "Ни одно значение поиска не задано!<br/>";
}
}
?>
|
После этого если пользователь найден, то выводит, если нет то та же самая ошибка
Если я ввожу например Логин одного пользователя и uid другого, скрипт выдает пользователь не найден.
А по идеи как: выведет 2-х , кого то одного или вообще не выведет (при логике ИЛИ)? | |
|
|
|
|
|
|
|
для: chexov
(29.02.2008 в 04:05)
| | Пробел поставьте вокруг OR, а выполнение запроса обработайте
<?php
$result = mysql_query("select * from `table` where (".implode(" OR ", $sql).") and id='1'");
if(!$result) exit(mysql_error());
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(29.02.2008 в 13:16)
| | Спасибо!!! Все отлично работает:) | |
|
|
|