【问题标题】:How to assign a span to a certain username如何将跨度分配给某个用户名
【发布时间】:2015-02-14 11:29:02
【问题描述】:

已找到解决方案!感谢@northkildonan 和@Doug Leary。


解决方案代码;

if ($result->num_rows > 0) {
 // output data of each row
 while($row = $result->fetch_assoc()) {
     echo "<li class='list-group-item'>" . $row["user_name"];
if ($row["user_name"] == "TacoLover22") {
     echo "<span class='badge'>Dev</span>";
}
echo "</li>";
 }

##

我有一个用户名列表,我有一个检查用户名是否存在的代码,如果确实存在,我希望在其上附加一个 div。 Here's an image explaining this

但是,我的代码可以工作,但它没有将该 div 分配给选定的用户名。

这是 PHP 代码;

<?php 

if (
    $row["user_name"] === "TacoLover22");{
    echo  "<span class='badge'>Dev</span>";
    }
?>

这是获取所有用户名的其他 php 代码;

<?php
$servername = "####";
$username = "####";
$password = "########";
$dbname = "########";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT user_name FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
     // output data of each row
     while($row = $result->fetch_assoc()) {
         echo "<li class='list-group-item'>" . $row["user_name"];
     }
} else {
     echo "0 results";
}

$conn->close();
?>  

这段代码的结果可以找到here.

编辑:这是来自建议的完整代码,它似乎仍然不起作用。跨度现在没有出现。

// output data of each row
while($row = $result->fetch_assoc()) {
echo "<li class='list-group-item'>" . $row["user_name"];
if ($row["user_name"] === "TacoLover22") {
     echo "<span class='badge'>Dev</span>";
}
echo "</li>";
}

感谢大家的帮助。

【问题讨论】:

  • 如果将 === 更改为 == 会发生什么?
  • @Darren 什么都没有。它保持不变。
  • 您还应该删除 if 语句后面的逗号 (;) ;) (if ($row["user_name"] === "TacoLover22"); { &lt;&lt;&lt;&lt; That one)

标签: php html append


【解决方案1】:

我认为这样做可以:

// output data of each row
while($row = $result->fetch_assoc()) {
    echo "<li class='list-group-item'>" . $row["user_name"];
    if ($row["user_name"] === "TacoLover22") {
         echo "<span class='badge'>Dev</span>";
    }
    echo "</li>";
}

【讨论】:

  • @MyNameIsNotSoCool 这是span 不是div
  • northkildonan 对 == 与 === 的看法是正确的,但要按照我的建议做正确的事并关闭
  • 标签。
  • @DougLeary 根据 w3c,您在这里不需要结束标记:“如果 li 元素紧跟在另一个 li 元素之后或者没有更多元素,则可以省略 li 元素的结束标记父元素中的内容。”来源:w3.org/TR/html5/syntax.html#optional-tags
  • @northkildonan - 是的,这就是为什么我说“做正确的事”而不是“符合标准”。叫我老式的,但我认为应该引用属性值并且应该关闭标签。
  • 【解决方案2】:

    您必须在 mysql-fetch-loop 中附加 &lt;span&gt;(注意:您说的是 div,但您使用的是跨度,这在 html 中有所不同)。

    while($row = $result->fetch_assoc()) {
        echo "<li class='list-group-item'>" . $row["user_name"];
        if ($row["user_name"] == "TacoLover22")
        {
            echo  "<span class='badge'>Dev</span>";
        }
    }
    

    说明:您正在您的 while 循环中迭代您的 mysql-query 的结果集。变量 $row 是您的指针,它指向结果的相应行。
    在您的 while 循环完成后,您的“指针”将始终显示到您的 mysql 查询的最后一个结果行。所以$row["user_name"] 将始终设置为在您的数据库中找到的最后一个用户名。这就是为什么你必须在 while 循环中访问它。


    如何处理多个用户(按要求):
    我决定在这里使用switch 而不是if elseif 语句,因为它更好地阅读而不是写imho:

    while($row = $result->fetch_assoc()) {
        echo "<li class='list-group-item'>" . $row["user_name"];
    
        switch($row["user_name"])
        {
            case "TacoLover22":
                echo "<span class='badge'>Dev</span>";
            break;
            case "AnotherUser":
                echo "<span class='badge'>User</span>";
            break;
        }
    }
    

    【讨论】:

    • @MyNameIsNotSoCool 我只是将比较运算符从=== 更改为==,因为您不想检查相等性和相同的数据类型,我猜。如果您仍然没有跨度输出,那么您的数据库表中没有一个名为(完全正确!)“TacoLover22”的用户。
    • 谢谢!我设法让它工作,结果我有重复的代码!再次感谢。
    • @MyNameIsNotSoCool 我会在稍后更新我的问题。
    • 谢谢,在您发布更新之前,我想出了另一个解决方案,我在数据库中添加了一个新行,现在我检查此人是否是“开发人员”。感谢您的帮助。
    【解决方案3】:

    假设你正在使用 sqli 扩展 user_username 列是特殊用户列表,否则需要 2 个表,1 个表存储用户,1 个辅助表存储特殊用户

    //query
    $sql = "SELECT user_name FROM users";
    //send to mysql, get result 
    $sendquery = $conn->query($sql);
    //fetch results as array
    while ($result=$sendquery->fetch_array) {
      echo 'username:' . $result['user_name'] . '<span class='badge'>Dev</span>';
    }
    

    但您的问题令人困惑,如果您有不同类型的用户,您应该使用 2 个表

    TABLE USERS user_id | name | dev_id | email | password | ...
    TABLE DEVS dev_id | name | level | access | ....
    
    SQL query, using LEFT JOIN
    
    SELECT 
        usern.name as username, dev.name as devname
    FROM USERS as user
    LEFT JOIN DEVS as dev
    USING dev_id
    
    php output use $result['devname']
    

    $结果[''] 如果您只需要显示“TacoLover22”,如果这是您唯一需要添加内容的人,请在 while 循环中添加一个 IF

    //query
    $sql = "SELECT user_name FROM users";
    //send to mysql, get result 
    $sendquery = $conn->query($sql);
    //fetch results as array
    while ($result=$sendquery->fetch_array) {
        if ($result['user_name'] == "TacoLover22") {
            echo 'username:' . $result['user_name'] . '<span class='badge'>Dev</span>';
    }
        else {
            echo $result['user_name'];
        }
    }
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签