результат preg_match_all в MySQL запрос

Fanamura

Новичок
результат preg_match_all в MySQL запрос

есть код:
echo "<br />Совпадения:" . $mathces[0][$i] . "<br />";
Выводит то, что надо
Есть запрос:
$result = mysql_query("SELECT * FROM jos_joomleague_players WHERE lastname = " . $mathces[0][$i] . "");
тут переменная $mathces[0][$i] не возвращается, т.е. результат запроса - пустой

Как же переписать условие? Кавычки убирал, делал одинарными, не помогло.
Или где-то в другом месте накосячил?

PHP:
 preg_match_all("/(?<={end-texte}).*?(?={end-tooltip})/", $string,$mathces);
	   for ($i=0; $i< count($mathces[0]); $i++) { 
       //echo "matched: " . $mathces[0][$i] . "<br />"; 


	 print_r($mathces[$i]);

	 echo "<br />Совпадения:" . $mathces[0][$i] . "<br />";
	   	$result = mysql_query("SELECT * FROM jos_joomleague_players WHERE lastname = " . $mathces[0][$i] . "");
		$myrow=mysql_fetch_array($result);
		//echo "<br />Запрос: $myrow[0] <br />";
		str_replace("+title+", $myrow[2], $string);
		$header_name = "$myrow[2] $myrow[3]";
 много строк кода
Суть: ищем совпадения в тексте и заменяем их на результаты запросов с соответствующими параметрами (совпадение, эт ои есть параметр) Пните в нужную сторону, плиз :)
 

Gremboloid

инженера Гр...
сделай
echo "SELECT * FROM jos_joomleague_players WHERE lastname = " . $mathces[0][$i] . "";

и покажи какая у тебя строка запроса получается.
 

tf

крылья рулят
Как же переписать условие? Кавычки убирал, делал одинарными, не помогло.
и ненадо шаманить http://ru.php.net/manual/en/function.mysql-escape-string.php
и включи показ сообщений об ошибках, также в mysql_error() сообщение есть что не так с запросом
учимся отлаживать баги самостоятельно http://209.85.229.132/search?q=cache:vZX_TVmsBhUJ:www.phpfaq.ru/debug
тут переменная $mathces[0][$i] не возвращается
а она должна вернутся? возвращается результать запроса, и все
Пните в нужную сторону, плиз
http://209.85.229.132/search?q=cache:vZX_TVmsBhUJ:www.phpfaq.ru/debug#example
 

Fanamura

Новичок
PHP:
Array ( [0] => Стасенко [1] => Мосс [2] => Стасенко )
Совпадения:Стасенко
Запрос: SELECT * FROM jos_joomleague_players WHERE lastname = Стасенко
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\subdomain\plugins\content\plg_tooltips.php on line 56

Совпадения:Мосс
Запрос: SELECT * FROM jos_joomleague_players WHERE lastname = Мосс
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\subdomain\plugins\content\plg_tooltips.php on line 56

Совпадения:Стасенко
Запрос: SELECT * FROM jos_joomleague_players WHERE lastname = Стасенко
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\subdomain\plugins\content\plg_tooltips.php on line 56
Оказывается запросы то правильные, наверно))

Если в запрос подставить не $mathces[0][$i], а Мосс или Стасенко, то все работает

-~{}~ 20.08.09 11:54:

tf, Adelf
Спасибо, посмотрю :)
 

Adelf

Administrator
Команда форума
SELECT * FROM jos_joomleague_players WHERE lastname = 'Стасенко' - всегда надо брать строки в кавычки.

Если также надо посмотреть в какой кодировке у тебя данные которые ты делаешь preg_match
 

Fanamura

Новичок
Ошибка такая:
Unknown column 'Стасенко' in 'where clause'
Но ведь она есть, блин :(

-~{}~ 20.08.09 12:05:

Изменил запрос на
$result = mysql_query("SELECT * FROM jos_joomleague_players WHERE lastname = '" . $mathces[0][$i] . "'");
Ошибки пропали, но то, что получается меня смутило)))
http://floomby.ru/content/yRDLcytNj0/
т.е вместо +title+{end-title}+tooltips's text+{end-texte}Стасенко должно быть просто Стасенко)))
 

Adelf

