检查用户名是否可用以及电子邮件验证

时间:2012-01-08 17:38:11

标签: php mysql

我在检查用户名是否存在时遇到问题。如果确实存在,它就可以工作。但如果用户名不存在,它只会将我发送到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

4 个答案:

答案 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>";
    }