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);
首先,因为这是我的第一个问题,感谢所有贡献者,在我作为新手开发人员解决遇到的各种问题时,这个社区给了我极大的帮助。
所以我面临的问题对我来说很奇怪。我在下面包含了完整的代码减去 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);