【问题标题】:Edit User Information for other user编辑其他用户的用户信息
【发布时间】:2015-10-12 02:59:04
【问题描述】:

对不起,我是 PHP MYSQL 的初学者。 我想问这将如何工作。我可以知道如何解决这个问题或我将添加什么代码?

场景: 我们有用户类型 ADMIN 和 NORMAL USER, 我创建了 edit.php 以将用户帐户编辑为 ADMIN 以防万一密码丢失等,但我遇到的问题是当我单击特定表中的编辑按钮时。

见下图,我在这里以管理员身份登录,employee.php。 所以我选择了id为22的用户testFN

我在这里用来获取 id 的代码在这里:

<td><a href="edit.php?id=<?php echo $row['user_id']; ?>" >Edit</a></td>

当我点击 EDIT 按钮时,它会打开页面 edit.php,带有这个 url

所以我的结果不等于我想要的,输入框的信息来自我正在使用/登录的用户,而不是来自我选择编辑的用户。

我用来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']; ?>"  >

【问题讨论】:

  • $_SESSION['user'] 的值是多少?
  • @Fred-ii- user_id 是用户的id
  • 所以它是一个字符串?我没有问列名,我问的是会话数组值是什么。
  • @Fred-ii- 不,它是 INT(自动增量)。
  • 如果它不工作,然后检查错误,使用错误报告和mysql_error() 反对您的查询,和/或询问大卫;他在下面给了你一个答案。它现在基本上不在我的手中;-) 这个dbconnect.php 是未知的。

标签: php mysql post get sql-update


【解决方案1】:

这是您为该文本输入设置值的地方:

value="<?php echo $userRow['user_id']; ?>"

$userRow 来自哪里?这个:

$userRow=mysql_fetch_array($res);

使用什么查询来获取数据?这个:

$res=mysql_query("SELECT * FROM accounts WHERE user_id=".$_SESSION['user']);

所以...您专门从登录会话用户那里获取数据,而不是从查询字符串中指定的用户那里获取数据。只需使用查询字符串值而不是会话值即可。

重要:

  1. 直接在 SQL 查询中使用用户提供的值称为 SQL 注入漏洞。这是一件非常糟糕的事情。您将要使用查询参数和准备好的语句。 This is a good place to start reading。

  2. 您真的想要检查登录用户是否授权在允许他们这样做之前编辑指定的用户。任何用户都可以手动添加/更改查询字符串值或 POST 值或基本上来自客户端的任何内容。

【讨论】:

  • 很抱歉我还是 PhP MySQL 的初学者,关于授权访问的条件我知道我会有那个条件。我想做的是,所以我以管理员身份登录,我想编辑特定用户。然后显示登录的用户信息,而不是输入值中的用户信息。
  • $userRow 与 $query 相同
  • @Edmhar:对,那是因为您从数据库而不是指定用户获取登录用户信息。获取查询字符串用户 ID 而不是会话用户 ID 的信息。 (另外,您可能需要仔细检查 UPDATE 语句。如果没有 WHERE 子句,它将更新每个用户记录。)
  • 谢谢,我现在添加了 WHERE user_id= 'user' ,对吗?但仍然不知道如何编辑我想要的特定用户。
  • @Edmhar:为了获取有关用户的信息并将该信息保存回数据库,您需要有一个指定用户 ID 的 WHERE 子句。用户 ID 是您从 $_GET[] 集合中获得的。我不知道还能怎么解释。您有一个具有所需用户 ID 的变量,只需使用该变量即可。 (重要提示:在准备好的语句中将其用作查询参数,不要像现在一样将其添加到字符串中。)
猜你喜欢
  • 2012-11-09
  • 2019-03-03
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 2021-07-15
相关资源
最近更新 更多