Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (4) [1] 2 3 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Ребята, нужна помощь..., Вроде всё правильно написал, а не работает...
TurnOff  
 ۩  [x]    Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 39222
На форуме: 3 года, 1 месяц, 29 дней
Карма:




Добрый день! Есть проблемка... задачка такова:

Вывести форму, содержащую поле для ввода ключевой фразы и сопроводительный текст: «В кл. фразе Вы можете использовать специальные символы: '*' - заменяет любую комбинацию символов; '?' - заменяет один символ. Таким образом на слово 'газ*' найдется 'газ', 'газета', 'газированный' и т.д. на 'баннер?' - 'баннера', 'баннеру', но не 'баннер' и 'баннерный'»
После отправки формы необходимо осуществить поиск по таблице с единственным текстовым полем, по вышеописанному алгоритму.

Вроде бы всё правильно написал, а не работает... при переходе с html на search.php ничего не отображает... Посмотрите код, может я чего не заметил...

<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=ru">

</head>
<body>

<form
name="search" method="post" action="search.php">
<p>
В кл. фразе Вы можете использовать специальные символы: '*' - заменяет любую комбинацию символов; '?' - заменяет один символ. Таким образом на слово 'газ*' найдется 'газ', 'газета', 'газированный' и т.д. на 'баннер?' - 'баннера', 'баннеру', но не 'баннер' и 'баннерный'.</p>
<input
type="search" name="query" placeholder="Поиск">
<button
type="submit">Найти</button>
</form>

</body>
</html>



<?php

include("/db_connection.php"); // подключаемся к бд



function search ($query)
{
$query = trim($query);
$query = mysql_real_escape_string($query);
$query = htmlspecialchars($query);

if (!empty($query))
{
if (strlen($query) < 3) {
$text = '<p>Слишком короткий поисковый запрос.</p>';
} else if (strlen($query) > 128) {
$text = '<p>Слишком длинный поисковый запрос.</p>';
} else {
$q = "SELECT * FROM `words`";

$result = mysql_query($q);
while($row = mysql_fetch_array($result)){
$query = str_replace('*', '(.*)', $query);
$query = str_replace('?', '(.?)', $query);
if(preg_match('/^ '.$query.' $/', $row['name'])){
echo $row['name'];
}
}

}
}
else {
$text = '<p>Задан пустой поисковый запрос.</p>';
}

return $text;
}
?>
<?php

if (!empty($_POST['query'])) {
$search_result = search ($_POST['query']);
echo $search_result;
}
?>


Это сообщение отредактировал TurnOff - 24.03.2014 - 18:55
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3651
Пользователь №: 38635
На форуме: 3 года, 4 месяца, 27 дней
Карма: 194




твоя функция search возвращает переменную $text
Но в теле функции эта переменная у теб может иметь только 3 значения:
 $text = '<p>Слишком короткий поисковый запрос.</p>';
$text = '<p>Слишком длинный поисковый запрос.</p>';
$text = '<p>Задан пустой поисковый запрос.</p>';


Таким образом, если функция не отловила ошибку, то переменная $text, которую она возвращает, вообще не определена.


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15347
Пользователь №: 4190
На форуме: 9 лет, 3 месяца, 17 дней
Карма: 467




Дополню уже сказанное. Вот в этой строке
echo $row['name']; 

надо убрать echo и сделать вывод в переменную $text, это будет как раз логичнее, чем вывод инфы.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TurnOff  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 39222
На форуме: 3 года, 1 месяц, 29 дней
Карма:




Цитата (sergeiss @ 24.03.2014 - 20:29)
Дополню уже сказанное. Вот в этой строке
echo $row['name']; 

надо убрать echo и сделать вывод в переменную $text, это будет как раз логичнее, чем вывод инфы.

Что-то не выводит ничего, база заполнена... sad.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15347
Пользователь №: 4190
На форуме: 9 лет, 3 месяца, 17 дней
Карма: 467




TurnOff, проверяй логику, делай контрольные выводы по ходу процесса.

У тебя там слишком много "джокеров" smile.gif
Например, что содержится в переменной $query и что ты получаешь в результате различных преобразований этой переменной внутри функции? И зачем ты делаешь преобразования этой переменной внутри цикла, т.е. на каждой итерации?
Был ли вообще выполнен запрос к БД или произошла ошибка?
Что ты хочешь получить в результате работы функции preg_match()?
Как видишь - много вопросов, ответы на которые знаешь только ты.

