2015-10-12 55 views
-2

對不起,我是PHP MYSQL的初學者。 我想問問這將如何工作。我可以知道如何解決這個問題或我會添加什麼代碼?編輯其他用戶的用戶信息

方案: 我們有用戶類型ADMIN普通用戶, 我創建edit.php作爲ADMIN編輯用戶帳戶櫃面丟失的密碼等等,但我的問題是當我點擊特定表格中的編輯按鈕時。

查看照片下面,我以Admin,employee.php的身份在這裏登錄。 所以我選擇用22 enter image description here

我曾經在這裏取的ID代碼的ID的用戶testFN在這裏:

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

當我點擊編輯按鈕,它會打開頁面edit.php,使用此URL 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

'$ _SESSION ['user']'的值是什麼? –

+0

@ Fred-ii- user_id這是用戶的id – Edmhar

+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值或基本上來自客戶端的任何內容。

+0

我很抱歉,我是PhP MySQL的stil初學者,關於授權訪問的條件,我知道我會有這種情況。 我想要做的是,所以我以管理員身份登錄,我想編輯特定用戶。然後代替輸入值中的用戶信息,它顯示登錄的用戶信息。 – Edmhar

+0

$ userRow與$查詢相同 – Edmhar

+1

@Edmhar:對,這是因爲您從數據庫獲取登錄用戶信息而不是指定用戶。獲取查詢字符串用戶標識的信息,而不是會話用戶標識。 (另外,你可能要仔細檢查一下'UPDATE'語句,如果沒有'WHERE'子句,它會更新每個*用戶記錄。) – David