嗨我想知道如何使变量等于它自己。
所以如果我echo $var
它会在我的屏幕上显示show $var
。
香港专业教育学院一直试图用PHP编写一个完整的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
中的每个变量都成为写入其中的新文件中的空白区域。
请帮助,非常感谢。提前致谢。
答案 0 :(得分:3)
这是因为变量在双引号内扩展。检查manual page。
注意:与双引号和heredoc语法不同,特殊字符的变量和转义序列在单引号字符串中不会扩展。
使用单引号('
)将其括起来或转义所有特殊字符(例如将$
转换为\$
)以避免这种情况。
更多阅读here。
在这个独特的案例中你可以做的另一件事就是用你的内容创建一个template.tpl
,而不是mysql_query('INSERT INTO ".$_POST['username']."
你可以mysql_query('INSERT INTO %%USERNAME%%
而只是替换%%USERNAME%%
和{ {1}}在阅读模板文件时。对此的额外好处是你可以获得完整的语法高亮(因为它不在字符串中)。
使用以下内容创建名为%%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')');
?>
Disclamer:你在做什么是一个非常糟糕的主意。你有左右SQL注射。您正在操作系统上创建新文件(我可以只使用名为<?php
$template = file_get_contents("sql.php.tpl");
$template = str_replace("%%USERNAME%%", $_POST["username"], $template);
file_put_contents("user.php", $template);
?>
的用户名并销毁整个服务器。您为每个用户提供了表格。
答案 1 :(得分:2)
如果你正在使用PHP 5.3+(你应该使用),那么最好使用Nowdoc Syntax。这样你就不会遇到单引号或双引号的问题。
答案 2 :(得分:0)
我猜你将无法使用 HEREDOC 。安全投注 NOWDOC
<?php
$my_file = '../../../'.$_POST['username'].'.php';
$handle = fopen($my_file, 'w') or die('Cannot open file: '.$my_file);
$data=<<<'CODE'
<?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')');
?>
CODE;
file_put_contents($my_file, $data);
fclose($handle);