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

Форум PHP

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

 

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

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

тема: Как выделить искомое слово в тексте?
 
 автор: Ramzero   (20.09.2008 в 04:54)   письмо автору
 
 

Подскажите пожалуйста как в данном поиске подсветить искомое слово? Было бы замечательно, если бы Вы просто вставили нужный фрагмент кода в приведенный ниже.
Для меня, как для архитектора этот поиск дался с такими неимоверными усилиями, как Вам программистам дался бы проект тогрового центра на 1000 квадратов:)))


<?php
}
else
{
$text = substr($HTTP_POST_VARS["text"],0,1024);
$text = htmlspecialchars(stripslashes($text));
$text = str_replace("\n"," ",$text);
$text = str_replace("\r"," ",$text);
if (!get_magic_quotes_gpc())
$text = mysql_escape_string($text);

echo "</td></tr><tr><td>";

$query = "SELECT * FROM news
WHERE (body like lower('%%$text%%')) OR (name like lower('%%$text%%'))
ORDER BY putdate DESC";

$search = mysql_query($query);
if(mysql_num_rows($search) == 0) print ("<br>Ничего не найдено. Попробуйте использовать другие ключевые слова.");
if(mysql_num_rows($search) > 0) print ("Искомое слово <b>\"$text\"</b> встречается в следующих статьях:<br><br>");
{
while($news = mysql_fetch_array($search))
{
echo "<h3><b><font color=#A4D13A>".$news['name']."</font></b></h3>";
$pos = strpos(substr($news['body'],$numchar), " ");
if(strlen($news['body'])>$numchar) $srttmpend = "...";
else $strtmpend = "";
echo "<h3><small><p align=justify>".substr($news['body'], 0, $numchar+$pos).$srttmpend;
echo "</p><a href=news.php?id_news=".$news['id_news']."></h3><h2><i>
<p align=right><font color=#A4D13A>подробнее</font></i></h2></a></p>";

}
}
}
?>

Заранее благодарю.

  Ответить  
 
 автор: xx77   (20.09.2008 в 21:30)   письмо автору
 
   для: Ramzero   (20.09.2008 в 04:54)
 

>> Вам программистам дался бы проект тогрового центра

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

Как изучаещему программирование, мне, не понятно нескко моментов , в вашем коде
например
<?
if(mysql_num_rows($search) > 0) print ("Искомое слово <b>\"$text\"</b>
 встречается в следующих статьях:<br><br>"
);
{
while(........

здесь если num_rows > 0 просто выполняется print
, а выполняется-ли код в последующем блоке огранниченном {} - скобками ?

ещё непонятно то как написан запрос
SELECT * FROM news 
WHERE (body like lower('%%$text%%')) OR (name like lower('%%$text%%'))
ORDER BY putdate DESC

в нём %%$text%% с каким-то умыслом записано не в таком %$text% виде , как вроде-бы должно быть ?

и статьи в базе данных хранятся в виде htm , или чистейший текст ?

а так подсвечивается слово например тегами <font> или при помощи стилей
, если слово вообще попадёт в обрезок статьи отрезанный с помощью substr($news['body'], 0, $numchar+$pos)
. Но слово или часть слова или вообще например строка из пробелов , которую можно искать при помощи этого )
находится внутри тега html , то лучше не подсвечивать.
я так думаю

  Ответить  
 
 автор: Ramzero   (22.09.2008 в 01:28)   письмо автору
 
   для: xx77   (20.09.2008 в 21:30)
 

Спасибо за консультацию, обязательно учту ошибки, между тем, скрипт работает. Ужель настолько эти ошибки серьезны, что скрипт не должен был работать? В таком случае мы наблюдаем ЧУДО:)))

  Ответить  
 
 автор: Николай2357   (21.09.2008 в 01:57)   письмо автору
 
   для: Ramzero   (20.09.2008 в 04:54)
 

