2012-10-16 69 views
0

我正在使用開放源碼的ajax聊天程序來處理羣聊中的某些用戶。 該程序工作正常,但它並沒有建立一種方式,讓用戶更改那裏的密碼 或我沒有直接從數據庫管理用戶。所以我把這個PHP腳本放在一起。它能夠顯示來自數據庫的數據,但不會更新它。我使用Xampp作爲MySQl和Apache服務器。我計劃在IIS啓動並運行後轉移到IIS。這是我的桌子的佈局。用於更新ajax聊天的MySQl數據庫的PHP表單

ID Username Password Role Channels EMail 

爲了節省一些時間,我只會發布update和update_ac腳本。 當使用Windows 7作爲我的服務器時,我提交更新後得到未定義的變量。 它仍然表示更新成功,但數據庫未更新。 在Windows XP作爲服務器,我沒有得到未定義的變量錯誤。 如果有人可以請給我一些建議,我做錯了什麼或指向我在這裏的另一個解決方案,我將不勝感激。

update.php 
// get value of id that sent from address bar 
$id=$_GET['id']; 

// Retrieve data from database 
$sql="SELECT * FROM $tbl_name WHERE id='$id'"; 
$result=mysql_query($sql); 

$rows=mysql_fetch_array($result); 
?> 

<table width="400" border="0" cellspacing="10" cellpadding="0"> 
<tr> 
<form name="form1" method="post" action="update_ac.php"> 
<td> 
<table width="100%" border="10" cellspacing="1" cellpadding="10"> 

<tr> 
<td colspan="3"><strong>Update User</strong> </td> 
</tr> 
<center> 
<tr> 
<td align="center"><strong>Username</strong></td> 
<td align="center"><strong>Password</strong></td> 
<td align="center"><strong>Role</strong></td> 
<td align="center"><strong>Channels</strong></td> 
<td align="center"><strong>EMail</strong></td> 
</tr> 
</center> 
<tr> 
<td align="center"> 
<input name="username" type="text" id="Username" value="<?php echo 
$rows['Username']; 
?>" size="15"> 
</td> 

<td align="center"> 
<input name="password" type="Password" id="Password" value="<?php echo  
$rows['Password']; ?>" size="15"> 
</td> 

<td> 
<input name="role" type="text" id="Role" value="<?php echo $rows['Role']; ?>" size="1"> 
</td> 

<td> 
<input name="channels" type="text" id="Channels" value="<?php echo $rows['Channels']; 
?>" size="10"> 
</td> 


<td> 
<input name="EMail" type="text" id="EMail" value="<?php echo $rows['EMail']; ?>" 
size="25"> 
</td> 

<tr> 
<td> 
<input name="id" type="hidden" id="ID" value="<?php echo $rows['ID']; ?>"> 
</td> 
<td align="center"> 
<input type="submit" name="Submit" value="Submit"> 
</td> 

</tr> 
update_ac.php 
// update data in mysql database 
$sql = "UPDATE $tbl_name SET Username='$Username', Password='$Password', Role='$Role', 
Channels='$Channels', EMail='$EMail' WHERE id='$id'"; 
$result = mysql_query($sql); 

// if successfully updated. 
if($result) 
{ 

echo "Successful"; 
echo "<BR>"; 
echo "<a href='index.php'>View result</a>"; 

} 

else 
{ 
echo "ERROR"; 
} 

?> 
+0

你很容易受到[SQL注入攻擊](http://bobby-tables.com)。停止處理這段代碼並學習如何防止這些攻擊 –

回答

0

在這裏,您沒有從中發佈的價值,我應該使用$_POST來獲取發佈的值。

// update data in mysql database 
$sql = "UPDATE $tbl_name SET Username='$Username', Password='$Password', Role='$Role', 
Channels='$Channels', EMail='$EMail' WHERE id='$id'"; 

所以,你必須得到公佈值folows

$Username = $_POST['Username']; 
$Password = $_POST['Password']; 
$Role  = $_POST['Role']; 
$Channels = $_POST['Channels']; 
$EMail  = $_POST['EMail']; 
$id  = $_POST['id']; 
+0

我已經嘗試過發佈的值已經和那沒有工作。至於SQl注射,因爲這只是被我的團隊中的一些人用來更新用戶,我並不擔心它。 – fjwilson

+0

我能夠使腳本工作,我感謝所有的幫助。 – fjwilson

0

我發現改變名稱=「密碼NAME =」密碼」固定我的腳本。 我不得不做同樣的一切但它現在可以工作