【问题标题】:why isn't a style being applied to this php variable?为什么不将样式应用于此 php 变量?
【发布时间】:2012-01-30 22:03:00
【问题描述】:

我尝试了各种解决方案来解决这个问题,但似乎没有任何效果。我知道样式表正在发挥作用,因为还有其他规则。

编辑 .error 样式已附加,但我现在得到了 $error 的两个回声,一个是红色的,一个是黑色的,在其下方一行。对 rcheader 的引用不包含对 $error 的引用。

css:

.error{
color:#FF0000;
}

这是整个php页面:

<link type="text/css" href="stylesheet.css" rel="stylesheet" media="all" />
<?php // rclogin.php
include_once 'rcheader.php';
echo "<h3>Member Log in</h3>";
// $error="<span class='error'></span>";
$error = $user = $pass = "";

if (isset($_POST['user']))
{
    $user = sanitizeString($_POST['user']);
    $pass = sanitizeString($_POST['pass']);

    if ($user == "" || $pass == "")
    {
        $error = 'Not all fields were entered correctly.<br />';
    }
if(strlen($error)>0) {
    echo '<span class="error">' . $error . '</span><br/>';
}
    else
    {
        $query = "SELECT user,pass FROM rcmembers
                  WHERE user='$user' AND pass='$pass'";

        if (mysql_num_rows(queryMysql($query)) == 0)
        {
            $error = "Username/Password invalid<br />";
        }
        else
        {
            $_SESSION['user'] = $user;
            $_SESSION['pass'] = $pass;
            die("You are now logged in. Please
               <a href='rcmembers.php?view=$user'>click here</a>.");
        }
    }
}

echo <<<_END
<form method='post' action='rclogin.php'>$error
Username <input type='text' maxlength='16' name='user'
    value='$user' /><br />
Password <input type='password' maxlength='16' name='pass'
    value='$pass' /><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<input type='submit' value='Login' />
</form>
_END;
?>

【问题讨论】:

  • 您是否使用 FireBug(FF 版)或开发者工具 (F12) 检查过元素?
  • 样式不应用于 PHP 变量,它们应用于 HTML 元素,并且 HTML 元素有时由 PHP 生成。确定您的问题是 HTML 生成还是样式。如果问题在于样式,请向我们展示发送到浏览器的 HTML
  • 您在代码的(当前)末尾为 $error 分配了一个新值。能多显示几行吗?
  • 您是否正在为您的 span class="error" 其他地方定义样式?因为它可能会覆盖您要设置的那个。
  • 它没有应用规则......所以如果应用它,每个被调用的声明都会剥离样式?

标签: php css variable-assignment


【解决方案1】:

你的php代码的逻辑是这里的问题:

$error = $user = $pass = "";

if ($error) {
   echo '<span class="error">' . $error . '</span><br/>';
}

您将错误消息设置为空字符串,然后立即让它吐出一条空错误消息,然后运行填充$error 变量的检查?!?

删除

if ($error) {
    echo '<span class="error">' . $error . '</span><br/>';
}

并修改此代码以添加错误输出逻辑:

if ($user == "" || $pass == "") {
    $error = 'Not all fields were entered.<br />';
}
if(strlen($error)>0) {
    echo '<span class="error">' . $error . '</span><br/>';
}

** 请记住... ** 检查变量是否为空字符串时,请使用 strlen($var)==0empty($var) 或检查 $var=='' 语句是否:if($var) 正在寻找布尔值 TRUE/错误

【讨论】:

  • 这会输出错误消息的样式和无样式版本吗?是什么。 $变量。语法到底是什么?
  • . 是连接运算符。它的工作是将字符串连接在一起(所以$string = 'my string'; echo 'which string? '.$string; 会吐出'哪个字符串?我的字符串'。在双重输出中,你是否删除了最初的if($error) 语句?如果是这样,并且它仍在发生,你能发布更多代码+输出?
  • 这是因为您仍在打印错误消息两次,只是第二次没有将其包裹在 &lt;span class='error'&gt;&lt;/span&gt; 标记中。第一次是:echo '&lt;span class="error"&gt;' . $error . '&lt;/span&gt;&lt;br/&gt;'; - 这意味着“将其打印到页面”并且样式正确。但后来你又把它吐出来了:&lt;form method='post' action='rclogin.php'&gt;$error。在第二种情况下,它没有样式。要么删除第二个$error 引用,要么删除第一个并设置$error = "&lt;span class='error'&gt;$error&lt;/span&gt;";,然后再进入
  • 没有。第二个显示在表单内部,但如果您不关心它是存在于表单元素内部还是外部,则只需删除第二个。
【解决方案2】:

最可能的答案是另一个 CSS 文件为 .error 类定义了一种比您在此处提到的更具体的样式。

把你的css改成

    span.error {
    color: #FF0000 !important;
}

编辑:@PeeHaa 是对的。我原来的答案有点太快太脏了。它工作,但更好的解决方案是找出错误类的定义位置,或者创建新的自定义样式。您可能希望养成为自定义样式添加前缀的习惯,以避免将来出现这种情况。例如,如果您正在开发 myawesomewebsite.com,您可能会将指定的 CSS 重写为

span.maw_error {
    color: #FF0000; }

【讨论】:

  • Eeeek !important。请找出是什么推翻了它。
  • 至少可以说,处理样式表的特殊性可能很烦人。
  • @PeeHaa,你是对的。我已经相应地编辑了我的答案。追踪压倒一切的风格可能并不总是可行的,因此建议为他的自定义类添加前缀。
  • 编辑使这个答案更好(css特异性更好)......但是,我坚持认为这不是CSS问题。 php 将始终打印&lt;span class="error"&gt;&lt;/span&gt;&lt;br/&gt;,因此应用字体颜色不会有任何区别。
  • @Ben D 是对的。对我来说,这是一个糟糕的初步答案。 PHP 手册说空字符串和字符串“0”评估为布尔值 FALSE,因此您永远不会输入 if($error) 代码块。我没有回去查看以前 PHP 版本的文档,但是当您需要测试 TRUE/FALSE 时,使用真正的布尔类型始终是一个好习惯。
猜你喜欢
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
相关资源
最近更新 更多