IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Formulaire validé, mais pas d'insertion dans la BDD


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 34
    Points : 13
    Points
    13
    Par défaut Formulaire validé, mais pas d'insertion dans la BDD
    Bonjour à vous ! ^^

    Je viens vous voir pour vous demander de l'aide !
    En effet, pour m'entrainer, je fais un petit espace membre, rien de complexe pour vous, mais pour moi qui débute, c'est une autre perd de manche ! ^^

    Donc, au moment de l'inscription, j'ai un formulaire a remplir qui une fois validée renvoie sur la meme page pour envoyer les données dans la BDD. Après avoir validée le formulaire, on me dit que c'est bon, mais je ne vois pas d'insertion dans la BDD ...

    Voici la page inscription.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    <?php
    include('../Includes/configuration.php');
     
    /********Entête et titre de page*********/
    $titre = 'Inscription';
    include('../Includes/header.php'); //contient le doctype, et head.
    /**********Fin entête et titre***********/
    ?>
     
    <div id="colonne_gauche">
    				<?php
    				/*include('includes/colg.php')*/;
    				?>
    			</div>
     
    			<div id="contenu">
    				<div id="map">
                    <a href="<?php echo ROOTPATH;?>/index.php">Accueil</a> => <a href="<?php echo ROOTPATH;?>/membres/inscription.php">Inscription </a>
    				</div>
    <!-- Début du milieu de page -->
     
    <?php
    //On verifie que le formulaire a ete envoye
    if(isset($_POST['membre_pseudo'], $_POST['mdp'], $_POST['mdpverif'], $_POST['email'], $_POST['date_naissance'], $_POST['sexe']) and $_POST['membre_pseudo']!='')
    {
            //On enleve lechappement si get_magic_quotes_gpc est active
            if(get_magic_quotes_gpc())
            {
                    $_POST['membre_pseudo'] = stripslashes(trim($_POST['membre_pseudo']));
                    $_POST['mdp'] = stripslashes(trim($_POST['mdp']));
                    $_POST['mdpverif'] = stripslashes(trim($_POST['mdpverif']));
                    $_POST['email'] = stripslashes(trim($_POST['email']));
    				$_POST['date_naissance'] = stripslashes(trim($_POST['date_naissance']));
    				$_POST['sexe'] = stripslashes(trim(trim($_POST['sexe'])));
            }
            //On verifie si le mot de passe et celui de la verification sont identiques
            if($_POST['mdp']==$_POST['mdpverif'])
            {
                    //On verifie si le mot de passe a 6 caracteres ou plus
                    if(strlen($_POST['mdp'])>=6)
                    {
                            //On verifie si lemail est valide
                            if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['email']))
                            {
     
    				//On echape les variables pour pouvoir les mettre dans une requette SQL
    				$membre_id = '';
    				$membre_pseudo = $_POST['membre_pseudo'];
    				$mdp = $_POST['mdp'];
    				$email = $_POST['email'];
    				$date_naissance = $_POST['date_naissance'];
    				$sexe = $_POST['sexe'];
    				$date_inscription = date("Y-m-d");
    				$date_derniere_visite = '';
    				$membre_rang = '';
     
     
    				//On vérifie si lemail est déjà utilisé 
    				$sql = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE email = ?');
    				$sql->execute(array($_POST['email']));
    				if ($sql->fetchColumn() == 0)
                                    {
    					$sql = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE membre_pseudo = ?');
    					$sql->execute(array($_POST['membre_pseudo']));
    					if ($sql->fetchColumn() == 0)
     
    						//On verifie sil ny a pas deja un utilisateur inscrit avec le pseudo choisis
    						$sql = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE membre_pseudo = ?');
    						$sql->execute(array($_POST['membre_pseudo']));
    						if ($sql->fetchColumn() == 0)
    						{
     
                                            		//On enregistre les informations dans la base de donnee
                                            		if ( $req = $bdd->prepare('
    								INSERT INTO membres(membre_id, membre_pseudo, mdp, email, date_naissance, sexe, date_inscription, date_derniere_visite, membre_rang) 
    								VALUES (:membre_id, :membre_pseudo, :mdp, :email, :date_naissance, :sexe, :date_inscription, :date_derniere_visite, :membre_rang)') 
    								or exit(print_r($req->errorInfo()))    
    								&&                             
    								$req->execute(array(
    									':membre_id' => $membre_id,
    									':membre_pseudo' => $membre_pseudo,
    									':mdp' => $mdp,
    									':email' => $email,
    									':date_naissance' => $date_naissance,
    									':sexe' => $sexe,
    									':date_inscription' => $date_inscription,
    									':date_derniere_visite' => $date_derniere_visite,
    									':membre_rang' => $membre_rang,
    							)))
     
    										{
                                                    	//Si ca a fonctionne, on naffiche pas le formulaire
                                                    	$form = false;
    ?>
    <div class="message">Vous avez bien &eacute;t&eacute; inscrit. Vous pouvez dor&eacute;navant vous connecter.<br />
    <a href="connexion.php">Se connecter</a></div>
    <?php
                                            }
                                            else
                                            {
                                                    //Sinon on dit quil y a eu une erreur
                                                    $form = true;
                                                    $message = 'Une erreur est survenue lors de l\'inscription.';
                                            }
    				}
    				else
    				{
                                            //Sinon, on dit que le pseudo voulu est deja pris
                                            $form = true;
                                            $message = 'Un autre utilisateur utilise d&eacute;j&agrave; le nom d\'utilisateur que vous d&eacute;sirez utiliser.';
    				}
    			}
    			else
    			{
    				//Sinon, on dit que lemail voulu est deja pris
    				$form = true;
    				$message = 'Un autre utilisateur utilise d&eacute;j&agrave; lemail que vous d&eacute;sirez utiliser.';
    			}	
    		}
    		else
    		{
    			//Sinon, on dit que lemail nest pas valide
    			$form = true;
    			$message = 'L\'email que vous avez entr&eacute; n\'est pas valide.';					
    		}
    	}
    	else
    	{
    		//Sinon, on dit que le mot de passe nest pas assez long
    		$form = true;
    		$message = 'Le mot de passe que vous avez entr&eacute; contien moins de 6 caract&egrave;res.';
    	}
           }
            else
            {
                    //Sinon, on dit que les mots de passes ne sont pas identiques
                    $form = true;
                    $message = 'Les mots de passe que vous avez entr&eacute; ne sont pas identiques.';
     
            }
    }
    else
    {
            $form = true;
    }
    if($form)
    {
            //On affiche un message sil y a lieu
            if(isset($message))
            {
                    echo ' <div class="message">'. $message .'</div>' ;
            }
            //On affiche le formulaire
    ?>
     
    <div class="content">
        <form action="inscription.php" method="post">
            Veuillez remplir ce formulaire pour vous inscrire:<br />
            <div class="center">
                <label for="membre_pseudo">Pseudo :</label>
    			<input type="text" name="membre_pseudo" placeholder="Entrez un pseudo" value="<?php if(isset($_POST['membre_pseudo'])){echo htmlentities($_POST['membre_pseudo'], ENT_QUOTES, 'UTF-8');} ?>" required /><br />
     
                <label for="mdp">Mot de passe<span class="small">(6 caract&egrave;res min.)</span></label>
    			<input type="password" name="mdp" placeholder="Entrez un mot de passe" value="<?php if(isset($_POST['mdp'])){echo htmlentities($_POST['mdp'], ENT_QUOTES, 'UTF-8');} ?>" required /><br />
     
                <label for="mdpverif">Mot de passe<span class="small">(v&eacute;rification)</span></label>
    			<input type="password" name="mdpverif" placeholder="Vérification du mdp" value="<?php if(isset($_POST['mdpverif'])){echo htmlentities($_POST['mdpverif'], ENT_QUOTES, 'UTF-8');} ?>" required /><br />
     
                <label for="email">Email</label>
    			<input type="email" name="email" placeholder="Entrez votre email" value="<?php if(isset($_POST['email'])){echo htmlentities($_POST['email'], ENT_QUOTES, 'UTF-8');} ?>" required /><br />
     
    			<label for="date_naissance">Date de naissance</label>
    			<input type="date" name="date_naissance" value="<?php if(isset($_POST['date_naissance'])){echo htmlentities($_POST['date_naissance'], ENT_QUOTES, 'UTF-8');} ?>" required /><br />
     
    			<label for="sexe">Sexe</label>
    				<select name="sexe">
    					<option value="1">Homme</option>
    					<option value="2">Femme</option>
    				</select ><br />
     
                <input type="submit" value="Envoyer" />
            </div>
        </form>
    </div>
     
    <?php
    }
    ?>	
     
     
    <!-- Fin du milieu de page -->				
    			</div>
    <?php 
    include('../Includes/footer.php');
    ?>
    Mon erreur doit se situer à partir de la ligne 74 ...
    J'ai tenté de modifier mon insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    if ( $req = $bdd->prepare('
    	INSERT INTO membres(membre_id, membre_pseudo, mdp, email, date_naissance, sexe, date_inscription, date_derniere_visite, membre_rang) 
    	VALUES (:membre_id, :membre_pseudo, :mdp, :email, :date_naissance, :sexe, :date_inscription, :date_derniere_visite, :membre_rang)') 
    	or exit(print_r($req->errorInfo()))    
    	&&                             
    	$req->execute(array(
    		':membre_id' => $membre_id,
    		':membre_pseudo' => $membre_pseudo,
    		':mdp' => $mdp,
    		':email' => $email,
    		':date_naissance' => $date_naissance,
    		':sexe' => $sexe,
    		':date_inscription' => $date_inscription,
    		':date_derniere_visite' => $date_derniere_visite,
    		':membre_rang' => $membre_rang,
    	)))
     
    	{
    ETC
    Par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    if ( $sql = $bdd->prepare
    	('INSERT INTO membres(membre_id, membre_pseudo, mdp, email, date_naissance, sexe, date_inscription, date_derniere_visite, membre_rang) 
    	VALUES (:membre_id, :membre_pseudo, :mdp, :email, :date_naissance, :sexe, :date_inscription, :date_derniere_visite, :membre_rang)') 
    	&&
    	$sql->bindParam(':membre_id', $membre_id)
    	&&
    	$sql->bindParam(':membre_pseudo', $membre_pseudo)
    	&&
    	$sql->bindParam(':mdp', $mdp)
    	&&
    	$sql->bindParam(':email', $email)
    	&&
    	$sql->bindParam(':date_naissance', $date_naissance)
    	&&
    	$sql->bindParam(':sexe', $sexe)
    	&&
    	$sql->bindParam(':date_inscription', $date_inscription)
    	&&
    	$sql->bindParam(':date_derniere_visite', $date_derniere_visite)
    	&&
    	$sql->bindParam(':membre_rang', $membre_rang)
    	&&
    	$sql->execute() or exit(print_r($bdd->errorInfo())))
    {
    ETC
    Mais avec le deuxième code, j'ai une erreur :
    Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp\www\Site\Membres\inscription.php on line 96
    (la ligne 96 eest : $sql->execute() or exit(print_r($bdd->errorInfo()))) )

    Du coup, je ne comprends pas du tout ce qui ne vas pas, ni dans le cas 1, ni dans le cas 2 !

    Auriez vous des idées, indications, conseils, suggestions, corrections ?

    Merci par avance de votre lecture, et peut être de vos réponses !

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    //tu as testé une syntaxe plus proche du manuel ? Tout cela intégré dans un bloc try catch dès la connexion à la db ?
    try{
       //création de ton pdo
       //et la suite
       $sql='INSERT INTO membres(membre_id, membre_pseudo, mdp, email, date_naissance, sexe, date_inscription, date_derniere_visite, membre_rang) 
       VALUES (:membre_id, :membre_pseudo, :mdp, :email, :date_naissance, :sexe, :date_inscription, :date_derniere_visite, :membre_rang)';
       $sth-> $req = $bdd->prepare($sql);
       //ici, quitte à faire une requête préparée, il faut mettre les types et les limites attendues
       $sql->bindParam(':membre_id', $membre_id,PDO::PARAM_INT);
       $sql->bindParam(':membre_pseudo', $membre_pseudo,PDO::PARAM_STR,20);
       //tu continues
       $sth->execute();	
    }
    catch(PDOException $e){
    	echo $e->getMessage();
    }
    ?>

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    C'est vrai que je n'ai pas utilisé le try, donc suite à ton conseil, je viens de tester (j'espère ne pas trop me tromper sur les emplacements !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    if ( 
    	try{
    		$sql = $bdd->prepare
    		('INSERT INTO membres(membre_id, membre_pseudo, mdp, email, date_naissance, sexe, date_inscription, date_derniere_visite, membre_rang) 
    		VALUES (:membre_id, :membre_pseudo, :mdp, :email, :date_naissance, :sexe, :date_inscription, :date_derniere_visite, :membre_rang)') 
    		&&
    		$sql->bindParam(':membre_id', $membre_id)
    		&&
    		$sql->bindParam(':membre_pseudo', $membre_pseudo)
    		&&
    		$sql->bindParam(':mdp', $mdp)
    		&&
    		$sql->bindParam(':email', $email)
    		&&
    		$sql->bindParam(':date_naissance', $date_naissance)
    		&&
    		$sql->bindParam(':sexe', $sexe)
    		&&
    		$sql->bindParam(':date_inscription', $date_inscription)
    		&&
    		$sql->bindParam(':date_derniere_visite', $date_derniere_visite)
    		&&
    		$sql->bindParam(':membre_rang', $membre_rang)
    		&&
    		$sql->execute() or exit(print_r($bdd->errorInfo())))		
    	}
    	catch(PDOException $e)
    	{
    		echo $e->getMessage();
    }
    Ma connexion du PDO est au tout début du fichier.

    Pour "ici, quitte à faire une requête préparée, il faut mettre les types et les limites attendues" -> je vais attendre que ca fonctionne déjà ^^

    Mais meme avec ca, une erreur :
    Parse error: syntax error, unexpected T_TRY in C:\wamp\www\Site\Membres\inscription.php on line 75" (ligne du try)
    Donc pour ce code, je ne comprends toujours pas !

    Pour le code que j'avais avant, je suis toujours entrain de chercher ! ^^

    Merci de ta réponse déjà !

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    try, c'est pas if try...
    A ta place, je ferais propre tout de suite. Car en calant bien tes bind_param, tu sauras peut-être, grâce au bloc try catch, sur quel champ ça achoppe, si ça achoppe sur un champ bien sûr.
    J'avoue que je n'aime guère ta syntaxe pleine de &&... bref, tu n'as pas testé le code proposé.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Mon soucis, c'est qu'il faut que je garde le if, vu qu'en suite ca me sert ...
    je vais mettre les les types et les limites attendues !

    Pour la syntaxe, certe ce n'est pas beau, mais dans le if, j'ai besoin de mes &&

    A moins que j'utilise ma première méthode qui est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $req = $bdd->prepare('
    	INSERT INTO membres(membre_id, membre_pseudo, mdp, email, date_naissance, sexe, date_inscription, date_derniere_visite, membre_rang) 
    	VALUES (:membre_id, :membre_pseudo, :mdp, :email, :date_naissance, :sexe, :date_inscription, :date_derniere_visite, :membre_rang)') 
    	or exit(print_r($req->errorInfo()))    
    	&&                             
    	$req->execute(array(
    		':membre_id' => $membre_id,
    		':membre_pseudo' => $membre_pseudo,
    		':mdp' => $mdp,
    		':email' => $email,
    		':date_naissance' => $date_naissance,
    		':sexe' => $sexe,
    		':date_inscription' => $date_inscription,
    		':date_derniere_visite' => $date_derniere_visite,
    		':membre_rang' => $membre_rang,
    )))
    Mais là encore, soucis ... Pas d'enregistrement dans la BDD

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Une petite explication sur le try and catch :
    Ce qui est bien, c'est que tu ne le mets qu'une fois, et qu'il choppe à la volée l'erreur et son affichage.
    Alors bien sûr, c'est lui qui doit encadrer tout ton algo et non l'inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';
    try{
        $dbh = new PDO($dsn, $user, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//très important bien sûr !
      if($condition1){
        instruction1; //Tu ne t'occupes plus des erreurs éventuelles dans les instructions
      }
      elseif($condition2){
        instruction2; 
      }
    }
    catch(PDOException $e){
       echo $e->getMessage();
    }

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Oh, mille merci pour cette explication, c'est vrai c'était flou pour moi !

    Du coup, ca résoud à moitié le problème car ca m'amène à l'erreur que je trouve sous l'autre forme :

    Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp\www\Site\Membres\inscription.php on line 97

    Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number in C:\wamp\www\Site\Membres\inscription.php on line 97
    Et ca me montre ceci : "Array ( [0] => 00000 [1] => [2] => ) 1"

    Merci pour tes réponses déjà !

  8. #8
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Il est possible qu'un champ soit vide. Personnellement, je code comme ça cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(isset($_POST['valider'])){//c'est juste le clic sur valider que tu vérifies ici
       //null user a rien mis, '' user a mis un truc puis effacé
       $ok=$_POST['membre_pseudo'] != '' && $_POST['membre_pseudo']!=NULL && $_POST['mdp']!='' && $_POST['mdp']!=NULL; //etc
       if($ok){
     
       }
       else{
          echo 'Il faut remplir tous les champs)';
       }
    }
    Autre chose : tu as vérifié que ta table accepte des null sur les champs où tu lui imposes un NULL ?
    "Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number in C:\wamp\www\Site\Membres\inscription.php on line 97"

    Et ca me montre ceci : "Array ( [0] => 00000 [1] => [2] => ) 1
    Tu peux nous remettre la ligne de code incriminée (+ celle d'avant et d'après ?)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    J'ai fait les modification que tu m'as conseillé, c'est vrai que c'est mieux comme ca !

    Voici le code (non, ne me tape pas, je n'ai pas eu le temps de faire les limites ) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    <?php
    include('../Includes/configuration.php');
     
    /********Entête et titre de page*********/
    $titre = 'Inscription';
    include('../Includes/header.php'); //contient le doctype, et head.
    /**********Fin entête et titre***********/
    ?>
     
    <div id="colonne_gauche">
    				<?php
    				/*include('includes/colg.php')*/;
    				?>
    			</div>
     
    			<div id="contenu">
    				<div id="map">
                    <a href="<?php echo ROOTPATH;?>/index.php">Accueil</a> => <a href="<?php echo ROOTPATH;?>/membres/inscription.php">Inscription </a>
    				</div>
    <!-- Début du milieu de page -->
     
    <?php
    //On verifie que le formulaire a ete envoye
     
    if (isset($_POST['go']) && $_POST['go']=='Envoyer') 
    {
     
    $ok = $_POST['membre_pseudo'] != '' && $_POST['membre_pseudo']!=NULL && $_POST['mdp']!='' && $_POST['mdp']!=NULL && $_POST['mdpverif']!='' && $_POST['mdpverif']!=NULL && $_POST['email']!='' && $_POST['email']!=NULL && $_POST['date_naissance']!='' && $_POST['date_naissance']!=NULL && $_POST['sexe']!='' && $_POST['sexe']!=NULL; 
     
    	if($ok)
    	{
     
            //On enleve lechappement si get_magic_quotes_gpc est active
            if(get_magic_quotes_gpc())
            {
                    $_POST['membre_pseudo'] = stripslashes(trim($_POST['membre_pseudo']));
                    $_POST['mdp'] = stripslashes(trim($_POST['mdp']));
                    $_POST['mdpverif'] = stripslashes(trim($_POST['mdpverif']));
                    $_POST['email'] = stripslashes(trim($_POST['email']));
    				$_POST['date_naissance'] = stripslashes(trim($_POST['date_naissance']));
    				$_POST['sexe'] = stripslashes(trim(trim($_POST['sexe'])));
            }
            //On verifie si le mot de passe et celui de la verification sont identiques
            if($_POST['mdp']==$_POST['mdpverif'])
            {
                    //On verifie si le mot de passe a 6 caracteres ou plus
                    if(strlen($_POST['mdp'])>=6)
                    {
                            //On verifie si lemail est valide
                            if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['email']))
                            {
     
    									//On echape les variables pour pouvoir les mettre dans une requette SQL
    									$membre_id = '';
    									$membre_pseudo = $_POST['membre_pseudo'];
    									$mdp = $_POST['mdp'];
    									$email = $_POST['email'];
    									$date_naissance = $_POST['date_naissance'];
    									$sexe = $_POST['sexe'];
    									$date_inscription = date("Y-m-d");
    									$date_derniere_visite = '';
    									$membre_rang = '';
     
     
    								//On vérifie si lemail est déjà utilisé 
    								$sql = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE email = ?');
    								$sql->execute(array($_POST['email']));
    								if ($sql->fetchColumn() == 0)
                                    {
    								$sql = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE membre_pseudo = ?');
    								$sql->execute(array($_POST['membre_pseudo']));
    								if ($sql->fetchColumn() == 0)
     
    									//On verifie sil ny a pas deja un utilisateur inscrit avec le pseudo choisis
    									$sql = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE membre_pseudo = ?');
    									$sql->execute(array($_POST['membre_pseudo']));
    									if ($sql->fetchColumn() == 0)
    									{
     
                                            //On enregistre les informations dans la base de donnee
                                            try{
    										if ( $sql = $bdd->prepare
    										('INSERT INTO membres(membre_id, membre_pseudo, mdp, email, date_naissance, sexe, date_inscription, date_derniere_visite, membre_rang) 
    										VALUES (:membre_id, :membre_pseudo, :mdp, :email, :date_naissance, :sexe, :date_inscription, :date_derniere_visite, :membre_rang)') 
    										&&
    										$sql->bindParam(':membre_id', $membre_id)
    										&&
    										$sql->bindParam(':membre_pseudo', $membre_pseudo)
    										&&
    										$sql->bindParam(':mdp', $mdp)
    										&&
    										$sql->bindParam(':email', $email)
    										&&
    										$sql->bindParam(':date_naissance', $date_naissance)
    										&&
    										$sql->bindParam(':sexe', $sexe)
    										&&
    										$sql->bindParam(':date_inscription', $date_inscription)
    										&&
    										$sql->bindParam(':date_derniere_visite', $date_derniere_visite)
    										&&
    										$sql->bindParam(':membre_rang', $membre_rang)
    										&&
    										$sql->execute() or exit(print_r($bdd->errorInfo())))
     
     
    										{
                                                    //Si ca a fonctionne, on naffiche pas le formulaire
                                                    $form = false;
    ?>
    <div class="message">Vous avez bien &eacute;t&eacute; inscrit. Vous pouvez dor&eacute;navant vous connecter.<br />
    <a href="connexion.php">Se connecter</a></div>
    <?php
                                            }
                                            else
                                            {
                                                    //Sinon on dit quil y a eu une erreur
                                                    $form = true;
                                                    $message = 'Une erreur est survenue lors de l\'inscription.';
                                            }
    										}
     
    										catch(PDOException $e)
    											{
    											echo $e->getMessage();
    											}
     
    									}
    									else
    									{
                                            //Sinon, on dit que le pseudo voulu est deja pris
                                            $form = true;
                                            $message = 'Un autre utilisateur utilise d&eacute;j&agrave; le nom d\'utilisateur que vous d&eacute;sirez utiliser.';
    									}
    								}
    								else
    								{
    									//Sinon, on dit que lemail voulu est deja pris
                                        $form = true;
                                        $message = 'Un autre utilisateur utilise d&eacute;j&agrave; lemail que vous d&eacute;sirez utiliser.';
    								}	
                            }
                            else
                            {
                                    //Sinon, on dit que lemail nest pas valide
                                    $form = true;
                                    $message = 'L\'email que vous avez entr&eacute; n\'est pas valide.';
     
                            }
                    }
                    else
                    {
                            //Sinon, on dit que le mot de passe nest pas assez long
                            $form = true;
                            $message = 'Le mot de passe que vous avez entr&eacute; contien moins de 6 caract&egrave;res.';
                    }
            }
            else
            {
                    //Sinon, on dit que les mots de passes ne sont pas identiques
                    $form = true;
                    $message = 'Les mots de passe que vous avez entr&eacute; ne sont pas identiques.';
     
            }
    	}	
    	else
    	{
    	echo 'Il faut remplir tous les champs';
    	}	
    }
    else
    {
            $form = true;
    }
    if($form)
    {
            //On affiche un message sil y a lieu
            if(isset($message))
            {
                    echo ' <div class="message">'. $message .'</div>' ;
            }
            //On affiche le formulaire
    ?>
     
    <div class="content">
        <form action="inscription.php" method="post">
            Veuillez remplir ce formulaire pour vous inscrire:<br />
            <div class="center">
                <label for="membre_pseudo">Pseudo :</label>
    			<input type="text" name="membre_pseudo" placeholder="Entrez un pseudo" value="<?php if(isset($_POST['membre_pseudo'])){echo htmlentities($_POST['membre_pseudo'], ENT_QUOTES, 'UTF-8');} ?>" required /><br />
     
                <label for="mdp">Mot de passe<span class="small">(6 caract&egrave;res min.)</span></label>
    			<input type="password" name="mdp" placeholder="Entrez un mot de passe" value="<?php if(isset($_POST['mdp'])){echo htmlentities($_POST['mdp'], ENT_QUOTES, 'UTF-8');} ?>" required /><br />
     
                <label for="mdpverif">Mot de passe<span class="small">(v&eacute;rification)</span></label>
    			<input type="password" name="mdpverif" placeholder="Vérification du mdp" value="<?php if(isset($_POST['mdpverif'])){echo htmlentities($_POST['mdpverif'], ENT_QUOTES, 'UTF-8');} ?>" required /><br />
     
                <label for="email">Email</label>
    			<input type="email" name="email" placeholder="Entrez votre email" value="<?php if(isset($_POST['email'])){echo htmlentities($_POST['email'], ENT_QUOTES, 'UTF-8');} ?>" required /><br />
     
    			<label for="date_naissance">Date de naissance</label>
    			<input type="date" name="date_naissance" value="<?php if(isset($_POST['date_naissance'])){echo htmlentities($_POST['date_naissance'], ENT_QUOTES, 'UTF-8');} ?>" required /><br />
     
    			<label for="sexe">Sexe</label>
    				<select name="sexe">
    					<option value="1">Homme</option>
    					<option value="2">Femme</option>
    				</select ><br />
     
                <input type="submit" name ="go" value="Envoyer" />
            </div>
        </form>
    </div>
     
    <?php
    }
    ?>	
     
     
    <!-- Fin du milieu de page -->				
    			</div>
    <?php 
    include('../Includes/footer.php');
    ?>

    Mais toujours cette meme erreur ...

    Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number
    La ligne incriminé est la 104 ème du code ci dessus : $sql->execute() or exit(print_r($bdd->errorInfo()))).

    Voici ma table :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE `membres` (
    	`membre_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    	`membre_pseudo` varchar(45) NOT NULL,
    	`mdp` varchar(45) NOT NULL,
    	`email` varchar(45) NOT NULL,
    	`date_naissance` date NOT NULL,
    	`sexe` tinyint(1) unsigned NOT NULL,
    	`date_inscription` date NOT NULL,
    	`date_derniere_visite` date,
    	`membre_rang` tinyint(4) DEFAULT '1',
    	PRIMARY KEY (`membre_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

    Je suis vraiment désolé de t'emmerdé autant ! et je te remercie encore une fois pour tout ce que tu essais de faire !

  10. #10
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Eh eh, d'abord, ne sois pas désolé. Si tu lis et comprends ma signature en anglais, personne ne peut "m'emmerder", vu que "si j'ai l'impression d'être forcée, je lâche l'affaire" traduction approximative...

    Bon, au stade où on est rendu, il faudrait que tu reviennes à un bon vieux truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql='insert into blablabla values '.$_POST['truc'];
    et que tu affiches le sql qui en résulte, et que tu passes par ton phpmyadmin pour voir où ça coince dans ta table (j'ai l'impression d'avoir bcp répété ça aujourd'hui). ))

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Bien chef, je vais faire ca alors !

    Merci de tes indications, (et ca je ne te le dirais pas assez :p)

    Je le fais, et je reviendrais ici pour dire si ca avance ou pas ^^

Discussions similaires

  1. Message d'alert si formulaire modifie mais pas valide
    Par gigraphe dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/04/2010, 12h53
  2. Formulaire pour insertion dans une bdd
    Par cobolons dans le forum Langage
    Réponses: 6
    Dernier message: 17/04/2009, 19h59
  3. Requete qui reprend les champs d'un formulaire, oui, mais pas tous
    Par Arttt dans le forum Requêtes et SQL.
    Réponses: 20
    Dernier message: 23/06/2008, 17h14
  4. [Conception] Pb d insertion dans une BDD des données d un formulaire
    Par xtiand4 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 02/06/2006, 19h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo