Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2018, 17:58   #1
mychatik
 
Аватар для mychatik
 
Регистрация: 06.05.2016
Сообщений: 7
По умолчанию Переменная в регулярке.

Приветствую!
Возникла такая проблема.

На сайте имеется файл users_search.php. Он инклюдится в разных местах для поиска пользователя по нику, с заменой части (или всех) символов на *.

Код:
<?php
if (!defined("_COMMON_")) {echo "stop";exit;}
$ttt = str_replace("\\*", "([".$nick_available_chars."]+)",quotemeta($user_to_search));

$fp = fopen($user_data_file, "r");
flock($fp, LOCK_EX);
fseek($fp,0);
$ii=0;
while ($data = fgets($fp, 4096)) {
       $user = str_replace("\r", "", str_replace("\n", "", $data));
       list($t_id, $t_nickname, $t_password, $t_class, $t_canon) = explode("\t", $user);
              if (eregi($ttt, $t_nickname)) {
		$u_ids[]   = $t_id;
		$u_names[] = $t_nickname;
	}
}
flock($fp, LOCK_UN);
fclose($fp);
?>
Всё работало без проблем.
Но, после перевода сайта на PHP5.6, потребовалось заменить устаревшие eregi.
В других местах всё получилось нормально, кроме этого.

При замене по мануалу:
Код:
if (preg_match("/".$ttt."/i", $t_nickname)) {
- работает. Но не везде. Одна из форм поиска заглючивает.

Код:
  case "nagrads":
        if (!($current_user->user_class & ADM_BAN)) {
                        $error_text = $w_no_admin_rights;
                        include($file_path."designes/".$design."/error_page.php");
                        exit;
        }
     set_variable("txtCommonNick");
    $user_to_search = $txtCommonNick;
include($ld_engine_path."users_search.php");
    if (count($u_ids)) {
		$html_to_out .= '<form method="post" action="admin_work.php" target="voc_admin_work">'.
                                '<input type="hidden" name="session" value="'.$session.'">'.
                                '<input type="hidden" name="op" value="do_nagrads">'.
                                '<p>&emsp;</p>'.
                                '<h3 style="color:#265D92; text-align:center;">Подтвердите выбор:</h3>'.
                                '<p style="text-align:center; font-weight:bold;">'.$w_select_nick.':&emsp;'.
                                '<select name="txtCommonNick" style="width:200px; height:20px;">';
    for($i=0; $i<count($u_ids); $i++) {
                $html_to_out .= '<option value="'.$u_ids[$i].'">'.$u_names[$i].'</option>'; } 
		$html_to_out .= '</select>&emsp;';
		$html_to_out .= '<input type="submit" class="input_button" value="OK" style="width:69px">'.
                                '</p></form>';
                             } else {
		$html_to_out  = '<form method="post" action="admin_work.php" target="voc_admin_work">'.
                                '<input type="hidden" name="session" value="'.$session.'">'.
                                '<input type="hidden" name="op" value="nagrads">'.
                                '<p>&emsp;</p>'.
                                '<h2 style="color:#265D92; text-align:center;">Выдать награду для пользователя:</h2>'.
                                '<p style="text-align:center; font-weight:bold;">Введите ник:&emsp;'.
                                '<input type="text" name="txtCommonNick" style="width:200px; height:20px;">&emsp;'.
			        '<input type="submit" class="input_button" value="OK" style="width:69px">'.
                                '</p></form>';}
		break;
По логике, при открытии страницы должна открыться форма по условию else.
После ввода ника, или его части - открывается другая форма с выпадающим списком ников, удовлетворяющих запросу.

Именно так всё и работает с eregi. Но с preg_match условие else не срабатывает - и сразу открывается вторая форма с "портянкой" списка всей базы ников.

Я пытался ставить переменную $ttt по-разному - в разных скобочках, кавычках. Даже попробовал заменить eregi на mb_eregi.
В некоторых вариантах - именно эта форма начинала работать корректно, но при этом заглючивало поиск по *. Звёздочка начинала определяться, как символ ника, а не символ замены.

Подскажите пожалуйста, как правильно вставить переменную в новую функцию регулярки и при этом сохранить полную работоспособность форм поиска?
mychatik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ограничение по регулярке bilibian Общие вопросы Delphi 2 06.02.2015 16:07
Проблема с кодировкой в регулярке gaintbiz PHP 1 03.12.2013 15:09
Маленький вопрос по регулярке Newpitbull PHP 1 01.03.2012 23:47
ошибка в регулярке kakawkin PHP 8 10.08.2011 20:04
Как указать в регулярке............ Adamant PHP 12 25.03.2008 10:11