Problème insertion nouveau user dans ma BDD

Fermé
Julien Giuliano Messages postés 28 Date d'inscription dimanche 30 mai 2010 Statut Membre Dernière intervention 23 juin 2012 - 23 juin 2012 à 16:27
 Utilisateur anonyme - 23 juin 2012 à 22:36
Bonjour,

J'ai un problème dans la conception d'une page d'inscription pour un nouvel utilisateur sur mon site internet.
Je suis débutant en PHP, SQL, MySQL, ...

Sur l'index de mon site web, j'ai mis un lien "Pas encore inscrit ? Créez votre compte utilisateur".

Cela amène sur la page inscription.php dont voici le code.
Le problème : une fois le formulaire soumis pour créer et insérer un nouvel utilisateur en base, la page ne rapporte aucune erreur. Les vérifications que j'ai mise dans le code ont l'air OK.
La page me signale donc que l'utilisateur est créé.

Mais quand je vais vérifier dans ma base de données, aucun utilisateur n'a été créé...

Est-ce que quelqu'un de plus expérimenté pourrait m'aider dans la conception de ce code, car là je suis un peu dans le flou artistique...

Code page inscription.php :

<?php
class Connexion{

private $user = 'user'; 
private $pass = 'pass'; 
private $dsn = 'host'; 

public function connect(){
try { 
// instanciation de la classe php PDO. Création d'un objet PDO.
$dbh = new PDO($this->dsn, $this->user, $this->pass);

return $dbh;
} catch (PDOException $e) { // si on a pas pu se connecter, on chope le message d'erreur et on le met dans la variable "e"
die( "Erreur ! : " . $e->getMessage() ); // on affiche l'erreur
}
}

public function disconnect(&$paramConnect){ // fonction qui nous sert à nous deconnecter de la base. 
$paramConnect = null;
}
}

// Objet opérateur connexion et objet PDO contenant une connexion réussie
$connexion=new Connexion();
$connexionPDO=$connexion->connect();

session_start();
if ($id!=0) erreur(ERR_IS_CO);

if (empty($_POST['login'])) // Si on la variable est vide, on peut considérer qu'on est sur la page de formulaire
{
	echo '<h1>Inscription 1/2</h1>';
	echo '<form method="post" action="inscription.php">
	<fieldset><legend>Identifiants</legend>
	<label for="login">* Login :</label>  <input name="login" type="text" id="login" /> (le login doit contenir entre 5 et 15 caractères)<br />
	<label for="pass">* Mot de Passe :</label><input type="password" name="pass" id="pass" /><br />
	<label for="pass_confirm">* Confirmer le mot de passe :</label><input type="password" name="pass_confirm" id="pass_confirm" />
	</fieldset>
	<fieldset><legend>Contacts</legend>
	<label for="prenom">* Votre prénom :</label><input type="text" name="prenom" id="prenom" /><br />
	<label for="nom">* Votre nom :</label><input type="text" name="nom" id="nom" /><br />
	<label for="email">* Votre adresse Mail :</label><input type="text" name="email" id="email" /><br />
	</fieldset>
	<p>Les champs précédés d un * sont obligatoires</p>
	<p><input value="Inscription" class="btn" type="image" src="/utilisateur/vue/medias/bouton_ok.png" /></p></form>
	</div>
	</body>
	</html>';
	
	
} //Fin de la partie formulaire

