编辑其他用户的用户信息

时间:2015-10-12 02:59:04

标签: php mysql post get sql-update

抱歉,我是PHP MYSQL的初学者。 我想问一下这是如何工作的。我可以知道如何解决此问题或我将添加哪些代码?

方案: 我们有用户类型 ADMIN NORMAL USER , 我创建了 edit.php 来编辑用户帐户作为 ADMIN 输入丢失的密码等等。但是当我单击特定表格中的“编辑”按钮时,我遇到了问题。

参见图片下面,我以Admin,employee.php身份登录。 所以我选择ID为22的用户testFN  enter image description here

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

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

当我点击编辑按钮时,它会打开页面 edit.php ,并带有此网址 enter image description here

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

enter image description here

我以前用于 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']; ?>"  >

1 个答案:

答案 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']);

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

重要:

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

  2. 。任何用户都可以手动添加/更改查询字符串值或POST值,或基本上来自客户端的任何内容。