1

データベース内に php がある場合、それを使用できますか。具体的には<?php echo $email; ?>、コンテンツという列があります。ユーザーと呼ばれる保護されたページで、コンテンツ列を呼び出してページを吐き出します。しばらくの間 mysqli のようなブログになります。データベースを調べる<?php echo $email; ?>と、フォームに投稿された実際の変数ではなく、関数が実際には完全であることがわかります。

編集:

また、フォーム内の値に何が表示されるかを確認するためにfirebug内を調べていますが、実際には完全なechoステートメントです。echo ステートメントは、保存されたフォームの一部としてデータベースから取得されます。これは良い習慣ではありませんか?もしそうなら、どうすればこれを行うことができますか?私は何かが欠けていますか??

詳細情報は、データを入力するためにmysqliエスケープ文字列を使用していることです..

ページのコンテンツをエコー出力するスクリプトがあります。この場合、データベースのコンテンツは、電子メールの非表示フィールドを含むフォームです。このようにして、接続を確立できるように、誰がデータベースに投稿したかを知ることができます。

元のページ内には、この特定のページに含まれているアクティブな変数があります。次のようなフィールドをデータベースのフォームに含めています。

<input type="hidden" id="email" value="<?php echo $email; ?>" />

通常、エコーは機能しますが、なぜ機能しないのかわかりません。そのため、その入力フィールドがデータベースからのものであるという事実が、ページ内に既に配置されている変数に基づいてエコーしないことに関係があるかどうかを尋ねます。

説明のためのさらなる例:

<?php
include_once "includes/db_conx.php";
$sql = "SELECT * FROM course ORDER BY id DESC";
$sql_page = mysqli_query($db_conx,$sql);
while($row = mysqli_fetch_array($sql_page)){

 $email = $row["email"]; 
}
?>

それが実際のuser.phpページのメールです.....

これで、user.php にもコンテンツ用の領域ができました。

<?php
include_once "includes/db_conx.php";
$sql = "SELECT * FROM content ORDER BY id DESC LIMIT 1";
$sql_page = mysqli_query($db_conx,$sql);
while($row = mysqli_fetch_array($sql_page)){

 $content = $row["content"]; 
}
?>

コンテンツは次のようになります...

    <form>
     <input type="hidden" id="email" value="<?php echo $email; ?>" />
//    
</form>

これはまた、user.php に $email があるという通知を user.php に出力します。これにどのようにアプローチすると言っていますか? 他にどのようにこれをエコーできますか?

4

1 に答える 1

1

コメントに基づいて、最初のコメントでリンクされた記事を確認するのが簡単な答えだと思います。はい、問題は、フォーム出力コードがコードではなく変数内のデータを想定している可能性が高いことです。含まれているコードを実際に実行するには、変数を eval() する必要があります。ただし、これはベスト プラクティスではありません。

より良い解決策は、 $email の内容を DB に保存し、それをフォームに送信することです。

それは次の違いです。

$x = '<php? echo $hello ?>';

$outstr= "<input type='hidden' value=' $x ' >";
//no this wont work unless you use eval($x)

編集:

上記のコンテンツに関する説明に基づいて、コンテンツ内のタグ間のすべてを無視して実際のコンテンツに置き換える方法が必要な場合がありますか? データベースの設計を変更できないと仮定しています...

あなたが試すことができる2つのクイック&ダーティ&おそらく安全ではないことは次のとおりです。

include("data:,$content");
//or
eval('?>'.$content.'<?');

または、正規表現に置き換えることができます:

$phpTagPattern = "#<\?.*?(echo)\s+(\$\w+);.*?(\?>|$)#s";  //just searching specifically
                          //for <?php echo $varname; ?>  to replace with $varname;
$replacePattern = "$2"; // this may need some cleaning/debugging here. It's late...
$newContent = preg_replace($phpTagPattern,$replacePattern,$content);

とにかく、とにかく変数の内容を取得するために parse_str を実行する必要があります...おそらくコードを実行するよりもいくらか安全です。

echo parse_str($newContent); //should get you to actual contents of $email variable

これはすべて、トークナイザー拡張機能を使用するとより簡単に実現できます: http://www.php.net/manual/en/tokenizer.examples.php T_OPEN_TAG と T_CLOSE_TAG を検索します。

高レベルの Better Way To Do This(TM) のような説明については、単純に実際のデータをデータベースに保存し、コンテンツを smarty などのテンプレート エンジンに入れる方が理にかなっています。次に、フォームのシェルを作成し、必要な場所に変数を渡すだけです。データをロジックから分離し、出力/書式設定マークアップをさらに分離します。

于 2013-08-11T04:34:59.187 に答える