所以我在尝试这个问题之前尝试过研究这个问题。鉴于我有一个index.php和一个存储用户名的cookie,保存为$ name,大多数答案告诉我这样做很简单:
echo '<h3>'.$name.'</h3>'
但是这对我来说不起作用,我假设它是因为我首先在if语句中使用奇怪的语法,并且我想在if语句中使用该参数。我的确切代码看起来更像是这样:
<?php
//store the cookie
$name=$_COOKIE['user'];
//check that it is set
if(isset($_COOKIE['user'])):
<section id="login">
<h1> Welcome</h1>
echo '<h3>'.$name.'</h3>';
</section>
else: //prompt to login
endif;
?>
它旨在向用户显示一条欢迎消息,该消息已登录,按名称对其进行处理,否则提示用户登录。
所以我的问题是:为什么参数根本不反映? (在加载页面时不显示任何内容)以及如何使其按预期工作?
PS。请不要担心使用cookie执行此操作的安全风险等。它有目的地容易受到攻击。
PPS。我100%确定cookie已设置,我用cookie浏览器查看。
答案 0 :(得分:2)
它不起作用,因为前两行是无效的PHP,所以它会抛出错误并停止工作。
如果您想使用echo
方法,那么正确的语法将是:
echo '<section id="login">';
echo '<h1> Welcome</h1>';
echo '<h3>'.$name.'</h3>';
重要的是从不插入外部数据,就像它是原始HTML 一样。这可能会使您容易受到XSS攻击。将输入视为纯文本并将其转换为HTML,然后将其输出到HTML文档中。
$name_html = htmlspecialchars($name);
echo '<section id="login">';
echo '<h1> Welcome</h1>';
echo '<h3>'.$name_html.'</h3>';
您可以使用变量插值使代码更容易阅读:
$name_html = htmlspecialchars($name);
echo '<section id="login">';
echo '<h1> Welcome</h1>';
echo "<h3>$name_html</h3>";
当输出大量的HTML时,完全退出PHP模式更容易:
$name_html = htmlspecialchars($name);
?>
<section id="login">
<h1> Welcome</h1>
<h3><?=$name_html?></h3>
<?php
<强>除了强>
检查Cookie是否设置之前您尝试使用它,而不是之后!
if(isset($_COOKIE['user'])):
$name=$_COOKIE['user'];
答案 1 :(得分:0)
你应该像这样使用php + html:
<?php $var = 'my string'; ?>
<?php if ($var == 'my string') : ?>
<h1><?php echo $var; ?></h1>
<?php endif;?>
这打破了if语句,允许你在条件语句之间添加html,而不必从php回显和html
答案 2 :(得分:0)
你应该发布你得到的任何错误 - 但是你不能在php中编写html,而不是回应它,或者结束php一段时间。
<?php
//store the cookie
$name=$_COOKIE['user'];
//check that it is set
if(isset($_COOKIE['user'])):?>
<section id="login">
<h1> Welcome</h1>
<?php echo '<h3>'.$name.'</h3>'; ?>
</section>
<?php else: //prompt to login
endif;
?>
答案 3 :(得分:0)
要仅在php语句为true时显示HTML代码,只需在打开if语句后立即关闭php标记,然后将HTML代码放在其间。
<?php
//store the cookie
$name=$_COOKIE['user'];
//check that it is set
if(isset($_COOKIE['user'])) {
?>
<section id="login">
<h1> Welcome</h1>
<h3><?php echo $name; ?></h3>
</section>
<?php
} else {
echo 'Please login';
}
?>