当用户忘记用户名时,我正在尝试返回用户名。 我让它再次验证他们的电子邮件地址,但由于某种原因,它一直说"错误:找不到用户名"。我希望我正在使用正确的 mysqli 语法。
if (isset($_POST['user'])) {
$email = mysqli_real_escape_string($con, $_POST['email']);
$username = "";
if (!eregi("^[_a-z0-9-]+('.[_a-z0-9-]+)*@[a-z0-9-]+('.[a-z0-9-]+)*('.[a-z]{2,3})$", $email)) {
$errmsg = 'Error: ' . $email . ' is not a valid email address';
} else {
$query = "SELECT email FROM admin WHERE email = '$email'";
$results = mysqli_query($con, $query);
$query2 = mysqli_fetch_array($results);
if ($query2 == 0) {
$errmsg = 'Error: ' . $email . ' is not found, please try again';
}
if (!errmsg) {
$getuname = "SELECT * FROM admin WHERE email = '$email'";
if (!mysqli_query($con, $getuname)) {
die('Error: ' . mysqli_error($con));
}
$row = mysql_fetch_array($getuname);
}
$username = '<div class="registersuccess">Your username is: ' . $row['username'] . '</div>';
}
$username = '<div class="registererror">Error: cannot find username</div>';
mysqli_close($con);
}
在这方面,我是一个菜鸟,但我很确定这是正确的。 如果不是,我哪里出错了?
这些是我注意到的一些错误:
-
你正在做
if (!errmsg)
但没有这样的常数,你想要if (!$errmsg)
。 -
正如Marc B指出的那样,你正在做
$row = mysql_fetch_array($getuname);
但你想要$row = mysqli_fetch_array($getuname);
。
此外,您描述的特定问题可能是因为 mysqli_close
语句之前的$username
声明。您正在重置 $username
的值,无论数据库查询的结果如何,它都会始终回显相同的消息。
$username = "";
if(condition)
{
# code ...
}
else
{
# code ...
}
$username = '<div class="registererror">Error: cannot find username</div>';
mysqli_close($con);
这是代码中的许多逻辑错误之一。使用适当的缩进来构建if-else
块,您不应该遇到此问题。
我在你的代码中发现了一些错误,你可以在Mark B和Amal Murali的答案中看到错误。 让我让你的else
块简单明了。只能使用 1 个查询,而不是 2 个查询。
else {
$query = mysqli_query("SELECT * FROM admin WHERE email = '$email'");
$row = mysqli_fetch_array($query);
$numrows = mysqli_num_rows($query);
if (!$errmsg){
if($numrows == 0) {
$errmsg = 'Error: '.$email.' is not found, please try again';
// or here you can add message like Cannot find username
}
else
{
$username = '<div class="registersuccess">Your username is: '.$row['username'].'</div>';
}
}
你的代码是一场灾难。您正在使用 ereg
,自石器时代以来已被弃用。您正在混合对 mysql(无i
)和 mysqli(带 i
)库的调用。它们不可互换,
您需要切换到preg
函数,并在单个 mysql 库上进行标准化。由于mysql
也已弃用,因此请仅使用mysqli
。
$row = mysql_fetch_array($getuname);
^^^---note the LACK of an i
if (!errmsg){
^^^--note the lack of a $ sign, meaning this is undefined/undeclared constant.
更改这段代码:
if (!errmsg){
$getuname = "SELECT * FROM admin WHERE email = '$email'";
if (!mysqli_query($con,$getuname))
{
die('Error: ' . mysqli_error($con));
}
$row = mysql_fetch_array($getuname);
}
$username = '<div class="registersuccess">Your username is: '.$row['username'].'</div>';
}
$username = '<div class="registererror">Error: cannot find username</div>';
自:
if (!errmsg){
$getuname = "SELECT * FROM admin WHERE email = '$email'";
$uresult = mysqli_query($con, $getuname);
if (!$uresult))
{
die('Error: ' . mysqli_error($con));
}
$row = mysqli_fetch_array($uresult);
if ($row) {
$username = '<div class="registersuccess">Your username is: '.$row['username'].'</div>';
} else {
$username = '<div class="registererror">Error: cannot find username</div>';
}
}
你的错误:
- 你打电话给
mysql_fetch_array
而不是mysqli_fetch_array
. - 您正在将 SQL 字符串传递给
mysql_fetch_array
,而不是mysqli_query
的结果。 - 您没有检查是否返回了一行,您只是无条件地设置
$username
- 首先是成功消息,然后是失败消息。