-1

これで私を助けてくれてありがとう。次の問題が発生します。

「news()」という名前の関数があります。この機能は正しく動作します。ただし、この関数をデータベースから呼び出そうとすると、問題が発生します。

データベースに次のデータが保存されています。

Table MENU
menu_id (int) -> 1, menu_name(varchar(255)) -> Home, menu_content (longtext) -> <?php news() ?>, menu_status (varchar(255)) -> visible, menu_rank (varchar(255)) -> active.

ご覧のとおり、次の PHP ステートメントをデータベース " <?php news() ?>" に保存しました。

次のクエリを使用してデータベースからデータを収集すると:

$content_query = mysql_query ("SELECT * FROM MENU WHERE menu_id = '".$var."') or die (mysql_error()); 
$content = mysql_fetch_assoc($content_query);
$menu_content = $content['menu_content'];
$menu_title = ['menu_title'];

$menu_title をエコーすると、データが正しく表示されます。$menu_content をエコーすると、何も表示されません。デバッグしようとすると、そのデータに対して HTML コメントが作成されているようです。このような:

<!--?php news();?-->

この問題を解決する方法を知っている人はいますか?私を助けてくれてありがとう。

4

3 に答える 3

1

"SQL ステートメントの最後に終了引用符がありません。

"SELECT * FROM MENU WHERE menu_id = '".$var."'

次のようにする必要があります。

"SELECT * FROM MENU WHERE menu_id = '".$var."'"

(最後の引用文字に注意してください)

もっと簡潔に:

"SELECT * FROM MENU WHERE menu_id = '$var'"
于 2012-04-15T13:57:02.597 に答える
0

最初の行に終了'"'がありません。これを修正するには、次のように置き換えます。

$content_query = mysql_query ("SELECT * FROM MENU WHERE menu_id = '".$var."') or die (mysql_error());

これとともに:

$content_query = mysql_query ("SELECT * FROM MENU WHERE menu_id = '".$var."') or die (mysql_error());

これがユーザー入力である場合は、$ var変数の前後にintval()を追加することもお勧めします。そうしないと、悪意のあるユーザーがSQLを挿入してデータベースを編集する可能性があります。これにより、テキスト値が整数に変換されます。

また、確認のために、誰かが.htmlファイルまたはPHPがインストールされていない.phpファイルでPHP関数を出力しようとすると、このエラーが発生するので、PHPサーバーを使用していますか。

于 2012-04-15T14:25:06.070 に答える
0

あなたがやろうとしていることをするために、あなたは返されたデータをeval()する必要があります。eval関数を使用する場合は、十分に注意する必要があります。ユーザーデータがevalステートメントに到達しないことを絶対に確認してください!ただし、「<!-」についてはよくわかりません。試してみる。

于 2012-04-15T14:16:25.023 に答える