Administrator
Команда форума
Это уже твой движок прикалывается. Из базы правильные значения выходят.
 

tf

крылья рулят
Она вроде как deprecated.
о круто, даже не смотрел) за пару лет что-то изменилось)
Unknown column 'Стасенко' in 'where clause'
ошибки переводить надо
и прочитай http://74.125.77.132/search?q=cache:tzsq_YmRlkYJ:www.phpfaq.ru/slashes

т.е вместо +title+{end-title}+tooltips's text+{end-texte}Стасенко должно быть просто Стасенко)))
ну продолжай в том духе, ответ найдеш
 

Fanamura

Новичок
Да я понял, что затупил)) Переписал, запросы стали нормально обрабатываться
PHP:
		preg_match_all("/(?<={end-texte}).*?(?={end-tooltip})/", $string,$mathces);
       for ($i=0; $i< count($mathces[0]); $i++) {  

     echo "<br />Совпадения:" . $mathces[0][$i] . "<br />"; 
	 echo "SELECT * FROM jos_joomleague_players WHERE lastname = '" . $mathces[0][$i] . "'<br />"; //Выбираем статистику для игроков
           $result = mysql_query("SELECT * FROM jos_joomleague_players WHERE lastname = '" . $mathces[0][$i] . "'"); //Выбираем статистику для игроков
        $myrow=mysql_fetch_array($result); 
        
        str_replace("+title+", $myrow[2], $string); // Заменяем данные тултипа на данные из БД
        $header_name = "$myrow[2] $myrow[3]";
		$bith = "$myrow[8]"; 
		$string = str_replace("+title+", $header_name, $string); // Заменяем данные тултипа на данные из БД
		if ($myrow[5] == "1") {
Дебаг мой выводит:
Совпадения:Стасенко
SELECT * FROM jos_joomleague_players WHERE lastname = 'Стасенко'
0:
Совпадения:Мосс
SELECT * FROM jos_joomleague_players WHERE lastname = 'Мосс'

Совпадения:Стасенко
SELECT * FROM jos_joomleague_players WHERE lastname = 'Стасенко'
0:

т.е. по идее запросы все правильные, вот только тултипы все одни, с результатом запроса #1 (Стасенко) т.е. запрос с "Мосс" игнорируется напрочь :(
Почему в дебаге все норм, а на практике попа? :( Руки кривые, да, но а еще?)) Ошибка в цикле?
http://floomby.ru/content/qr8aIRXmjE/
 

Adelf

Administrator
Команда форума
потому что, скорее всего, ты после первого же запроса заменил все +title+(или что там у тебя) на данные по Стасенко. str_replace с Моссом уже ничего не нашел.

-~{}~ 20.08.09 12:43:

http://ru2.php.net/manual/en/function.preg-replace-callback.php погляди
 

Fanamura

Новичок
Уф, тяжело.

Вот накалякал для моего случая, разумеется не работает:
PHP:
 $string = preg_replace_callback(
        '+title+',
        create_function(
            // single quotes are essential here,
            // or alternative escape all $ as \$
            '$header_name',
            'return strtolower($header_name[0]);'
        ),
        $string
    );
вместо:
PHP:
$string = str_replace("+title+", $header_name, $string);
Выводит билеберду
 

Adelf

Administrator
Команда форума
что за ужас...
preg_replace_callback позволяет обработать каждый твой случай по отдельности. Ты должен сделать функцию, в которую будут попадать все эти Стасенки, и вызвать ее preg_replace_callback("/(?<={end-texte}).*?(?={end-tooltip})/", 'имя_функции', $string) И там в этой функции уже делать запросы и вытаскивать нужные данные и заменять ими твои теги.

-~{}~ 20.08.09 14:04:

Разбираться в твоем примере не буду. Научись думать, прежде чем чтото писать. Скорее всего там другая регулярка должна быть.
 

Fanamura

Новичок
Решение найдено:
PHP:
$needle = '{tooltip}+title+{end-title}+tooltips\'s text+{end-texte}' . $mathces[0][$i] . '{end-tooltip}';
$to = '{tooltip}'. $header_name . '{end-title}' . $chara . '{end-texte}' . $mathces[0][$i] . '{end-tooltip}';
$string = str_replace($needle, $to, $string);
 
Сверху