Mysql
 sql >> Base de données >  >> RDS >> Mysql

Formulaire de soumission, mysql et php

Il y a quelques choses qui ne vont pas ici.

Vous utilisez les mauvais identifiants pour vos colonnes dans (et étant entre guillemets):

('id', 'username', 'password', 'email')

supprimez-les

(id, username, password, email)

ou utilisez des backticks

(`id`, `username`, `password`, `email`)

mysql_error() aurait dû vous renvoyer une erreur, mais ce n'est pas le cas à cause de :

  • Vous mélangez les API MySQL avec mysqli_ pour se connecter, puis mysql_ dans votre requête.

Ces deux API différentes ne se mélangent pas.

Utilisez mysqli_ exclusivement et remplacez votre requête actuelle par :

if($query = mysqli_query($connect, "INSERT...

et changez mysql_error() à mysqli_error($connect)

comme réécriture pour ce bloc :

if(isset($_POST["submit"])){
    if($query = mysqli_query($connect,"INSERT INTO users ('id', 'username', 'password', 'email') VALUES('', '".$username."', '".$password."', '".$email."')")){
        echo "Success";
    }else{
        echo "Failure" . mysqli_error($connect);
    }
}

Juste pour tester l'erreur, apportez les modifications que j'ai décrites ci-dessus, tout en conservant les guillemets autour de vos colonnes tels que vous les avez actuellement. Vous verrez alors l'erreur que MySQL lancera. Vous pouvez ensuite faire comme je l'ai déjà décrit ci-dessus et supprimer les guillemets autour des noms de colonne, ou les remplacer par des backticks.

Le didacticiel que vous avez vu peut très bien utiliser des backticks, mais n'était probablement pas assez distinctif pour que vous disiez qu'il s'agissait bien de backticks et non de guillemets simples.

Cependant, votre code actuel est ouvert à injection SQL . Utilisez mysqli avec des relevés préparés , ou PDO avec instructions préparées , ils sont beaucoup plus sûrs .

J'ai remarqué que vous stockiez peut-être des mots de passe en texte brut. Si tel est le cas, cela est fortement déconseillé.

Je vous recommande d'utiliser CRYPT_BLOWFISH ou password_hash() de PHP 5.5 fonction. Pour PHP < 5.5, utilisez le password_hash() compatibility pack .

Aussi, au lieu de faire :

$connect = mysqli_connect("localhost", "root", "") or die("Could not connect to server!");
mysqli_select_db($connect, "php_forum") or die("Could not connect to database!");

Vous devriez plutôt vérifier les erreurs, tout comme le manuel l'indique

$link = mysqli_connect("myhost","myuser","mypassw","mybd") 
or die("Error " . mysqli_error($link)); 

Donc dans votre cas :

$connect = mysqli_connect("localhost", "root", "","php_forum") 
or die("Error " . mysqli_error($connect)); 

Modifier : et j'ai changé action="register.php" à action="" puisque vous utilisez tout le code dans la même page.

<!DOCTYPE HTML>
<html>
    <head>
        <title>Register</title>
    </head>
    <body>
        <form action="" method="POST">
            Username: <input type="text" name="username">
            <br/>
            Password: <input type="password" name="password">
            <br/>
            Confirm Password: <input type="password" name="confirmPassword">
            <br/>
            Email: <input type="text" name="email">
            <br/>
            <input type="submit" name="submit" value="Register"> or <a href="login.php">Log in</a>
        </form>
    </body>
</html>
<?php
    require('connect.php');
    $username = $_POST['username'];
    $password = $_POST['password'];
    $confirmPassword = $_POST['confirmPassword'];
    $email = $_POST['email'];

    if(isset($_POST["submit"])){
        if($query = mysqli_query($connect,"INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '".$username."', '".$password."', '".$email."')")){
            echo "Success";
        }else{
            echo "Failure" . mysqli_error($connect);
        }
    }
?>