5

我有一个脚本,当用户在某些条件下点击“拒绝”按钮时运行。当它运行时,它应该撤销对特定区域的访问权限,由于某种原因,该脚本不起作用——因为它不会更新 MYSQL DB,也不会出现错误。

$username =  $_SESSION["USER"]["Username"]; 

mysql_connect("x", "y", "z") or die(mysql_error()); 
mysql_select_db("database") or die(mysql_error()); 
mysql_query("UPDATE `users` SET `SeceretArea`='Unauth' WHERE `Username`='$username'") or die(mysql_error());
4

4 回答 4

3

答案已更新以总结调试过程。

如果没有错误,那么数据库条目没有发生的原因有三种可能性:

  • 表中没有USERNAME列等于的条目$database
  • 没有值被传递给$database
  • 有一个值被传递给$database,但该值没有被替换到查询中。

根据我的个人经验,mysql_query()在执行查询之前不一定要替换变量值。首先将查询字符串创建到一个变量中,然后将其传递给mysql_query(). 您当前的设置不会替换$username为它的值。你可以做的是:

...
$sql = "UPDATE `users` SET `SeceretArea`='Unauth' WHERE `Username`='$username'";
mysql_query($sql) or die(mysql_error());

除此之外,请检查您的表格以确保有一行具有您想要的值USERNAMEvar_dump()$username看看它是否是你想要的价值。

此外,您真的应该考虑切换到mysqliPDO。如果您不想迁移到目标模块,可以使用mysqli's 过程函数。

于 2012-07-23T15:16:43.797 回答
0

您需要确保session_start();在脚本顶部调用。没有它,您的$username变量将永远不会被设置。

于 2012-07-23T15:14:06.693 回答
0

确保$username带有您传递的会话值。

echo "$username";

只有在你得到正确的情况下才能继续查询。

此外,请确保表的字段名称正确。我注意到SecretArea可能是您表中的SecretArea 。

于 2012-07-23T15:24:45.450 回答
0

只是一些想法:

  • UserName数据库中是否有与您在 WHEREing的确切值相符的条目?
  • 您是否在未提交的事务中?
  • 您的 SQL 语句是否会干扰另一个同名表?
于 2012-07-23T15:25:18.477 回答