PHP如果还有其他困惑

时间:2011-07-24 13:16:30

标签: php if-statement

我正在尝试根据3个条件制作图像外观和消失,

条件A =当用户登录并且其用户名符合显示名称(通过使用GET功能)时,它应回显“是”

条件B =当用户登录并且其用户名不符合显示名称时,它应回显“否”

条件C =当用户未登录时,它应该回显“否”

(我将图片换成是和否以便于参考)

通过登录,用户有一个cookie,其设置如下

  setcookie("user", $user, $expire);
  setcookie("loggedin", 1, $expire);

首先我获取用户登录时设置的cookie。

  $user1 = $_COOKIE["user"];
  $loggedin = $_COOKIE['loggedin'];
  $user = strtoupper($user1);

然后我得到我的球员名字

  $playername = $_GET['player'];

现在我做了条件

$uplayername = strtoupper($playername);

function showplusicon(){

    global $uplayername;

    if(($loggedin = "1") and ($user == $uplayername)){
        echo "yes";
    }
    else if (($loggedin = "1") and ($user != $uplayername)){
        echo "no";
    }
    else{
        echo "no";
    }
}

我没有看到问题是什么,但它一直被注册为条件B.

6 个答案:

答案 0 :(得分:3)

分配单个等号,而不是比较。

if(($loggedin == "1") and ($user == $uplayername)){
   ...

由于你实际上只有两种输出状态,所以你不需要3个条件;删除条件B。

答案 1 :(得分:2)

在函数$loggedin中未知变量showplusicon()。您需要将其添加为global以及global $uplayername

function showplusicon(){

   global $loggedin, $uplayername;

   // etc
}

由于这被接受但并非完全完成,我只是添加其他人指出的,需要使用==等于运算符而不是=赋值运算符。

if(($loggedin == "1")
             ^^^^

答案 2 :(得分:1)

$loggedin = "1"

当然应该是:

$loggedin == "1"

否则我会回显$ user和$ uplayername以查看它们是否不同。

答案 3 :(得分:1)

第一件事是第一件事: $loggedin = "1"是一个坏主意,因为您实际上将$loggedin赋予值“1”而不是比较。如果您确定数据类型,请使用==甚至===

此外,$loggedinshowplusicon()范围内不可用,因为您没有像$uplayername那样将其宣布为全局。

修复上面列出的问题,它应该会更好一些。

答案 4 :(得分:1)

如果您在理解自己的代码逻辑时遇到问题,一种简单的方法是将条件分配给自言自语的变量以便习惯它:

$userIsLoggedIn = $loggedin == "1";
$userIsPlayer = $user == $uplayername;

变量使您可以在一开始就轻松调试代码

var_dump($userIsLoggedIn, $userIsPlayer);

以便找出实际错误:

  1. 变量$loggedin未定义
  2. if子句正在设置值(=),而不是比较它(=====)。
  3. 然后,您可以使用更易读的代码流来使您的决策更加明显:

    if ($userIsLoggedIn) 
    { // user is logged in
        if ($userIsPlayer)
        { // user is player
           ...
        }
        else
        { // user is not player
           ...
        }
    } 
    else 
    { // user is not logged in
        ...
    }
    

    根据您想要输出的内容,甚至可以简化:

    if ($userIsLoggedIn && $userIsPlayer)
    {
        echo 'yes';
    } else
    {
        echo 'no';
    }
    

    希望这对你有所帮助。

答案 5 :(得分:0)

您的主要问题是变量的全局范围:

<?php 
//Get cookie info
$cookie['user'] = $_COOKIE["user"];
$cookie['loggedin'] = (isset($_COOKIE['loggedin'])&&$_COOKIE['loggedin']=='1')?TRUE:FALSE;

//Set user array
$user['user'] = strtoupper($cookie['user']);
$user['loggedin'] = $cookie['loggedin'];
$user['player'] = $_GET['player'];
$user['uplayername']=strtoupper($user['player']);


function showplusicon(){
    //Made $user array available within function
    global $user;

    if($user['loggedin'] === TRUE && $user['user'] == $user['uplayername']){
        echo "yes";
    }else{
        echo "no";
    }
}
?>