PHP函数回显意外的HTML值

PHP函数回显意外的HTML值,php,html,Php,Html,我在html标记中有一段php代码,它应该根据URL的内容更改标记的样式 有一个html登录表单,如下所示: <form class="userdata" action="login.php" method="post"> <input type="text" name="email" placeholder="E-mail" <?php fil

我在
html
标记中有一段
php
代码,它应该根据
URL
的内容更改标记的样式

有一个
html
登录表单,如下所示:

<form class="userdata" action="login.php" method="post">
    <input type="text" name="email" placeholder="E-mail" <?php fillin('email'); enlight_unfilled('email');?>><br>
    <input type="password" name="pwd" placeholder="Password"><br>
    <button type="submit" name="login-submit">Login</button>
</form>
如果我只在标记中应用其中一个函数,它们都会执行预期的操作–如果电子邮件已键入,则将其保存在字段中;如果电子邮件字段为空,则将其打开。但是如果我将它们一起应用,当字段为空时,
php
会分配字段值
'style='border-color:
。我还尝试使用诸如
print
printf
之类的函数,但结果是一样的:


我是
php
编码的初学者,并将其与
html
混合使用,因此这个问题可能看起来很愚蠢,但我没有找到任何解决此问题的方法,因此提前感谢您的帮助和耐心

看起来您没有正确地将
括在引号中,因此它只是呈现
'style='border-color:

让我们假设
$\u GET[$key]
的值为
hello@hello.com
。PHP和HTML呈现的内容如下:

值=hello@hello.com

看到问题了吗?没有引用。这就是渲染器向前搜索有效值的原因。要解决此问题,必须在
fillin
函数中的
$\u GET[$key]
周围添加引号。像这样的东西应该可以完成这项工作:

if(isset($\u GET[$key])回显“value=”。$\u GET[$key]。"'";


它在单独运行时工作,因为它到达末尾
,并且只假设值为
hello@hello.com

你的问题在于报价。检查生成的HTML(页面源代码),你应该知道哪里出了问题。@El_Vanja它与我描述的一样:
问题是我不知道为什么会生成这样的代码。我猜你没有查看页面源代码,而是检查了浏览器工具栏中的元素。不同之处在于,当您检查时,您会在浏览器应用了一些修复后看到HTML。当您查看源代码时,应该会看到以下内容:
value=style='border-color:red'
。这将告诉您,您的
属性没有引号。您也可以使用此代码进行XSS注入。@El_Vanja我在哪里可以查看源代码?欢迎您。仔细看看这一行:
“value=”$\u GET[$key]。"'";。一开始可能有点难,但您是否注意到在=之后和双引号之前有一个单引号?然后是另一个单引号,后面用双引号括起来。这些单引号将
$\u GET[$key]
的值用引号括起来。我使用单引号是因为您从一开始就使用双引号。请看第一个双引号,就在value之前。据我所知,对于
HTML
属性值必须始终用引号括起来,对吗?因此,生成的
HTML
代码必须以引号yes和no包围所有属性值。正如您所看到的,当仅使用
fillin
函数时,您在没有引号的情况下获得了正确的结果。这是一个很复杂的话题。但是,使用引号始终是一种良好的做法,以避免出现您遇到的问题。一般来说,使用引号是一种良好的做法。下面是一个链接,它比我现在能更好地解释这个问题:
<?php
function fillin($key) {
    if (isset($_GET[$key])) echo "value=".$_GET[$key];
    else echo NULL;
}

function enlight_unfilled($key) {
    if (isset($_GET['error']))
        if (isset($_GET[$key]) and $_GET[$key] !== "") echo NULL;
        else echo "style='border-color: red'";
    else echo NULL;
}
?>