2012-03-09 12 views
0

ユーザは記事のデータベースを更新でき、いくつかの特別な機能のためにBBCodeの簡単なセットを使用する基本的なCMSがあります。<a>をデータベースに挿入するときにPHPスクリプトがnullを返す

基本的に、ユーザは記事情報をHTMLフォームに入力し、「公開」ボタンをクリックすると、BBCodeをHTMLに変換するためにRegexを使用するサーバ上のPHPスクリプトにAJAXリクエストが送信されますMySQLを使用して情報をデータベースに保存します。

私の問題は、別の問題を解決した直後であり、サーバーサイドのスクリプトであり、エラーメッセージが一切表示されないため、デバッグが非常に難しいという点で不幸な点です。

私はRegex、特により複雑なタグで問題を抱えていました。私は[link = URL] FOOBAR [/ link]タグを正しく一致させてFOOBARに置き換えることができました。しかし何らかの理由で、これでスクリプトがハングしたり失敗したりするようになりました。なぜなら、[link]タグが含まれていてもデータベースに何も更新されていないからです。

私はSQLを稼働させたい時に先にデバッグするために、成功したときには "1"と思うmysql_query()関数の戻り値をPHPスクリプトに返すようにしました。 0 "になります。しかし、現在は何も返しません.HTTPRequestは長さ0の文字列を返します。ここで

はコードです:

$post = $_POST['post']; 
$regex = Array('#(\r?\n)#', '#(\[(\/?)(b|i|u)\])#', '#\[link=(http://(www.)?.*?)\](.*?)\[/link\]#', '#(\[youtube\][http://www.youtube.com/watch?v=]?(\w+)[&\w+]?\[/youtube\])#', '#(\[img\](http://[www.]?[\w+])\[/img\])#'); 
$regReplace = Array('<br />', '<$2$3>', '<a href="$1">$3</a>', '<div class="media"><iframe title="YouTube video player" width="560" height="315" src="http://www.youtube.com/embed/$2" frameborder="0" allowfullscreen></iframe></div>', 
       '<div class="media"><img width="560" src="$2" /></div>'); 
$post = preg_replace($regex, $regReplace, $post); 
echo mysql_query('INSERT INTO News VALUES (NULL, "'.Date('D jS M').'", "'.Date('G:i').'", "'.$_POST['heading'].'", "'.$post.'")'); 

私はIMGとYouTubeのregexsが動作しないことを認識しています...

+1

多くのWebホストでは、SSHまたは特別なコントロールパネルページからPHPエラーログにアクセスできます。まだ試していない場合は、ホストのオプションを確認するか、リクエストを送信してください。ログにアクセスしないでPHPをデバッグするのはひどいことがあります! – octern

答えて

3

いくつかの問題がここにあります。上記のエラーは、パラメータ文字列の引用符をバックスラッシュ+引用符でエスケープしないことに起因します。さらに、SQL標準では一重引用符が使用されるため、二重引用符が可能な場合でも、一重引用符を使用する方がよいでしょう。そして、あなたのサイトがハッキングされる(データベースとファイルが表示される)巨大なセキュリティリークSQL injectionがあります。

prepared statementsを参照してください。これも引用符のエスケープを解決します。

+0

それがソートされています。どうもありがとう! – Luke

関連する問題