Это сообщение отредактировал sergeiss - 24.03.2014 - 21:46


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 5 лет, 1 месяц, 19 дней
Карма: 18




<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=ru">

</head>
<body>

<form
name="search" method="post" action="search.php">
<p>
В кл. фразе Вы можете использовать специальные символы:
'*' - заменяет любую комбинацию символов;
'?' - заменяет один символ.
Таким образом на слово 'газ*' найдется 'газ', 'газета', 'газированный' и т.д.
на 'баннер?' - 'баннера', 'баннеру', но не 'баннер' и 'баннерный'.</p>
<input
type="search" name="query" placeholder="Поиск"/><br/><br/>
<input
type="checkbox" name="char" value="*"/> '*' - заменяет любую комбинацию символов;<br/><br/>
<input
type="checkbox" name="char" value="?"/> '?' - заменяет один символ.<br/><br/>
<button
type="submit">Найти</button>
</form>

</body>
</html>


<?php

function
search ($query)
{
$text = array();

$query = trim($query);
$query = mysql_real_escape_string($query);
$query = htmlspecialchars($query);

if (!empty($query))
{
if (strlen($query) < 3) {
return '<p>Слишком короткий поисковый запрос.</p>';
} else if (strlen($query) > 128) {
return '<p>Слишком длинный поисковый запрос.</p>';
} else {

if ($_POST['char'] == '*') {
$query = $query.'(.*)';
$words = array('газ', 'газета', 'газированный');
} else if ($_POST['char'] == '?') {
$query = $query.'(.?)';
$words = array('баннера', 'баннеру');
} else {
return false;
}

foreach ($words as $word) {
if(preg_match('#^'.$query.'$#isu', $word)){
$text[$_POST['char']][] = $word;
}
}


/* $q = "SELECT * FROM `words`";
$result = mysql_query($q);

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
if(preg_match('#^'.$query.'$#isu', trim($row['name']))){
$text[$_POST['char']][] = $row['name'];
}
}*/


return $text;
}
}
else {
return '<p>Задан пустой поисковый запрос.</p>';
}
}


if (!empty($_POST['query'])) {
$search_result = search ($_POST['query']);
echo '<pre>'.print_r($search_result, 1).'</pre>';
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TurnOff  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 39222
На форуме: 3 года, 1 месяц, 29 дней
Карма:




Цитата (OleKh @ 25.03.2014 - 01:36)
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=ru">

</head>
<body>

<form
name="search" method="post" action="search.php">
<p>
В кл. фразе Вы можете использовать специальные символы:
'*' - заменяет любую комбинацию символов;
'?' - заменяет один символ.
Таким образом на слово 'газ*' найдется 'газ', 'газета', 'газированный' и т.д.
на 'баннер?' - 'баннера', 'баннеру', но не 'баннер' и 'баннерный'.</p>
<input
type="search" name="query" placeholder="Поиск"/><br/><br/>
<input
type="checkbox" name="char" value="*"/> '*' - заменяет любую комбинацию символов;<br/><br/>
<input
type="checkbox" name="char" value="?"/> '?' - заменяет один символ.<br/><br/>
<button
type="submit">Найти</button>
</form>

</body>
</html>


<?php

function
search ($query)
{
$text = array();

$query = trim($query);
$query = mysql_real_escape_string($query);
$query = htmlspecialchars($query);

if (!empty($query))
{
if (strlen($query) < 3) {
return '<p>Слишком короткий поисковый запрос.</p>';
} else if (strlen($query) > 128) {
return '<p>Слишком длинный поисковый запрос.</p>';
} else {

if ($_POST['char'] == '*') {
$query = $query.'(.*)';
$words = array('газ', 'газета', 'газированный');
} else if ($_POST['char'] == '?') {
$query = $query.'(.?)';
$words = array('баннера', 'баннеру');
} else {
return false;
}

foreach ($words as $word) {
if(preg_match('#^'.$query.'$#isu', $word)){
$text[$_POST['char']][] = $word;
}
}


/* $q = "SELECT * FROM `words`";
$result = mysql_query($q);

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
if(preg_match('#^'.$query.'$#isu', trim($row['name']))){
$text[$_POST['char']][] = $row['name'];
}
}*/


return $text;
}
}
else {
return '<p>Задан пустой поисковый запрос.</p>';
}
}


if (!empty($_POST['query'])) {
$search_result = search ($_POST['query']);
echo '<pre>'.print_r($search_result, 1).'</pre>';
}

Спасибо, но я не понял... у меня получается ошибка в подключении БД и поиска по ней ?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
paul85  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1836
Пользователь №: 32147
На форуме: 5 лет, 1 месяц, 8 дней
Карма: 35




if(preg_match('/^ '.$query.' $/', $row['name']))

Вот здесь c пробелами написано? Это копи-паст?
вот так должно быть:
if(preg_match('/^' . $query . '$/', $row['name']))

Это раз... Во-вторых, по условиям задачи "?" должен означать 1 любой символ. В регулярных выражениях (.?) означает 0 или 1 символ. То есть на запрос "баннер?" не должен высвечиваться "баннер", а он будет! Поэтому:
$query = str_replace('?', '(.)', $query);

И вообще неплохо бы добавить модификатор /u, раз уж с русским работаете:
if(preg_match('/^' . $query . '$/u', $row['name']))
для UTF-8.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TurnOff  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 39222
На форуме: 3 года, 1 месяц, 29 дней
Карма:




paul85
сейчас проверю )
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TurnOff  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 39222
На форуме: 3 года, 1 месяц, 29 дней
Карма:




