PHP更新到数据库无法正常工作

时间:2014-01-22 08:10:59

标签: php mysql

我整天都在拔头发试图让它发挥作用。我是PHP的新手,但在过去取得了一些合理的成功。我无法弄清楚这一点。

下面是为了更新我的MySQL数据库中的表,代码给了我成功,但更改没有显示在我的数据库中。可能是什么问题?

我的第一页看起来像这样(config.php将我连接到数据库):

<?php
include("config.php");
$sql="SELECT * FROM admin";
$result=mysql_query($sql);
?>

<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>
<table width="400" border="1" cellspacing="0" cellpadding="3">
<tr>
<td colspan="4"><strong>List data from mysql </strong> </td>
</tr>

<tr>
<td align="center"><strong>First Name</strong></td>
<td align="center"><strong>Last Name</strong></td>
<td align="center"><strong>User Level</strong></td>
<td align="center"><strong>Update</strong></td>
</tr>

<?php
while($rows=mysql_fetch_array($result)){
?>

<tr>
<td><? echo $rows['firstname']; ?></td>
<td><? echo $rows['lastname']; ?></td>
<td><? echo $rows['userlevel']; ?></td>

<td align="center"><a href="update.php?id=<? echo $rows['id']; ?>">update</a></td>
</tr>

<?php
}
?>

</table>
</td>
</tr>
</table>

<?php
mysql_close();
?>


</center>
</body>
</html>

当您点击更新时,它会转到包含以下代码的页面:

<?php
include("config.php");


$id=$_GET['id'];

$sql="SELECT * FROM admin WHERE id='$id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);
?>
<center>
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<form name="form1" method="post" action="update_ac.php">
<td>
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>&nbsp;</td>
<td colspan="3"><strong>Update data in mysql</strong> </td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center"><strong>First Name</strong></td>
<td align="center"><strong>Last Name</strong></td>
<td align="center"><strong>User Level (1 to 4)</strong></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="center">
<? echo $rows['firstname']; ?>
</td>
<td align="center">
<input name="lastname" type="text" id="lastname" value="<? echo $rows['lastname']; ?>" />
</td>
<td>
<input name="userlevel" type="text" id="userlevel" value="<? echo $rows['userlevel']; ?>" size="15">
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input name="id" type="hidden" id="id" value="<? echo $rows['id']; ?>">
</td>
<td align="center">
<input type="submit" name="Submit" value="Submit">
</td>
<td>&nbsp;</td>
</tr>
</table>
</td>
</form>
</tr>
</table>

</center>
</body>
</html>

然后重定向到这个:

<?php
include("config.php");

// update data in mysql database 
$sql="UPDATE admin SET lastname='$lastname', userlevel='$userlevel' WHERE id='$id'";

$result=mysql_query($sql);

// if successfully updated. 
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='welcome.php'>Return to Dashboard</a>";
}

else {
echo "ERROR";
}

?>

它总是回想起它已经写成功,但我从来没有让它工作过一次。问题可能是什么?

感谢。

4 个答案:

答案 0 :(得分:-1)

您永远不会设置变量 - 您将变量分配给您从未声明过的更新语句。

$id = $_GET('id')
$userlevel = $_GET('userlevel')
$lastname = $_GET('lastname')

也正如X.L.Ant所说使用预处理语句 - 你正在寻找简单的mysql注入你正在尝试的东西

对于不使用预准备语句而言不是一个好解决方案的其他选项是在该更新和select语句中的每个变量周围使用mysqli_real_escape_string()

答案 1 :(得分:-1)

您的上一个文件没有代码可以从表单中获取值。尝试修改:

<?php
include("config.php");

$userlevel = $_POST['userlevel'];
$lastname = $_POST['lastname'];
$id = $_POST['id'];
// update data in mysql database 
$sql="UPDATE admin SET lastname='$lastname', userlevel='$userlevel' WHERE id='$id'";

关于这个也只是几个注意事项;

  1. 阅读数据清理,因为此代码对SQL注入漏洞持开放态度。永远不要假设传递到脚本的数据是干净的或者您期望的数据。
  2. 在PHP中停止使用mysql_ *函数,因为从PHP 5.5开始不推荐使用它们。交换到改进的mysqli_ *函数。
  3. 希望这会有所帮助:)

答案 2 :(得分:-1)

问题在于我确定您的PHP配置中没有register_globals ON,因此$lastname$userlevel$id为空。

执行查询get,因为没有SQL语法错误。它尝试将lastname和userlevel设置为空,其中id为空。这无处可去,这就是为什么没有发生的原因。

您必须使用$_POST['lastname']$_POST['userlevel']$_POST['id']代替。

但是,在数据库中插入/更新它们之前,请确保您正在逃避这些值,否则会带来SQL注入攻击的可能性。

您还应该切换到mysqli或PDO,因为不推荐使用mysql_ *函数,并且将在较新版本的PHP中删除它们。

预备语句还可以为您提供针对SQL注入的安全性。

一个例子:

$connection = mysqli_connect("host","user","pw","dbname");

$sql = "UPDATE admin SET lastname=?, userlevel=? WHERE id=?";
$stmt = mysqli_prepare($connection, $sql);
mysqli_stmt_bind_param($stmt, "ssi", $_POST['lastname'], $_POST['userlevel'], $_POST['id']);
mysqli_stmt_execute($stmt);

答案 3 :(得分:-2)

您上一个PHP页面不知道$id$lastname$userlevel是什么。然后我假设您的数据库不允许NULL值,并且没有发生任何事情......正如预期的那样。