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