Только что сделал такую же штуку, может подойдет. Выдернул из своего контекста, не ручаюсь, что заработает сразу, но код точно рабочий.
<?php
include_once("db_connect.php");

    if(isset(
$_POST['keyword']))$poisk $_POST['keyword']; else $poisk null
    if(isset(
$_POST['sel_search']))$select $_POST['sel_search']; else $select null;

if(isset(
$_GET['page'])){
$page=$_GET['page'];
    }elseif(isset(
$_POST['keyword'])){
$page="keyword";
}else{    
 
$page=null;
}
    
switch(
$page) {
  case 
"keyword"$result=search($poisk,$select);$search=form_search();break; 
  case 
"info"$search=form_search();$result=info_show();break;
  default: 
$search=form_search();$result=info_show();
}    

// Вывод информации страницы    
function info_show()
{
$result "<h1>Бла бла Главная страница</h1>";//file_get_contents("main.tpl");
return $result;
}
// Поисковик. 
function search($poisk,$select)
{
$num 10;

    if( 
$poisk  && $poisk !==" ") {
setlocale(LC_CTYPE"ru_RU.CP1251"); 
$poisk strtolower($poisk); 
$poisk_db mysql_escape_string($poisk);
          
    if( 
$select == ){
$select "`name` LIKE '%".$poisk_db."%'";
$poisk " "
    }else{
$select "`body` LIKE '%".$poisk_db."%'"
}

$query mysql_query("SELECT * FROM `news` WHERE  ".$select." ORDER BY putdate DESC")
                    or die (
'Error: 1' mysql_error());
                    
$count mysql_num_rows($query);
 if(
$count){                         
    for( 
$i 0$i $count$i++ ) 
{
$name=mysql_result($query$i,'name');
$cont mysql_result($query$i,'body');
$contn strtolower($cont);     
$pos strpos($contn,$poisk); 
$len strlen($poisk);
$posend $pos+$len;
$resfor substr($cont,0,$pos);
$poisklen substr($cont,$pos,$len);
$resend substr($cont,$posend);
$result .= "<div class=result ><h3>".$name."</h3>".$resfor."<span style='background-color:#FFCCFF;color:#0000FF'><b>".$poisklen."</b></span>".$resend."</div>";
}                  
}else{
$result "<h4>К сожалению ничего не найдено</h4>";
}
return 
$result;
}
}

// Форма поисковика
function form_search()
{
$result="
<form action=index.php method=post >Напишите ключевые слова (например: <b>бла бла бла</b>)<br>
<input size=54 name=keyword  type=text> 
<input   type=submit  value=Найти>&nbsp;&nbsp;&nbsp;&nbsp; 
Искать: 
<label id=sel1  onMouseOver=\"document.getElementById('sel1').style.color='#0000ff'\" onMouseOut=\"document.getElementById('sel1').style.color='#000000'\">
<input checked=checked  name=sel_search  type=radio  /> 
в содержимом </label>
&nbsp;&nbsp;&nbsp;<label id=sel2  onMouseOver=\"document.getElementById('sel2').style.color='#0000ff'\" onMouseOut=\"document.getElementById('sel2').style.color='#000000'\">
<input name=sel_search value=1 type=radio  /> 
в названиях</label>
</b><br></form>"
;
return 
$result;
}
?>
<html>
<body>
<table width=100% border=0 cellspacing=0 cellpadding=0>
  <tr>
     <td><a href='?page=info' >Главная</a><br>
<?
echo $search;
?>
    </td>
  </tr> 

  <tr>
    <td>
<?
echo $result;
?>
    </td>
  </tr>
</table>
</body>
</html>

  Ответить  
 
 автор: Ramzero   (22.09.2008 в 01:29)   письмо автору
 
   для: Николай2357   (21.09.2008 в 01:57)
 

Огромное спасибо, попытаюсь поработать с Вашим скриптом.

  Ответить  
Rambler's Top100
вверх

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