У меня вот такой ещё вариант есть, но тоже не работает (((


<?php

include("/db_connection.php"); // подключаемся к бд

function search ($query)
{
$query = trim($query);
$query = mysql_real_escape_string($query);
$query = htmlspecialchars($query);

if (!empty($query))
{
if (strlen($query) < 3) {
echo 'Слишком короткий поисковый запрос.';
} else if (strlen($query) > 128) {
echo 'Слишком длинный поисковый запрос.';
} else {

$query = str_replace('*', '%', $query);
$query = str_replace('?', '_', $query);
$q = "SELECT * FROM `words` WHERE `name` LIKE '$query'";
$result = mysql_query($q);
$rows = array();
while($r = mysql_fetch_array($result))
{
$rows[] = $r;
}
foreach($rows as $row){
echo $row['name'];
}

}

}
else {
echo 'Задан пустой поисковый запрос.';
}
}

?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TurnOff  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 39222
На форуме: 3 года, 1 месяц, 29 дней
Карма:




paul85
Получается вот так...

<?php

include("/db_connection.php"); // подключаемся к бд

function search ($query)
{
$query = trim($query);
$query = mysql_real_escape_string($query);
$query = htmlspecialchars($query);

if (!empty($query))
{
if (strlen($query) < 3) {
echo 'Слишком короткий поисковый запрос.';
} else if (strlen($query) > 128) {
echo 'Слишком длинный поисковый запрос.';
} else {
$q = "SELECT * FROM `words`";

$result = mysql_query($q);
while($row = mysql_fetch_array($result)){
$query = str_replace('*', '(.*)', $query);
$query = str_replace('?', '(.)', $query);
if(preg_match('/^' . $query . '$/u', $row['name'])){
echo $row['name'];
}
}

}

}
else {
echo 'Задан пустой поисковый запрос.';
}
}

?>


Ничего не выводит )))) База заполнена )
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TurnOff  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 39222
На форуме: 3 года, 1 месяц, 29 дней
Карма:




paul85
Вот база...
user posted image
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TurnOff  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 39222
На форуме: 3 года, 1 месяц, 29 дней
Карма:




paul85
Сделал запрос... вывело базу )))

$result = mysql_query("SELECT * FROM `words`");
while($row = mysql_fetch_array($result)){
echo $row['name'];
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
paul85  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1836
Пользователь №: 32147
На форуме: 5 лет, 1 месяц, 8 дней
Карма: 35




$query = str_replace('*', '(.*)', $query); 
$query = str_replace('?', '(.)', $query);

Вот это из цикла уберите... Зачем оно там!?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
paul85  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1836
Пользователь №: 32147
На форуме: 5 лет, 1 месяц, 8 дней
Карма: 35




Ну блин, я так больше вроде ничего и не вижу... Что могу посоветовать в данном случае? Проверяйте значения переменных, трассируйте код. Я бы так поступил по крайней мере. А еще второй вариант мне видится более правильным, если честно. Он тоже ВРОДЕ БЫ должен работать.

Сделайте print_r($_POST) до того как вызываете функцию. В самом начале выполнения скрипта. Чего там делается? Напишите сюда результат.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (4) [1] 2 3 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса