Isset无法识别外部变量

时间:2017-04-27 22:40:18

标签: php mysqli isset

首先,因为这是我的第一个问题,感谢所有的贡献者,这个社区帮助了我,因为我已经解决了我遇到的各种问题,因为我是一名新手开发人员。

所以我面临的问题对我来说很奇怪。我已经包含了下面的完整代码减去html,因为它工作正常。在代码中我声明了几个变量,$ userID是从$ _SESSION ['user']设置的,这是我用来识别当前登录用户的内容。这适用于许多其他页面。我还声明了$ groupID变量,它是从$ queryString设置的,查询字符串只是从前一页传递的groupID,没什么特别的。我遇到的这个问题是当我尝试运行按钮付费和/或更新团队名称时。

由于某种原因,$ userID正在正确传递,但$ groupID不是。我知道语法是正确的,因为如果我在查询中手动放置groupID它可以工作,但是当我尝试调用$ groupID变量时它不会。这似乎只在运行UPDATE查询时发生,并且与INSERT,SELECT和DELETE一起正常工作,但似乎不想用于UPDATE。

我的问题是,为什么会发生这种情况,为什么我的代码可以看到一个已声明但未声明的变量?为什么它可以在其他类型的查询中工作但不是这个?正如我所说我是新手,所以UPDATE查询可能还有一些我还不了解的东西。我感谢你们所提供的任何指导。

ob_start();
session_start();
require_once 'dbconnect.php';

// if session is not set this will redirect to login page
if( !isset($_SESSION['user']) ) {
    header("Location: index.php");
    exit;
}

// find out the domain:
$domain = $_SERVER['HTTP_HOST'];
// find out the path to the current file:
$path = $_SERVER['SCRIPT_NAME'];
// find out the QueryString:
$queryString = $_SERVER['QUERY_STRING'];
// put it all together:
$url = "http://" . $domain . $path . "?" . $queryString;

$groupID=$queryString;
$user=$_SESSION['user'];
$userID=$user;
$error=false;

// pay fee, in progress
if ( isset($_POST['btn-payfee']) ) {

    if( !$error ) {
    $query = "UPDATE membership SET paid = '1' WHERE userID='$userID' AND groupID='$groupID'";
    $res9 = mysqli_query($con,$query);

    if (!$res9) {
    printf("Error: %s\n", mysqli_error($con));
    exit();
    }

    if ($res9) {
            $errTyp = "success";
            $errMSG = "Account successfully updated";
            //header("Location: dashboard.php");

        } else {
            $errTyp = "danger";
            $errMSG = "Something went wrong, try again later...";   
        }   
    }
}

// update team name
if ( isset($_POST['btn-updatename']) ) {

    // clean user inputs to prevent sql injections
    $teamName = trim($_POST['teamName']);
    $teamName = strip_tags($teamName);
    $teamName = htmlspecialchars($teamName);

    // if there's no error, continue to signup
    if( !$error ) {

        $query = "UPDATE membership SET teamName='$teamName' WHERE userID='$userID' AND groupID='$groupID'";
        $group = mysqli_query($con,$query);

        if ($group) {
            $errTyp = "success";
            $errMSG = "Account successfully updated";
            header("Location: fantasy-group.php?451f70f10dfab9b3b4a12683cef850a5");

        } else {
            $errTyp = "danger";
            $errMSG = "Something went wrong, try again later...";   
        }   
    }
}



        <!-- change team name -->               
        <div class="form-group">
            <div class="input-group">
            <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" autocomplete="on">
                <label class="input-group mb-2 mr-sm-2 mb-sm-0" for="inlineFormInput">Team Name</label>
                <div class="input-group">
                    <span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
                    <input type="text" name="teamName" class="form-control" placeholder="<?php echo $row2['teamName']; ?>" maxlength="32" / >
                    <button type="submit" class="btn btn-primary btn-sm" name="btn-updatename">Update Name</button>
                </div>

            </div>
            <span class="text-danger"><?php echo $nameError; ?></span>
        </div>

1 个答案:

答案 0 :(得分:1)

您似乎正在使用整个查询字符串填充 $ groupId 。您需要 $ _ GET $ _ POST $ _ REQUEST 中的参数。例如: $ _ GET [&#39; group_id&#39;] $ _ POST [&#39; group_id&#39;] $ _ REQUEST [& #39; GROUP_ID&#39;。]

此外,您试图将未经过滤的非转义用户输入传递到易受 sql注入攻击的数据库查询中。您需要查看{{3}}并过滤输入。例如:

$groupID = filter_input(INPUT_POST, "group_id", FILTER_VALIDATE_INT);