我有一个问题,我无法找到解决问题的正确方法。 我有一个应用程序,用户名是emailadres。用户可以在名为edit.php的页面上更改他/她的信息
我还在进行验证,检查编辑时是否存在用户名。这是为了防止用户A可以在另一个现有用户的用户名中编辑他的用户名。我使用以下函数执行此操作。
$sql=mysql_query("SELECT username FROM users WHERE username='".mysql_real_escape_string($_POST['username'])."'");
if(mysql_num_rows($sql)>=1) { echo "Exists"; } else { /* update database */ }

这很有效,但现在我才有问题。因为用户不仅可以在editform中编辑USERNAME,还可以编辑PHONE,ZIP,CITY。如果用户编辑他的ZIP,CITY或PHONE,我将在逻辑上“存在”,因为用户名也会在我的编辑表格中发布。
我的问题:如何设置它,以便在与用户的当前用户名不同时仅检查用户名。例如,如果test@test.com(用户名)编辑了他的信息,它仍然是test@test.com,它将不会被检查,当在test123@test.com中编辑用户名test@test.com时,它将被检查?
我想我需要设置一个双重检查,就像mysql_num_rows($ sql)> = 1 OR == 我对吗?任何帮助都会很棒。
答案 0 :(得分:0)
要使新用户名有效,您的检查应该是:此用户名没有行,或者该行实际上是当前用户。
因此,您需要在查询中选择ID(而不是您不需要的用户名)并更改您的if
语句以测试"没有结果,或者一个结果ID =当前用户ID"。
当然我假设你有一个ID作为你的表的主键,并且这个ID存储在当前用户的会话中。
另外,请考虑使用PDO而不是mysql_query ...
答案 1 :(得分:0)
这可以通过在处理表单之前使用ajax执行验证用户来解决,使用您当前使用的SQL查询:
$bIsModule = (bool) $this->getEvent()
->getApplication()
->getServiceManager()
->get('modulemanager')
->getModule('ZfcUser'); // returns true or false
如果ajax查询返回“true”或“非空数据”,则用户存在且不可用,否则,用户可以使用。
几个月前,我在注册表单中做了类似的事情。在“用户名”字段中,如果用户可用变为绿色,如果不可用,则变为红色。验证是通过更改字段完成的。
Signup Example with verification
建议使用PDO而不是php mysql_query(在新的PHP版本中不推荐使用)。