在if语句之外获取变量

时间:2016-05-23 08:55:54

标签: php

大家好我在外面和if语句之后获取变量有问题。代码解释很少:$gameid$id通过ajax发送到此文件。现在$id始终有一个值,if (isset($_GET['id'])) {为真。插入和选择查询工作得很好。问题是我无法在第二个if语句之后得到变量$answer$question[0]['question'];。当我将第二个if (isset($_GET['id'])) {更改为else {时,我可以得到它们但是无论如何在我的数据库中插入了两行,第一行是正确的,第二行是空的。现在为什么我不能在第二个if条件之后得到变量$answer$question[0]['question'];

错误日志显示:注意未定义的变量问题。

<?php

$hostname='localhost';
$user='';
$password='';
if (isset($_GET['gameid'])) {
    $gameid = $_GET['gameid'];
}
if (isset($_GET['id'])) {
    $id = $_GET['id'];
    echo $id;
}
if (isset($_GET['questionid'])) {
    $questionid = $_GET['questionid'];
}
$new = 0;

if (isset($_GET['gameid'])) {

    try {
        $dbh = new PDO("mysql:host=$hostname;dbname=max_com_db_socame",$user,$password);

        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
        $sql = "SELECT *
                FROM questions_de 
                WHERE id = '$questionid'
                LIMIT 1";

        if ($res = $dbh->query($sql)) {// need to add this line in your code
            // then after fetchColumn
            $question = $res->fetchAll();
        }

        if($question > 0) {
            //do something
        } else {
            echo "Sorry something happen wrong with our servers.";
        }
    }
    catch(PDOException $e) {
    }

    if ($question[0]["answerm²"] == 0 && $question[0]["answerm³"] == 0) {
        $answer = "answer_m";
    } else {
        $answer = "answerm³";
    }
}
if (isset($_GET['id'])) {
    try {
        $dbh = new PDO("mysql:host=$hostname;dbname=max_com_db_socame",$user,$password);

        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
        $sql = "SELECT username 
                FROM user 
                WHERE id = '$id' 
                LIMIT 1";

        if ($res = $dbh->query($sql)) {// need to add this line in your code
            // then after fetchColumn
            $user2name = $res->fetchAll();
        }

        if($user2name > 0) {
            //do something
        } else {
            echo "Sorry something happen wrong with our servers.";
        }
    }
    catch(PDOException $e) {


    }

    try {
        $dbh = new PDO("mysql:host=$hostname;dbname=max_com_db_socame",$user,$password);

        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
        $sql = "SELECT *
                FROM questions_de
                LIMIT 1"; // 
        if ($res = $dbh->query($sql)) {// need to add this line in your code
            // then after fetchColumn
            $question = $res->fetchAll();
        }

        if($question > 0) {
            //do something
        } else {

            echo "Sorry something happen wrong with our servers.";
        }
    }

    catch(PDOException $e) {

    }


    if ($question[0]["answerm²"] == 0 && $question[0]["answerm³"] == 0) {
        try {
            $dbh = new PDO("mysql:host=$hostname;dbname=max_com_db_socame",$user,$password);

            $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
            $sql = "INSERT INTO game_create (user1, user2, user1name, user2name, question, questionid, answer)
                    VALUES ('".$_COOKIE["userid"]."', '".$id."', '".$_COOKIE["username"]."', '".$user2name[0]["username"]."', '".$question[0]['question']."', '".$question[0]['id']."', '".$question[0]['answer_m']."')";

            if ($dbh->query($sql)) {
                //echo "New Record Inserted Successfully";
            } else{
                // echo "Data not successfully Inserted.";
            }

            $new = $dbh->lastInsertId();
            $dbh = null;
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }

        if ($new > 0) {

        } else {
            echo 'Sorry something went wrong.';
        }
        $answer = "answer_m";
    }
    else  {
        try {
            $dbh = new PDO("mysql:host=$hostname;dbname=max_com_db_socame",$user,$password);

            $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
            $sql = "INSERT INTO game_create (user1, user2, user1name, user2name, question, questionid, answer)
                    VALUES ('".$_COOKIE["userid"]."', '".$id."', '".$_COOKIE["username"]."', '".$user2name[0]["username"]."', '".$question[0]['question']."', '".$question[0]['id']."', '".$question[0]['answer_m³']."')";

            if ($dbh->query($sql)) {
                //echo "New Record Inserted Successfully";
            } else{
                // echo "Data not successfully Inserted.";
            }
            $new = $dbh->lastInsertId();
            $dbh = null;
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }

        if ($new > 0) {

        } else {
            echo 'Sorry something went wrong.';
        }
        $answer = "answerm³";

    }
}
?>

1 个答案:

答案 0 :(得分:0)

在线:

if (isset($_GET['gameid'])) {..}

您正在检查$_GET['gameid']是否已设置,换句话说,是否有值。如您所述,$_GET['gameid']仅在$_GET_[id]没有值时才有值。如你所说,$_GET_['id]总是有价值,所以$_GET['gameid']不会被初始化。

因此,它不会超过这个条件,也不会到达初始化变量的$question = $res->fetchAll();行。

同样的事情代表$answer,因为它在同一个if语句中,并且还对$question变量进行条件检查。

要解决此问题,请通过将$_GET['gameid']变量无条件地发送到PHP脚本来初始化该变量,或者删除if (isset($_GET['gameid'])) {..}语句。