Bonjour,

Je suis en cours de développement d’un espace membre avec base de données Mysql.
L’espace membre est fondé sur la fourniture d’un pseudo (en fait l’adresse e-mail) et d'un mot de passe.
La structure de la table est la suivante :

$sql = "CREATE TABLE users 
(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
username VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL
)";


J’y suis presque arrivé : la connexion, la déconnexion, la mise à jour des données par l’utilisateur et la désinscription fonctionnent tout à fait correctement.

En fait ma difficulté réside dans l’inscription, j’arrive à écrire dans la table un premier membre, mais pas le second et bien sûr les suivants.

Voici le code de la page d’inscription :

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Inscription espace membre</title>
</head>
<body>
<?php

    define( 'USERNAME', '' ); // valeur par défaut
    define( 'PASSWORD', '' ); // valeur par défaut
    define( 'REPEATPASSWORD', '' ); // valeur par défaut

    $errors = array(); // tableau des erreurs de saisie

if( filter_has_var( INPUT_POST, 'submit' ) ) // le formulaire a été soumis avec le bouton [Envoyer]
{
		$username = filter_input( INPUT_POST, 'username', FILTER_VALIDATE_EMAIL );
		//echo $pseudo;
        if( $username === false ) // si l'adresse e-mail fournie n'est pas valide
        {
            $errors[] = 'Votre adresse e-mail n\'est pas valide.';
            $from = filter_input( INPUT_POST, 'from', FILTER_SANITIZE_EMAIL );
        }
		
		$password = filter_input( INPUT_POST, 'password', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
		//echo $password;
				if( $password == ''  ) // si le mot de passe est vide
				{
					$errors[] = 'Veuillez saisir votre mot de passe.';
				}
				if(strlen($password)<6)  // si ne nombr de caracrtère du mot de passe est inférieur à 6
				{
					$errors[] = 'Veuillez saisir un mot de passe d\'au moins 6 caractères.';
				}
		
		$repeatpassword = filter_input( INPUT_POST, 'repeatpassword', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
		//echo $repeatpassword;
				if( $repeatpassword == ''  ) // si la répétition du mot de passe est vide
				{
					$errors[] = 'Veuillez répéter votre mot de passe.';
				}
				if($password!=$repeatpassword)
				{
					$errors[] = 'Les mots de passe ne sont pas identiques.';
				}

if( count( $errors ) === 0 )
        {

		$password = md5($password);
				
    	$host_name  = "db575xxxxx.db.1and1.com";
    	$database   = "db575xxxxx";
    	$user_name  = "dbo575xxxxx";
    	$password_bd   = "motpasse";

		// Connexion à la base de données
    	$connect = mysqli_connect($host_name, $user_name, $password_bd, $database);
	
		// Erreur de connexion
		if (!$connect) {
    		die("Erreur de connexion : " . mysqli_connect_error());
		}	
					
		mysqli_select_db($database);
					
		$query = mysqli_query("INSERT INTO users (id,username,password) VALUES('','$username','$password')");
					
		die('Inscription terminée, vous pouvez vous <a href="login.php">connecter</a>');

}

} else {
		$username = USERNAME;
		$password = PASSWORD;
		$repeatpassword = REPEATPASSWORD;
		}

if( count( $errors ) !== 0 )
        {
            echo( "\t\t<ul class=\"erreur\">\n" );
            foreach( $errors as $error )
            {
                echo( "\t\t\t<li>$error</li>\n" );
            }
            echo( "\t\t</ul>\n" );
        } 
?>
<h1>Inscription</h1><form method="post" action="register.php">
<label for="username">Votre adresse e-mail</label>
<input type="text" name="username" value="<?php echo( $username ); ?>">
<br>
<br>
<label for="password">Votre mot de passe</label>
<input type="password" name="password" value="<?php echo( $password ); ?>">
<br>
<br>
<label for="repeatpassword">Répéter votre mot de passe</label>
<input type="password" name="repeatpassword" value="<?php echo( $repeatpassword ); ?>">
<br>
<br>
<input type="submit" name="submit" value="Vous inscrire">
<br>
<br>
<a href="login.php">Vous êtes déjà inscrit</a> 
</body>
</html> 


Je pense que l’erreur est dans le code d’écriture sur la table :

$query = mysqli_query("INSERT INTO users (id,username,password) VALUES('','$username','$password')");


mais je n’arrive pas à cerner laquelle.

Merci pour votre aide

Cordialement
Salut,

Quand tu insères un enregistrement dans une table qui contient un champ en AUTO_INCREMENT, tu ne l'indiques pas dans ta requête (mysql va se débrouillé comme un grand et créer l'id lui-même).
Donc ta requête sera la suivante :
$query = mysqli_query("INSERT INTO users (username,password) VALUES('$username','$password')");

Teste et tu diras si c'est OK.

Si vraiment tu voulais conserver l'insertion du champ id et laisser l'AUTO_INCREMENT faire, il faudrait que sa valeur soit NULL et non '' (vide)
Modifié par MatthieuR (24 May 2015 - 14:19)
Bonjour Matthieu,

Merci pour ton aide mais je n'arrive toujours pas à écrire dans ma base de donnée avec le code suivant :

$query = mysqli_query
("
INSERT INTO users (username,password) VALUES('$username','$password')
");

et voici le code de création de la table :

$sql = "CREATE TABLE users (
id INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL,
password VARCHAR(100) NOT NULL
)";


Je ne comprends pas et je ne vois pas du tout d'où vient l'erreur !

Cordialement Smiley decu