2012-03-14 17 views
-1

私はいくつかの文字と単語長を出力するこのフォームを持っています。しかし、私はデータベースから正しい出力を得るためにいくつか問題があります。正規表現と変数

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"; 
    } 

私は私のスクリプトの動作のフォームで入力された整数に$の長さを変更した場合。 [$ letters]を6回コピー/貼り付けすることもできます。私は引用符で問題があると思うが、私はそれが正確に何であるか把握できない。

私は間違ったことを誰にでも見られますか?おかげさまで

+1

の一環としてintepretedなっていることを予感していた入力が正規表現パターンを壊さないことを確認してください。 – hakre

答えて

0

{}は二重引用符で囲んだ文字列を使用しているため、変数insideの区切り文字として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."}' ") 

私は$は正規表現