else //On est dans le cas traitement
{
    $login_erreur1 = NULL;
    $login_erreur2 = NULL;
    $mdp_erreur = NULL;
	$prenom_erreur = NULL;
	$nom_erreur = NULL;
    $email_erreur1 = NULL;
    $email_erreur2 = NULL;
	
	//On récupère les variables
    $i = 0;
    $login=$_POST['login'];
	$prenom = $_POST['prenom'];
	$nom = $_POST['nom'];
    $email = $_POST['email'];
    $pass = md5($_POST['password']);
    $pass_confirm = md5($_POST['pass_confirm']);
	
    //Vérification du login
	function countLogin($connexion){
	//Requête
	$sql="SELECT COUNT(*) from user WHERE login='".$login. "'";
	$result = $connexion->query($sql);
	// La méthode query permet de faire des requetes avec des résultats. On met tout ça dans la variable $res. Il retourne un PDO STATEMENT=à l'objet PDO
	
	$resultat = $result->fetchColumn();
	return $resultat;
	}
	
    if($resultat > 0)
    {
        $login_erreur1 = "Votre login est déjà utilisé par un membre";
        $i++;
    }

    if (strlen($login) < 5)
    {
        $login_erreur2 = "Votre login doit avoir au moins 5 caractères";
        $i++;
    }

    //Vérification du mdp : NE FONCTIONNE PAS. 
	// ==> Même si $pass et $pass_confirm sont identique et rempli, il renvoi cette erreur à chaque fois. Pour l'instant je l'ai désactivé.
	
    /*
	if ($pass != $pass_confirm || empty($pass_confirm) || empty($pass))
    {
        $mdp_erreur = "Votre mot de passe et votre confirmation diffèrent, ou sont vides";
        $i++;
    }
	*/
	
	if (strlen($prenom) < 2)
    {
        $prenom_erreur = "Votre prénom doit avoir au moins 2 caractères";
        $i++;
    }
	
	if (strlen($nom) < 2)
    {
        $nom_erreur = "Votre nom doit avoir au moins 2 caractères";
        $i++;
    }
	
	//Vérification de l'adresse email

    //Il faut que l'adresse email n'ait jamais été utilisée
	function countEmail($connexion){
	//Requête
	$sql="SELECT COUNT(*) from user WHERE email='".$email. "'";
	$result = $connexion->query($sql);
	// La méthode query permet de faire des requetes avec des résultats. On met tout ça dans la variable $res. Il retourne un PDO STATEMENT=à l'objet PDO
	
	$resultat = $result->fetchColumn();
	return $resultat;
	}
    
    if($resultat > 0)
    {
        $email_erreur1 = "Cette adresse email est déjà utilisée par un membre";
        $i++;
    }
    //On vérifie la forme maintenant
    if (!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $email) || empty($email))
    {
        $email_erreur2 = "Votre adresse E-Mail n'a pas un format valide";
        $i++;
    }

	if ($i==0)
   {
	echo'<h1>Inscription terminée</h1>';
        echo'<p>Bienvenue '.stripslashes(htmlspecialchars($_POST['login'])).' vous êtes maintenant inscrit sur le forum</p>
	<p>Cliquez <a href="./UTILISATEUR.php">ici</a> pour utiliser la rubrique UTILISATEUR</p>';
	
		function insertUser($connexion){
	//On n'insère ni l'id ni le actif/inactif
	
	//Requête
	$sql="INSERT into user (login, prenom, nom, email, pass) VALUES ('$login', '$prenom', '$nom', '$email', '$pass')";
	
	//Exécution
	$resultat=$connexion->exec($sql);
	return $resultat; // Nous retourne le nbre de ligne modifié
	}

	//Et on définit les variables de sessions
		$_SESSION['permission']="FINE";
        $_SESSION['login'] = $login;
		$_SESSION['prenom'] = $prenom;
		$_SESSION['nom'] = $nom;
        $connexion->disconnect($connexionPDO);  
    }
    else
    {
        echo'<h1>Inscription interrompue</h1>';
        echo'<p>Une ou plusieurs erreurs se sont produites pendant l incription</p>';
        echo'<p>'.$i.' erreur(s)</p>';
        echo'<p>'.$login_erreur1.'</p>';
        echo'<p>'.$login_erreur2.'</p>';
        echo'<p>'.$mdp_erreur.'</p>';
		echo'<p>'.$prenom_erreur.'</p>';
		echo'<p>'.$nom_erreur.'</p>';
        echo'<p>'.$email_erreur1.'</p>';
        echo'<p>'.$email_erreur2.'</p>';
       
        echo'<p>Cliquez <a href="./inscription.php">ici</a> pour recommencer</p>';
    }
}
?>
<!DOCTYPE html>
<html>

<head>
<link rel="stylesheet" href="utilisateur/vue/styles/styles.css" type="text/css" />
<meta charset="iso-8859-1">
</head>

<body>
<div id="global">
<?PHP
include("header.php");
?>
<?PHP
include ("nav.php");
?>

<section class="section">
<h1>RUBRIQUE UTILISATEUR - Bienvenue</h1>
<br/>

<div id="error">

</div>

<div>

<strong>INSCRIPTION : Creer votre compte utilisateur</strong>
</br>

</div>

</section>

<?PHP
include ("footer.php");
?>
</div>
</body>

</html>






Je vous remerci d'avance pour votre aide !

A voir également:

2 réponses

Utilisateur anonyme
23 juin 2012 à 16:40
Bonjour

Je n'ai pas lu à fond tous les détails de ton code, mais il y a quelque chose d'anormal.
Tu fais l'insertion des nouveaux inscrits dans la function insertUser($connexion), mais cette fonction n'est jamais appelée ! Donc jamais exécutée.
Je pense qu'à l'endroit où tu as mis ce code, il ne fallait pas définir une fonction, mais simplement mettre le code (sans function insertUser($connexion)) pour qu'il s'exécute quand on est rendu à ce point de ton script.
0
Julien Giuliano Messages postés 28 Date d'inscription dimanche 30 mai 2010 Statut Membre Dernière intervention 23 juin 2012
23 juin 2012 à 16:53
je viens en effet de corriger ça. Merci pour m'avoir pointé cette première erreur assez enorme !
Je viens donc, en effet, d'enlever cette function insertUser($connexion).
Je viens de tester d'insérer un user avec juste le code comme tu m'as conseillé :
cela m'affiche que l'utilisateur a été crééer. Mais en dessous j'ai :

Fatal error: Call to undefined method Connexion::exec() in /homepages/.../.../.../.../inscription.php on line 156
0
Julien Giuliano Messages postés 28 Date d'inscription dimanche 30 mai 2010 Statut Membre Dernière intervention 23 juin 2012
23 juin 2012 à 17:02
Cela correspond, dans mon code, à cette ligne :

	//Requête
	$sql="INSERT into user (login, prenom, nom, email, pass) VALUES ('$login', '$prenom', '$nom', '$email', '$pass')";
	
	//Exécution
	$resultat=$connexion->exec($sql);
0
Etonnant, ton message d'erreur.

Tu aurais dû avoir une erreur bien plus tôt, ligne 26 car la chaîne que tu fournis pour la connexion est incorrecte. Regarde la doc PDO, ce n'est pas simplement le nom de host qu'il faut mettre en 1er paramètre.
Je suppose que c'est parce que tu as fait des modifications de ton script, peux-tu remettre la dernière version ?
0