【问题标题】:Make an 'or' in a if statement [closed]在 if 语句中做一个“或”[关闭]
【发布时间】:2012-11-21 08:18:20
【问题描述】:

我正在尝试创建一个系统,该系统取决于 a) 登录的用户或 b) 是否在数组中找到用户名。

如果您已登录并在此人的朋友数组中,您应该会看到“取消朋友”按钮。 如果您在自己的个人资料页面上,所有内容都将被隐藏 如果您不在您的页面上且不在数组中,请“添加朋友”。

Unfriend 似乎正在工作,但它似乎只是在我的个人资料中默认“添加朋友”:

$cool = $_GET['id'];
$evan = mysql_query("SELECT * FROM users WHERE username='{$_SESSION['user_login']}'");
$joe1 = mysql_fetch_assoc($evan);

$cookie = mysql_query("SELECT * FROM users WHERE id='{$_GET['id']}'");
$joe = mysql_fetch_assoc($cookie);

$i = 0;
$berbs = $joe['username'];
error_reporting(E_ERROR | E_PARSE);

if (in_array($_SESSION['user_login'], $friendArray)) {
$addAsFriend = '<input type="submit" name="removefriend" value="UnFriend">';
echo $addAsFriend;

}
error_reporting(E_ERROR | E_PARSE);

if ($_GET['id'] == $joe1['id']) {
$addAsFriend = '<input style="display:none;" type="submit" name="addfriend" value="Add Frimm1end">';
echo $addAsFriend;

}
error_reporting(E_ERROR | E_PARSE);

if (!in_array($joe1['username'], $friendArray) || !$_GET['id'] == $joe1['id']) {
$addAsFriend = '<input type="submit" name="addfriend" value="Add Friend">';
echo $addAsFriend;
}

【问题讨论】:

  • 我很惊讶它在 $cool = $_GET['id]; 中做了任何事情。
  • 确保您没有在示例中引入类型。否则人们会一直指出它(除非这当然是导致问题的原因)。
  • 像猪一样的SQL注入......它会在哪里运行?
  • 不需要在每行代码之后调用error_reporting,是吗?一开始就调用一次就够了……

标签: php sql session


【解决方案1】:

!$_GET['id'] 很可能总是评估为 TRUE。以下行:

if (!in_array($joe1['username'], $friendArray) || !$_GET['id'] == $joe1['id']) 

可以阅读

if (!in_array($joe1['username'], $friendArray) || TRUE == $joe1['id']) 

你可能想要

if (!in_array($joe1['username'], $friendArray) || $_GET['id'] != $joe1['id']) 

说明 如果您尝试使用诸如 !$_GET['id'] 的布尔表达式,PHP 的动态类型转换将采用任何正整数或非空字符串并将它们评估为 TRUE。如果TRUE == $joe1['id'],您还有另一个布尔表达式测试,除非$joe1['id'] 为空,否则它将始终为真。

附带说明,您可以使用 Identical 和 Not Identical 运算符(=== 和 !==)来防止发生这种类型转换。

if (false == 0) {
    echo "This will be true";
}

if (true == 1) {
    echo "This will also be true";
}

if (false === 0) {
    echo "This will never echo";
}

if (true === 1) {
    echo "This will also never echo";
}

【讨论】:

  • 或遵循 OP 逻辑: if (!in_array($joe1['username'], $friendArray) || !($_GET['id'] == $joe1['id' ]))
  • @MortenSickel,是的,这可能就是他要找的东西。老实说,这有点难说。无论哪种情况,动态类型转换都是让他陷入困境的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 2016-04-25
  • 2022-11-20
相关资源
最近更新 更多