我有HTML内容(表单),只有在满足条件且将由echo
方法显示时才会显示。我试图解析PHP中的代码。我收到语法错误,因为我需要在submit=""
或value=""
等值旁边解析,所以我不确定如何解决此问题。以下是一个示例:
if(isset($_GET['handle']) && !isset($_GET['serial_key']))
{
$allowtoEnterSN='True';
$a_handle= mysql_escape_string($_GET['handle']);
echo ' <span class="activation_bold">Please activate your account to continue.</span></p>
<form id="activate" name="activate" method="post" action="activate_check.php?handle='.$_POST['a_handle'].'&serial_key='.$_POST['serial_key'].'">
<p class="activation_reg">Please enter your Serial Key Number to activate.</p>
<p class="activation_reg">
<label for="user_name">Handle</label>
<input name="user_name" type="text" class="activation_reg" id="user_name" />
</p>
<p class="activation_reg">
<label for="serial_key">Serial Key Number</label>
<input name="serial_key" type="text" class="activation_reg" id="serial_key" size="40" />
<input name="submit" type="submit" class="a_button" id="submit" value="Activate" />
<input name="a_handle" type="hidden" id="a_handle" value="<? echo $a_handle ?>" />
</p>
</form>'
}
最新更新
if(isset($_GET['handle']) && !isset($_GET['serial_key']))
{
$allowtoEnterSN='True';
$a_handle= mysql_escape_string($_GET['handle']);
echo <<<HTML
<p>
<span class="activation_bold">Please activate your account to continue.</span></p>
<form id="activate" name="activate" method="post" action="activate_check.php?handle={$_POST['a_handle']}&serial_key={$_POST['serial_key']}">
<p class="activation_reg">
<label for="serial_key">Serial Key Number</label>
<input name="serial_key" type="text" class="activation_reg" id="serial_key" size="40" />
<input name="submit" type="submit" class="a_button" id="submit" value="Activate" />
<input name="a_handle" type="hidden" id="a_handle" value="$a_handle" />
</p>
</form>
HTML;}
最后更新时间为1634ct
if(isset($_GET['handle']) && !isset($_GET['serial_key']))
{
$allowtoEnterSN='True';
$a_handle= mysql_escape_string($_GET['handle']);
echo <<< EOD
<span class="activation_bold">Please activate your account to continue.</span></p>
<form id="activate" name="activate" method="post" action="activate_check.php?handle='.$_POST['a_handle'].'&serial_key='.$_POST['serial_key'].'">
<p class="activation_reg">Please enter your Serial Key Number to activate.</p>
<p class="activation_reg">
<label for="user_name">Handle</label>
<input name="user_name" type="text" class="activation_reg" id="user_name" />
</p>
<p class="activation_reg">
<label for="serial_key">Serial Key Number</label>
<input name="serial_key" type="text" class="activation_reg" id="serial_key" size="40" />
<input name="submit" type="submit" class="a_button" id="submit" value="Activate" />
<input name="a_handle" type="hidden" id="a_handle" value="<? echo $a_handle ?>" />
</p>
</form>
EOD;
}
答案 0 :(得分:3)
您应该使用HEREDOC而不是单引号字符串,它将插入您需要的变量。将复杂变量括在{}
。
echo<<<HTML
<span class="activation_bold">Please activate your account to continue.</span></p>
<form id="activate" name="activate" method="post" action="activate_check.php?handle={$_POST['a_handle']}&serial_key={$_POST['serial_key']">
<!-- SNIP -- >
<p class="activation_reg">
<label for="serial_key">Serial Key Number</label>
<input name="serial_key" type="text" class="activation_reg" id="serial_key" size="40" />
<input name="submit" type="submit" class="a_button" id="submit" value="Activate" />
<!-- now just use $a_handle -->
<input name="a_handle" type="hidden" id="a_handle" value="$a_handle" />
</p>
</form>
HTML;
ADDENDUM: HEREDOC的崩溃课程:
HEREDOC是一个多行字符串,它坚持格式化并且表现得像双引号字符串,相应地插入PHP变量。
要开始HEREDOC,请使用<<<
运算符,后跟一些标识符(示例中为VAR
)。在它自己的行的开头用相同的标识符(VAR
)结束它,取消缩进,然后是分号(VAR;
)。如果缩进或后跟空格,则无法正常工作。
$heredoc_var =<<<VAR
Now you can type whatever you want including $variables.
And over multiple lines.
VAR; <--- No extra whitespace here and must be at the beginning of the line!!!!
答案 1 :(得分:0)
<input name="a_handle" type="hidden" id="a_handle" value="<? echo $a_handle ?>" />
你在单引号字符串中写echo
,它不起作用。
应该是:
'.....<input name="a_handle" type="hidden" id="a_handle" value="'.$a_handle.'" />....'
问题:为什么要使用$a_handle= mysql_escape_string($_GET['handle']);
?
他们以后会加入数据库吗?
mysql_real_escape_string
。htmlentities($_GET['handle'])
代替答案 2 :(得分:0)
我不确定这是否能回答你的问题,但这里有一个错误:
<span class="activation_bold">Please activate your account to continue.</span></p>
没有首发<p>
。
编辑:另请参阅Damien Pirsy对另一个问题的回答。
答案 3 :(得分:0)
我不确定这是否是您唯一的问题但是:</form>'
之后您错过了分号。它应该是</form>';
我还建议你像其他答案建议一样使用HEREDOC notation。对于长琴弦来说它更清洁。此外,正如其他人所说,如果您没有使用htmlentities
和urlencode
(取决于HTML在文本中的位置)转义输出,那么您将面临XSS攻击。请参阅:http://en.wikipedia.org/wiki/Cross-site_scripting