テキストフィールドを持つこのmysqlテーブルを取得しました。テキスト エントリの 1 つに次のものが含まれます。
<?
if(isset($_GET["id"])) {
include($index.".php");
} else {
include("front.php");
}
?>
mysql データを取得するときに、スクリプトの意図どおりにその mysql データを出力するにはどうすればよいですか? 何もせずにインデックスファイルにphpを出力するだけです。
を使用しeval()
ます。
ここを参照してください:PHPマニュアル-eval()
ただし、コードをmysqlテーブルに配置する原因となった問題の別の解決策を見つけることを検討する必要があります。ほとんどの場合、そのようなことは簡単に回避でき、悪い習慣と見なされます。
まず、上記のコードは適切ではありません。これは、一般的にコーディングしない方法の例です。
どうして
1)コードの移植性を高めるために<?
、、、などの短い PHP タグは避ける必要があります。<?=
サーバーに無効などのオプションがある場合allow_short_tags
、Webサーバーはコードをプレーンテキストとして単純に扱うためです。(PHPスクリプトとしてではありません)
2)if isset($_GET...)
ブロック内のエラー。スクリプトにinclude($index.'.php')
when $_GET['id']
has any value.Any!を指示しているためです。フィルタリングさえしません$_GET['id']
そして、あなたの最後のコメントによると、これは「データベースに PHP コードを保存すべきではない理由」に対する答えです。
データベースからコードを読み取るには、(一般的に)
eval()
関数を介して応答を評価するしかし、SQL サーバーがビジー状態で応答しない場合はどうでしょうか。その場合、スクリプトを停止する必要があります。これは一般に と見なされ、bad practice
この方法でコーディングするべきではありません。
簡単にできるのに、なぜ前述の「操作」をすべて行う必要があるのですか。
<?php
include('some_codes.php');// or better require()
もう一つの重要なこと
$_GET['some_key']
キーの値に基づいてファイルをインクルードする場合は、$_GET
常に$_GET['some_key']
. 非常に基本的な検証は次のようになります。
<?php
if ( isset($_GET['foo']) ){
if ( file_exists('../path' . $_GET['foo']) ){
// seems like a valid one
// do include then
}
}
結論
1) 短いタグを使用せず、代わりに完全なタグを使用してください - 2) ユーザー入力を信頼しないでください。つまり、および<?php
から取得した値を決して信頼しないでください。
3) コードをファイルに保持し、必要に応じてインクルードします。$_GET
$_POST