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;
}
?>