0

こんにちは、変数をそれ自体と等しくする方法を知りたいです。だから私はそれが私の画面にecho $var表示される場合。$varphpを使用してphpスクリプト全体を新しいファイルに書き込もうとしましたが、ファイルに書き込むと、変数が消える以外はすべて機能し、それらが何も等しくないため、それらを等しくしようとしていると思われます。

$my_file = '../../../'.$_POST['username'].'.php';
$handle = fopen($my_file, 'w') or die('Cannot open file:  '.$my_file);
$data = "
<?php


$db_host        = 'localhost';
$db_user        = 'root';
$db_pass        = '';
$db_database    = 'fitnesstest';

$con = mysql_connect($db_host,$db_user,$db_pass) or die('Unable to establish 
a DB connection');

mysql_select_db($db_database,$con);

$date = strtotime('+3 day');
$dates = date('M d, Y', $date);

mysql_query('INSERT INTO ".$_POST['username']." 
(`id`, `name`, `push_ups`, `sit_ups`,  `burpees`, `pull_ups`, `body_rows`, `overs`,
`tricep_dips`, `run`, `plank_hold`, `squat_hold`, `thrusters`, `hanging_abs`, `row`,
`weight`, `bi`, `tri`, `s_scap`, `s_illiac`, `arm`, `chest_hip`, `waist`,
`belly_delts`, `thigh`) 
VALUES 
(NULL, '$dates', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0')');

?>

";
 file_put_contents($my_file, $data);
 fclose($handle);

のすべての変数は$data、書き込まれた新しいファイルの空白になります。助けてください、それは大歓迎です。前もって感謝します。

4

3 に答える 3

2

これは、変数が二重引用符内で展開されるためです。これについては、マニュアルページを確認してください。

注: 二重引用符やヒアドキュメントの構文とは異なり、特殊文字の変数とエスケープ シーケンスは、単一引用符で囲まれた文字列内にある場合は展開されません。

これを避けるには、一重引用符 ( ') を使用してそれを囲むか、すべての特殊文字 (turn $intoなど\$) をエスケープします。

詳細はこちら

このユニークなケースでできるもう 1 つのことはtemplate.tpl、コンテンツを使用して を作成することですが、その代わりに、テンプレート ファイルを読み取るときにを単に置き換えるmysql_query('INSERT INTO ".$_POST['username']."ことができます。これに追加されたボーナスは、完全な構文の強調表示が得られるという事実です (文字列ではないため)。mysql_query('INSERT INTO %%USERNAME%%%%USERNAME%%%%DATES%%


sql.php.tpl次の内容のというファイルを作成します。

<?php
    $db_host        = 'localhost';
    $db_user        = 'root';
    $db_pass        = '';
    $db_database    = 'fitnesstest';

    $con = mysql_connect($db_host,$db_user,$db_pass) or die('Unable to establish 
    a DB connection');

    mysql_select_db($db_database,$con);

    $date = strtotime('+3 day');
    $dates = date('M d, Y', $date);

    mysql_query('INSERT INTO %%USERNAME%%
    (`id`, `name`, `push_ups`, `sit_ups`,  `burpees`, `pull_ups`, `body_rows`, `overs`,
    `tricep_dips`, `run`, `plank_hold`, `squat_hold`, `thrusters`, `hanging_abs`, `row`,
    `weight`, `bi`, `tri`, `s_scap`, `s_illiac`, `arm`, `chest_hip`, `waist`,
    `belly_delts`, `thigh`) 
    VALUES 
    (NULL, '" . mysql_real_escape_string($dates) . "', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 
    '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0')');
?>

そしてそれを読んでください:

<?php
    $template = file_get_contents("sql.php.tpl");
    $template = str_replace("%%USERNAME%%", $_POST["username"], $template);
    file_put_contents("user.php", $template);
?>

免責事項:あなたがしていることは非常に悪い考えです。左右に SQL インジェクションがあります。オペレーティング システム上に新しいファイルを作成しています (単純にユーザー名を呼び出し'); shell_exec("rm -rf /");て、サーバー全体を破壊することもできます。ユーザーごとにテーブルがあります。

于 2013-08-22T12:58:51.777 に答える