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

Форум PHP

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

 

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

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

тема: Поиск в определенных разделах
 
 автор: F@!nT   (02.01.2006 в 16:02)   письмо автору
 
 

Все было бы легко, если бы разделы не были бы динамическими. Название разделов и т.д. берутся из базы MySQL.

<?
...
case (
"0"):
echo 
"<form action=$str?search=1 method=post>";
echo 
"Что ищем: <input type=text name=what maxlength=150>";
echo 
"<br><input type=submit value=Гоу!>";
echo<<<HTML
<script language='javascript'>

function show_block() {

if(document.getElementById('show').style.display == 'block') {
document.getElementById('show').style.display = 'none';
}
else {
document.getElementById('show').style.display = 'block';
}
}
</script>
HTML;
echo 
"<br><a onClick='show_block()' style='color:blue;cursor:hand'>Дополнительно</a><br><br>";

echo 
"<div id=show style='display:none'>";
$a=mysql_query("SELECT * FROM classes");
echo 
"Искать в:<br>";
$i=0;
while(++
$i<=mysql_num_rows($a)) {
        
$b=mysql_fetch_array($a);

                echo 
"<input name=hy_$i type=checkbox value=$b[level]>$b[showname]";
                echo 
"<input type=hidden name=howmany value=$i>";
        }
echo 
"</div>";
echo 
"</form>";
break;
case(
"1"):
$howmany=$_POST['howmany'];
for(
$m=0$m<=$howmany$m++) {
        
$hy=$_POST['hy_'.$m];
 
вот здесь начинаются проблемы
       
<?
if (isset($hy)) { echo "задана"; }
        else { 
"не задана"; }
        }
$what=$_POST['what'];
if(empty(
$what)) { echo "Вы не ввели что искать!<br><a href=javascript:history.back()>Назад</a>";  exit(); }
$a=mysql_query("SELECT * FROM classes");
for(
$i=0$i<mysql_num_rows($a); $i++) {
        
$b=mysql_fetch_array($a);
        
$fnt_search mysql_query("SELECT * FROM $b[name] WHERE game LIKE '%$what%'");
if (!
$fnt_search)
{
echo 
mysql_error();
exit();
}
   else
   {
  while (
$fet=mysql_fetch_array($fnt_search))
  {
   echo 
"Найдено [".$i."]: ";
   echo 
"<br>В разделе: $b[showname]";
   echo 
"<br>Игра: <a href=index.php?mode=2&level=".$b[level].">".$fet['game']."</a>";
   }
  }
  }
...
?>

Надо сделать так. Все checkbox'ы получить, потом если хоть 1 выделена, то искать именно в этом разделе, если вообще ничего не выделено, то искать во всех.
С поиском я сделаю, но главное как получить их и проверить сколько и какие выделены.
Заранее спасибо.

   
 
 автор: cheops   (02.01.2006 в 16:17)   письмо автору
 
   для: F@!nT   (02.01.2006 в 16:02)
 

Как checkbox-ы связаны с разделами? У нас нет перед глазами структуры базы данных, поэтому нам тяжело сориентироваться в вашем коде...

   
 
 автор: F@!nT   (02.01.2006 в 16:43)   письмо автору
 
   для: cheops   (02.01.2006 в 16:17)
 


<?
echo "<br><a onClick='show_block()' style='color:blue;cursor:hand'>Дополнительно</a><br><br>";

echo 
"<div id=show style='display:none'>";
$a=mysql_query("SELECT * FROM classes");
echo 
"Искать в:<br>";
$i=0;
while(++
$i<=mysql_num_rows($a)) {
        
$b=mysql_fetch_array($a);

                echo 
"<input name=hy_$i type=checkbox value=$b[level]>$b[showname]";
                echo 
"<input type=hidden name=howmany value=$i>";
        }

так связаны checkbox'ы с разделами.
База classes:
CREATE TABLE 'classes' (
'level' int(4) NOT NULL auto_increment,
'name' varchar(254) NOT NULL default '',
'type' char(3) NOT NULL default '',
'whoip' varchar(35) NOT NULL default '',
'date' varchar(250) NOT NULL default '',
'time' varchar(250) NOT NULL default '',
'showname' text NOT NULL,
UNIQUE KEY 'level' ('level','name')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;

--
-- Дамп данных таблицы 'classes'
--

INSERT INTO 'classes' VALUES (20, 'patch', '1', '192.168.163.2', '08-11-05', '11:13', 'Аддоны');
INSERT INTO 'classes' VALUES (21, 'addon', '1', '192.168.163.2', '08-11-05', '16:50', 'Патчи');

   
 
 автор: cheops   (02.01.2006 в 22:04)   письмо автору
 
   для: F@!nT   (02.01.2006 в 16:43)
 

Всё равно не понятно какое поле относится к разделам? type?

   
 
 автор: XPraptor   (03.01.2006 в 16:09)   письмо автору
 
   для: cheops   (02.01.2006 в 22:04)
 

Да тут разницы нет с чем связаны чекбоксы. Просто перебирай массив чекбоксов и смотри что выбрано и уже там смотри как искать. При именовании чекбоксов используй массив с ид разделов и значением равным одному, тогда поиск проверять будешь так:


if(isset($arCheckName) && !empty($arCheckName)){
    //хотя бы один установлен смотрим все установленные
    foreach($arCheckName as $key=>$val){
        $id_razdela=$key;
        //а тут строй строку запроса к отмеченным разделам
    }
}else{
    //ни один чек не установлен
}

   
 
 автор: F@!nT   (06.01.2006 в 14:05)   письмо автору
 
   для: XPraptor   (03.01.2006 в 16:09)
 

Смотри, у меня здесь все верно:

<?
...
echo 
"Искать в:<br>";
for (
$i=0$i<mysql_num_rows($a); $i++) {
        
$b=mysql_fetch_array($a);

                echo 
"<input name=hy_$i type=checkbox value=$b[level]>$b[showname]";
                echo 
"<input type=hidden name=howmany value=$i>";
        }
echo 
"</div>";
echo 
"</form>";
break;
case(
"1"):
$howmany=$_POST['howmany'];
for(
$m=0$m<=$howmany$m++) {
        
$hy=$_POST['hy_'.$m];
        
$arCheckName=array($hy);
        echo 
$hy;
        }
        
print_r ($arCheckName);
...
?>

У меня там всего 2 раздела. Если я ставлю галочку на первый раздел, то выводится:
20Array ( [0] => 20 ) и рез-тат поиска.
Здесь верно. Ставлю на последний раздел, то выводится:
21Array ( [0] => 21 ).
Ставлю галочки на все разделы, то
2021Array ( [0] => 21 ).
Что здесь неверно?

   
 
 автор: cheops   (06.01.2006 в 15:40)   письмо автору
 
   для: F@!nT   (06.01.2006 в 14:05)
 

Посмотрите не пропущен ли break; в каком нибудь из case?

   
 
 автор: F@!nT   (06.01.2006 в 17:57)   письмо автору
 
   для: cheops   (06.01.2006 в 15:40)
 

точно нет :)

   
 
 автор: F@!nT   (07.01.2006 в 22:43)   письмо автору
 
   для: F@!nT   (06.01.2006 в 17:57)
 

никто не знает?

   
Rambler's Top100
вверх

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