Isset 不识别外部变量

Isset not recognizing external variable

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

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

由于某种原因,$userID 被正确传递,但 $groupID 没有被正确传递。我知道语法是正确的,因为如果我在查询中手动放置一个 groupID 它会起作用,但是当我尝试调用 $groupID 变量时它不会。这似乎只发生在 运行 更新一个查询并且与 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>

您似乎在用整个查询字符串填充 $groupId。您需要来自 $_GET$_POST$_REQUEST 的参数。例如:$_GET['group_id']$_POST['group_id']$_REQUEST ['group_id'].

此外,您正试图将未过滤、未转义的用户输入传递到易受 sql 注入 攻击的数据库查询中。您将需要查看 prepared statements 并过滤您的输入。示例:

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