抱歉,我是PHP MYSQL的初学者。 我想问一下这是如何工作的。我可以知道如何解决此问题或我将添加哪些代码?
方案: 我们有用户类型 ADMIN 和 NORMAL USER , 我创建了 edit.php 来编辑用户帐户作为 ADMIN 输入丢失的密码等等。但是当我单击特定表格中的“编辑”按钮时,我遇到了问题。
参见图片下面,我以Admin,employee.php身份登录。 所以我选择ID为22的用户testFN
我在这里用来获取id的代码在这里:
<td><a href="edit.php?id=<?php echo $row['user_id']; ?>" >Edit</a></td>
当我点击编辑按钮时,它会打开页面 edit.php ,并带有此网址
所以我的结果与我想要的不一样,输入框的信息来自我使用/登录的用户,而不是我选择编辑的用户。
我以前用于 EDIT.PHP 的代码在这里:
<?php
session_start();
include_once 'dbconnect.php';
if(!isset($_SESSION['user']))
{ header("Location: edit.php"); }
$res=mysql_query("SELECT * FROM accounts WHERE user_id=".$_SESSION['user']);
$userRow=mysql_fetch_array($res);
if(isset($_GET['user'])) {
$id = $_GET['user'];
if(isset($_POST['submit'])) {
$pass = md5(mysql_real_escape_string($_POST['pass']));
$aFName = mysql_real_escape_string($_POST['aFName']);
$aLName = mysql_real_escape_string($_POST['aLName']);
$aMName = mysql_real_escape_string($_POST['aMName']);
$aContact = mysql_real_escape_string($_POST['aContact']);
$aAddress = mysql_real_escape_string($_POST['aAddress']);
$aGender = mysql_real_escape_string($_POST['aGender']);
$utype = mysql_real_escape_string($_POST['utype']);
$query3=mysql_query("UPDATE accounts SET pass='$pass', agentFName ='$aFName', agentLName = '$aLName',
agentMName = '$aMName', agentContact = '$aContact', agentAddress = '$aAddress',
agentGender = '$aGender', user_type = '$utype' ");
if($query3)
{ header("Location: home.php"); }
}//end of post sumbit
}//end of GET
?>
/** HTML IS HERE **/
Agent ID: <input type="text" id="agentCode" name="agentCode" required="required" value="<?php echo $userRow['user_id']; ?>" >
First Name: <input type="text" id="agentCode" name="aFName" required="required" value="<?php echo $userRow['agentFname']; ?>" >
Middle Name: <input type="text" id="agentCode" name="aMName" required="required" value="<?php echo $userRow['agentMname']; ?>" >
Last Name: <input type="text" id="agentCode" name="aLName" required="required" value="<?php echo $userRow['agentLname']; ?>" >
答案 0 :(得分:3)
您可以在此处设置该文本输入的值:
value="<?php echo $userRow['user_id']; ?>"
$userRow
来自哪里?这样:
$userRow=mysql_fetch_array($res);
用于获取数据的查询是什么?这样:
$res=mysql_query("SELECT * FROM accounts WHERE user_id=".$_SESSION['user']);
所以......你专门从登录的会话用户那里获取数据,而不是在查询字符串上指定的数据。只需使用查询字符串值而不是会话值。
重要:强>
在SQL查询中直接使用用户提供的值称为SQL注入漏洞。这是一件非常糟糕的事情。您将要使用查询参数和预准备语句。 This is a good place to start reading
。任何用户都可以手动添加/更改查询字符串值或POST值,或基本上来自客户端的任何内容。