2012-03-14 1 views
-1

У меня есть эта форма, которая выводит несколько букв и длину слова. Но у меня есть некоторые проблемы с получением правильного вывода из моей базы данных.Regexp и переменная

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
     $letters = mysql_real_escape_string($_POST['letters']); 
     $length = mysql_real_escape_string($_POST['length']); 
     echo "Letters: $letters"; 
     echo "Lengte: $length"; 
     $res=mysql_query("SELECT word FROM words WHERE word REGEXP '[$letters]{$length}' ") 
     or die ('Error: '.mysql_error()); 
     while ($row=mysql_fetch_array($res)){ 
      echo $row['word']; 
      echo "<br />"; 
     } 
    } 
    else { 
     echo "Foutje"; 
    } 

Если я изменяю $ length на целое число, введенное формой, которую работает мой скрипт. Копирование/вставка [$ letters] 6 раз также работает. Я думаю, что есть проблема с кавычками, но я не могу понять, что это такое.

Может ли кто-нибудь увидеть, что я сделал не так? Спасибо.

+1

Убедитесь, что вход не будет нарушать шаблон регулярного выражения. – hakre

ответ

0

{} интерпретируются PHP как разделители для переменной внутри, так как вы используете строку с двумя кавычками. Измените вашу процитировать вокруг с конкатенацией:

$res=mysql_query("SELECT word FROM words WHERE word REGEXP '[" . $letters . "]{" . $length ."}'") 

Или удвоиться в {} внутри двойных кавычек, так что внешняя пара интерпретируется как литералы.

$res=mysql_query("SELECT word FROM words WHERE word REGEXP '[$letters]{{$length}}' ") 

Обратите внимание, вы должны также проверить, что $length содержит положительное целое число.

if (!ctype_digit($length)) { 
    // error - length must be an int 
} 
+0

Последний сделал это. Спасибо, я полностью забыл этот вариант! – Sgarz

0

попробовать сделать это:

res=mysql_query("SELECT word FROM words WHERE word REGEXP '[".$letters."]{".$length."}' ") 

У меня есть предчувствие, что $ становится intepreted как часть регулярного выражения