【问题标题】:Processing an "if" statement within a "do"在“do”中处理“if”语句
【发布时间】:2013-08-16 12:34:47
【问题描述】:

我试图让头像在“do”循环中返回。头像从 /user/username/avatar.jpg 中提取并链接到用户个人资料,除非头像字段为空,否则它将返回链接到用户个人资料的默认头像。

我的代码在搜索时返回适当的配置文件。但是,在循环过程中返回并显示 3 个配置文件时,只有第一个配置文件显示头像。另外两个只显示“alt 图片标签”(即用户名)作为个人资料的链接。该图像不会出现在返回的第一条记录上。

任何帮助将不胜感激。这是有问题的代码:

<?php do { ?>
<p><?php if($avatar == NULL)
{
echo '<a href="profile.php?u='.$row_Recordset1['username'].'"><img src="images/avatardefault.jpg" alt="'.$row_Recordset1['username'].'"></a>';
}
else if($avatar != NULL)
{
echo '<a href="profile.php?u='.$row_Recordset1['username'].'"><img src="user/'.$row_Recordset1['username'].'/'.$avatar.'" alt="'.$row_Recordset1['username'].'" style="width:100px; height:100px; margin:10px;"></a>';
} ?>
<?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>

编辑添加:

好吧……这很奇怪。我在重复字段中呼应了 $avatar。显然,头像结果 757655830.jpg,这是我的表中“头像”字段中返回的第一条记录的文件名,正在为每条记录显示。它为每个后续记录一遍又一遍地重复相同的头像信息,我不知道为什么。每个后续记录中的所有其他信息都是正确的。

【问题讨论】:

  • 你在哪里更新$avatar
  • 您不需要在循环内的某处设置$avatar 吗?
  • $avatar = $row_Recordset1["avatar"];
  • 您应该将if($avatar != NULL) 更改为if($avatar !== NULLif(is_null($avatar))
  • 它在查询中被调用。它将返回数据库中为图像文件夹中的图像命名的字段,即 799230026.jpg 它返回正常,只是没有在循环中显示第二次和第三次。我希望这是足够的信息?

标签: php mysql if-statement do-while


【解决方案1】:

我个人会有这样的事情(我假设您使用数据库中的一列设置$avatar,这是我的代码所基于的:

$Recordset1 = mysql_query("QUERY");

while ($Row_Recordset1 = mysql_fetch_assoc($Recordset1)){
    if ($Row_Recordset1['Avatar'] === null){            
        echo '<a href="profile.php?u='.$row_Recordset1['username'].'"><img src="images/avatardefault.jpg" alt="'.$row_Recordset1['username'].'"></a>';
    }elseif ($Row_Recordset1['Avatar'] !== null) {
        echo '<a href="profile.php?u='.$row_Recordset1['username'].'"><img src="user/'.$row_Recordset1['username'].'/'.$avatar.'" alt="'.$row_Recordset1['username'].'" style="width:100px; height:100px; margin:10px;"></a>';
    }

}

如果我猜错了,欢迎指正


另一方面,您不应该将mysql_* 函数用于新代码。这些函数已弃用,将在 PHP 的未来版本中删除,请查看 MySQLi 或 PDO 以获得新的、更安全的 API

【讨论】:

  • 你真的需要else if 部分吗?一个简单的else 还不够吗?
  • @insertusernamehere 我给出的示例是对自身的内部循环代码进行最小的更改,以使其对 OP 的更改更加清晰。但是else if 不是必需的,只需一个普通的else 条件就可以了
  • 我正在使用 Dreamweaver MX 进行编程,因为我对编码的学习还不够好,无法手动完成这些复杂的部分。 DO 语句在顶部(这段代码在其中),WHILE 语句在底部。如何在 WHILE 语句上方插入它(请参阅原始代码)。谢谢!
  • @user2672667 mysql_query 在哪里,用您的查询替换当前文本以从数据库中提取数据。正如我所说,我猜avatar 与用户信息一起存储在数据库中,所以只需将QUERY 替换为您的实际查询,将其替换为do 循环,然后看看它是如何进行的。
  • 头像信息正在从数据库字段之一的“头像”列中提取。该查询将三个表连接在一起并且非常长......记录集特定于该查询,并且根据该查询在此下方显示附加信息。我不明白我怎么可以在这里删除一个(第二个?)查询实例来代替“do”语句。是否不可能在 do 语句中包含 in/else 语句并像其他所有内容一样成功地“循环”?
【解决方案2】:

我试图将整个内容缩短一点。也许以下内容会有所帮助:

<p>
<?php
while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)) {
  $av=$row_Recordset1['avatar'];
  $usrn=$row_Recordset1['username'];
  echo "<a href='profile.php?u=$usrn'><img class='avatar' src='"
       .($av>''?"user/$usr/$av":"images/avatardefault.jpg")."' alt='$usrn'></a>";
} ?>  </p>

在您之前的@​​987654322@-循环形式中,您在第一次填充$row_Recordset1-array 之前引用了它的元素。现在 while 语句出现在 实际循环之前。

$avatar===Null 之前的条件现在以否定的方式使用,并且在从该变量中提取头像之前,需要存在比 '' 更长的字符串。

在我的版本中,我没有包含style 属性,而是定义了avatar 类,因为最好通过CSS 部分中的适当样式指令完成格式化。但这肯定是品味问题。 ;-)

【讨论】:

    【解决方案3】:

    我认为你需要移动内部指针,因为如果我没记错的话,mysql_fetch_assoc 不会移动指针。

    使用mysql数据查找:here

    顺便说一句,你应该转移到 mysqli 或 pdo。不推荐使用 Mysql 库。

    【讨论】:

    猜你喜欢
    • 2015-02-06
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2016-08-27
    相关资源
    最近更新 更多