我在检查用户名是否存在时遇到问题。如果确实存在,它就可以工作。但如果用户名不存在,它只会将我发送到empy页面。它似乎没有进入下一个声明。
这里是代码
<?php
if($_POST[username] && $_POST[email] && isset($_POST[password]) && isset($_POST[password2]) && $_POST[password] == $_POST[password2])
{
include ('*********'); /my connection to the database
$username = $_POST[username];
//check with the registred members
$query2 = "SELECT * FROM registredMembers WHERE username='$username'";
$result2 = mysql_query($query2, $conn) or die(mysql_error());
$existing_users = mysql_num_rows($result2) or die(mysql_error());
// check with the temporarly members, waiting to activate account
$query3 = "SELECT * FROM tempMembers WHERE username='$username'";
$result3 = mysql_query($query3, $conn) or die(mysql_error());
$existing_users2 = mysql_num_rows($result3) or die(mysql_error());
if($existing_users != 0 && $existing_users2 != 0)
{
echo "<div id='msg'>Användarnamnet är upptaget</div>";
}
else
{
$confirmCode = md5(uniqid(rand()));
$query = "INSERT INTO tempMembers VALUES ('$confirmCode', '$_POST[username]', '$_POST[email]', '$_POST[password]')";
$result = mysql_query($query, $conn) or die(mysql_error());
if($result)
{
$to = $_POST[email];
$subject = utf8_decode("Här är din bekräftelselänk");
$header = utf8_decode("Från Adib Haider (PHP-Projekt)");
$message = "Din bekräftelselänk \r\n";
$message.= "Klicka på länken för att aktivera ditt konto \r\n";
$message.= "http://labb.vgy.se/~adibbinhar/blogg/confirmation.php?passkey=$confirmCode";
$sentmail = mail($to, $subject, utf8_decode($message), $header);
if($sentmail)
echo "<div id='msg'>Aktiveringsmailet har skickat till din e-postadress</div>";
else
echo "<div id='msg'>Aktiveringsmailet skickades inte</div>";
}
else
echo "<div id='msg'>Testa igen</div>";
}
}
else
echo "<div id='msg'>Prova igen</div>";
文本是瑞典语希望你可以忍受:P
答案 0 :(得分:2)
将“激活”列添加到您的mysql:
<强> MYSQL 强>
ID | USERNAME | [...] FIELDS [...] | ACTIVATED
1 | Foo | [...] FIELDS [...] | 1
<强> PHP 强>
[...]
$query2 = 'SELECT * FROM registredMembers WHERE username='. mysql_real_escape_string($username);
$result = mysql_query($query, $conn) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
if($row['activated'] == 1) {
// User activated
} else {
// Send activation email
}
}
未经测试,但可以胜任。
答案 1 :(得分:1)
我会检查tempMembers是否确实存在,并且当您尝试使用数据库中已存在的用户名或电子邮件时,数据库中没有任何阻止插入成功的唯一约束。
如果INSERT mysql_query因此返回0,你死了mysql_error(),你甚至无法获得else子句,因为$ result不能为0。
(是的,我希望你在进入这个功能之前清理你的输入: - )
答案 2 :(得分:1)
问题在于你的if语句。
if($existing_users != 0 && $existing_users2 != 0)
应该是
if($existing_users != 0 || $existing_users2 != 0)
我不知道你的系统是如何工作的,但我想tempMembers
表中存在的用户名不一定存在于registredMembers
表中。
您希望if语句说:如果用户存在于tempMembers
表或registeredMembers
表中。
修改强>:
我猜你得到的空页是一个页面,如果你激活它们会显示错误。
尝试在php脚本的顶部添加:
error_reporting(E_ALL);
ini_set('display_errors', 1);
答案 3 :(得分:0)
/我查看了您的代码并添加了一些注射保护,并希望能够解决您的问题。 就像Joachim说的那样,当mysql_num_rows没有返回任何内容时,你就死了()脚本。
这是我鞭打的代码,你需要检查表格是否正确和喜欢,因为这是一个真正的快速运行:
<?php
if($_POST['username'] && $_POST['email'] && isset($_POST['password']) && isset($_POST['password2']) && $_POST['password'] == $_POST['password2'])
{
include ('*********'); //my connection to the database
$username = mysql_real_escape_string($_POST['username']);
$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);
//check with the registred members
$query1 = "SELECT *
FROM registredMembers as users,
tempMembers as temp
WHERE users.username = '$username'
OR temp.username ='$username'";
$check = mysql_query($query1, $conn) or die(mysql_error());
if(mysql_num_rows($check) < 1)
{
$confirmCode = md5(uniqid(rand()));
$query = "INSERT INTO tempMembers (`confirmCode`, `username`, `email`, `password`) VALUES ('$confirmCode', '$username', '$email', '$password')";
$result = mysql_query($query, $conn) or die(mysql_error());
if($result)
{
$to = $email;
$subject = utf8_decode("Här är din bekräftelselänk");
$header = utf8_decode("Från Adib Haider (PHP-Projekt)");
$message = "Din bekräftelselänk \r\n";
$message.= "Klicka på länken för att aktivera ditt konto \r\n";
$message.= "http://labb.vgy.se/~adibbinhar/blogg/confirmation.php?passkey=$confirmCode";
$sentmail = mail($to, $subject, utf8_decode($message), $header);
if($sentmail)
{
echo "<div id='msg'>Aktiveringsmailet har skickat till din e-postadress</div>";
}
else
{
echo "<div id='msg'>Aktiveringsmailet skickades inte</div>";
}
}
else
{
echo "<div id='msg'>Testa igen</div>";
}
}
else
{
echo "<div id='msg'>Användarnamnet är upptaget</div>";
}
}
else
{
echo "<div id='msg'>Prova igen</div>";
}