我的php脚本有问题

时间:2016-02-12 12:43:50

标签: php

这是我的问题:在这个PHP代码中,我想检查我的数据库中是否已经存在电子邮件并回显“电子邮件已经存在”,如果确实如此,那就是注册不成功但仍然没有打印出来信息。 您可以自己试用这些代码并告诉我出了什么问题。

提前致谢。

<!DOCTYPE html><html>
    <head>
        <meta charset="utf-8">
        <title>Asylum'Server Inscription</title>
    </head>
    <body align="center">
        <h2>Inscription</h2>
            <br />
            <form method="POST">
                <table align="center">
                        <tr>
                            <td align="right">
                                <label for="pseudo" >Pseudo :</label>
                            </td>
                            <td>
                                <input type="text" placeholder="Votre pseudo" id="pseudo" name="pseudo" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mail">Mail :</label>
                            </td>
                            <td>
                                <input type="email" placeholder="Votre mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mail2">Confirmation du mail :</label>
                            </td>
                            <td>
                                <input type="email" placeholder="Confirmez votre mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; } ?>" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mdp">Mot de passe :</label>
                            </td>
                            <td>
                                <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label for="mdp2">Confirmation du mot de passe :</label>
                            </td>
                            <td>
                                <input type="password" placeholder="Confirmez votre mdp" id="mdp2" name="mdp2" />
                            </td>
                        </tr>
                        <tr>
                            <td></td>
                            <td align="center">
                                <br />
                                <input type="submit" name="register" value="Je m'inscris" />
                            </td>
                        </tr>
                </table>
                <?php

 $bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membres', 'root', ''); //Connexion a la bdd.
if(isset($_POST['register']))
    {
        $pseudo = htmlspecialchars(trim($_POST['pseudo'])); // Votre pseudo
        $mail = htmlspecialchars(trim($_POST['mail'])); // Votre email
        $mail2 = htmlspecialchars(trim($_POST['mail2'])); // Confirmation
        $mdp = sha1($_POST['mdp']);// MDP
        $mdp2 = sha1($_POST['mdp2']);// Confirmation

        if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) // Check if all fields are full
        { 
            $pseudolength = strlen($pseudo);
            if($pseudolength <= 25)   { // Pseudo less than 25 characters.
                if($mail == $mail2) // If the mail entered matches the confirmation
                {
                    if(filter_var($mail, FILTER_VALIDATE_EMAIL))
                    {
                        $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?"); // Checks if the mail doesnt exist already in the database
                        $reqmail->execute(array($mail));
                        $mailexist = $reqmail->rowCount();
                        if($mailexist == 0) // If the mail already exists
                        {
                            if($mdp == $mdp2) // If the mdp entered matches the confirmation
                            {
                  $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)"); // Write in the database
                  $insertmbr->execute(array($pseudo, $mail, $mdp));
                            }
                            else         // error_get_last(oid)
                                $erreur = "Vos mots de passes ne correspondent pas !";
                            }
                        }
                        else
                        {
                            $erreur = "Adresse mail déjà utilisée !";
                        }
                    }
                    else
                    {
                        $erreur = "Votre adresse mail n'est pas valide !";
                    }
                }
                else
                {
                    $erreur = "Vos adresses mail ne correspondent pas !";
                }
            }
            else
            {
                $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
            }
        }
        else
        {
            $erreur = "Tous les champs doivent être complétés !";
        }
    if(isset($erreur)) { 

        echo $erreur; } 
        else
            echo "Félicitiations ! Vous êtes maintenant inscrit"
    ?>

            </form>
    </body>

</html>

1 个答案:

答案 0 :(得分:-2)

如上所述:http://php.net/manual/en/pdostatement.rowcount.php

  

PDOStatement :: rowCount()返回受相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响的行数。

如您所见,SELECT * FROM membres WHERE mail = ?之后受影响的行数始终为0。

  

对于大多数数据库,PDOStatement :: rowCount()不返回受SELECT语句影响的行数。相反,使用PDO :: query()发出带有与预期SELECT语句相同的谓词的SELECT COUNT(*)语句,然后使用PDOStatement :: fetchColumn()来检索将返回的行数。然后,您的应用程序可以执行正确的操作

编辑:信息已过时。 rowCount()似乎现在可以正常使用MySQL SELECT