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

PHP & Base de données Discussion :

formulaire avec plusieurs if [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Août 2017
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 68
    Points : 56
    Points
    56
    Par défaut formulaire avec plusieurs if
    Bonjour je suis en terminale S et je m'avance en informatique,je suis maintenant en train d'apprendre le PHP et Mysql je suis donc débutant
    Mon probleme est le suivant: Dans mon site il y'a une page inscription,dans cette page inscription il y'a plusieurs champ comme ceci:Nom : image table3.png
Affichages : 1363
Taille : 87,6 Ko

    et voici mon code 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
    <?php
     
    // on teste si le visiteur a soumis le formulaire
     
    if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
     
    	// on teste l'existence de nos variables. On teste également si elles ne sont pas vides
     
    	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['email']) && !empty($_POST['email'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm'])) && (isset($_POST['debut']) && !empty($_POST['debut'])) && (isset($_POST['fin']) && !empty($_POST['fin'])) && (isset($_POST['act']) && !empty($_POST['act'])) && (isset($_POST['nom']) && !empty($_POST['nom'])) && (isset($_POST['prenom']) && !empty($_POST['prenom']))) {
     
    	// on teste les deux mots de passe
     
    	if ($_POST['pass'] != $_POST['pass_confirm']) {
     
    		$erreur = 'Les 2 mots de passe sont différents.';
    	}
    	if ($_POST['fin'] <= $_POST['debut']) {
     
    		$erreur = 'La date debut  doit être inferieure à celle de fin!!.';
    	}
    	if ($_POST['debut'] <= 2000) {
     
    		$erreur = 'La date debut doit être superieur a 2000!!.';
    	}
         // on teste si syntaxe email est exacte 
    	else {
     
    		$connexion = mysqli_connect ('localhost', 'root', '', 'mysql');
     
    		//mysql_select_db ('mysql', $base);
     
     
     
    		// on recherche si ce login est déjà utilisé par un autre membre
     
    		$sql = 'SELECT count(*) FROM membres2 WHERE login="'.mysqli_escape_string($connexion, $_POST['login']).'"';
     
    		$req = mysqli_query($connexion, $sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysqli_error($connexion));
     
    		$data = mysqli_fetch_array($req);
     
     
     
    		if ($data[0] == 0) {
     
    		$sql = 'INSERT INTO membres2 VALUES("", "'.mysqli_escape_string($connexion, $_POST['login']).'", "'.mysqli_escape_string($connexion, $_POST['email']).'", "'.mysqli_escape_string($connexion, md5($_POST['pass'])).'", "'.mysqli_escape_string($connexion, DATE() ).'", "'.mysqli_escape_string($connexion, $_POST['debut']).'", "'.mysqli_escape_string($connexion, $_POST['fin']).'", "'.mysqli_escape_string($connexion, $_POST['act']).'", "'.mysqli_escape_string($connexion, $_POST['nom']).'", "'.mysqli_escape_string($connexion, $_POST['prenom']).'" )';
     
    		$req = mysqli_query($connexion, $sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error($connexion));
     
     
     
    		session_start();
     
    		$_SESSION['login'] = $_POST['login'];
     
    		header('Location: membre.php');
     
    		exit();
     
    		}
     
    		else {
     
    		$erreur = 'Un membre possède déjà ce login.';
     
     	    }
     
        }
     
    	}
     
    	else {
     
    	$erreur = 'Au moins un des champs est vide. Merci de ressaisir les champs manqués!!';
     
    	}
     
    }
     
    ?>
     
    <html>
     
    <head>
     
    <title>Inscription</title>
     
    </head>
     
     
     
    <html lang="fr">
    		<head>
    	    <title>Menu html/Css recensement college</title>
    		<meta charset="utf-8">
    		<meta name="viewport" content="width=device-width, initial-scale=1">
    		<link rel="stylesheet" href="fichier css.css">
    	</head>
    	<body>
    		<header>
    		<img src="images/banniere creteil.jpg"height="200"style="width: 1350px"VSPACE="0" HSPACE="0" align=center  /> 
    			<nav>
    			<label for="menu-mobile" class="menu-mobile">Menu</label>
    			<input type="checkbox" id="menu-mobile" role="button"> 
    			<ul>
    				<li class="menu-acceuil"><a href="index.html">ACCUEIL </a></li>
    				<li class="menu-inscription"><a href="inscription.php">Inscription</a>
    				</li>
    				<li class="menu-connexion"><a href="connexion.php"> connexion </a>
     
    				</li>
    				<li class="menu-college"><a href="pageCollege html.html"> Le college Amedee Laplace </a>
    				</li>
    				<li class="menu-liste"><a href="liste des membres.php"> Les anciens eleves du college </a>	
    				</li>
    			</ul>
    		</nav>
    		 </div>
    		 </header><hr>
    		 <div><center><IMG src="images/college section.jpg" alt="Le France" height="300" style=" width: 1200px" VSPACE="20" HSPACE="20" Align="center"></center></div>
    	</header>
    	<hr>
    	    <center>Bienvenue à vous chere  <STRONG>visiteurs</STRONG>.<BR></center>
    	<!-- <div><center><IMG src="images/college section.jpg" alt="Le France" height="300" style=" width: 1050px" VSPACE="20" HSPACE="20" Align="center"></center></div>
    	 -->
    	<!--<section>
    	<p><center> Ce site permet aux anciens élèves du college Amedee Laplace de Créteil(94)
    	de se recenser et donc d'avoir la possiblité de contacter leurs anciens camarade de classe.Pour ce faire, <BR>
    	il vous suffit tout simplement de créer un compte  dans le menu "inscription" puis,<BR>vous inscrire comme ancien élève dans le menu "inscription pour se recenser".Et voila c'est simple non?.</center>
    	</p>
    	</section>
    	-->
     
     
     
    	<form action="inscription.php" method="post">
     
        <fieldset>
        <legend>Inscription à l'espace membre :</legend>
     
     
    	<form action="inscription.php" method="post">
     
    	Login : <br><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br> <br />
     
    	Nom: <br><input type="text" name="nom" value="<?php if (isset($_POST['nom'])) echo htmlentities(trim($_POST['nom'])); ?>"><br> <br />
     
    	Prenom : <br><input type="text" name="prenom" value="<?php if (isset($_POST['prenom'])) echo htmlentities(trim($_POST['prenom'])); ?>"><br> <br />
     
    	Adresse Mail : <br><input type="text" name="email" value="<?php if (isset($_POST['email'])) echo htmlentities(trim($_POST['email'])); ?>"><br><br />
     
    	Mot de passe :<br> <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br><br />
     
    	Confirmation du mot de passe : <br><input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"><br><br />
     
    	debut scolarité: <br><input type="text" name="debut" value="<?php if (isset($_POST['debut'])) echo htmlentities(trim($_POST['debut'])); ?>"><br><br />
     
    	fin scolarité: <br><input type="text" name="fin" value="<?php if (isset($_POST['fin'])) echo htmlentities(trim($_POST['fin'])); ?>"><br><br />
     
    	situation actuelle: <br><input type="text" name="act" value="<?php if (isset($_POST['act'])) echo htmlentities(trim($_POST['act'])); ?>"><br><br />
    	<br>
    	<input type="submit" name="inscription" value="Inscription">
     
    	</form>
     
     
     
        <br><br>
     
        <?php
     
         if (isset($erreur)) echo '<br /><br />',$erreur;
     
        ?>
    	 <!-- <p>Vous pouvez <a href="#">réinitialiser votre mot de passe</a> si vous l'avez oublié.</p></p>
    	  <p>Si vous n'avez pas de compte, vous pouvez <a href="inscription.php">en créer un</a> dès maintenant.</p>
     
    	<img src="images/college pied de page.jpg" height="200" style="width: 1050px"VSPACE="0" HSPACE="8" align=center  />
    	-->
     
    	<footer>
     
    	<hr>
    	<img src="photosEleves/sami12.jpg" height="60" style="width: 60px;"  VSPACE="0" HSPACE="8" align=left />
    	<p>Hella Sami:Créateur du site</p>
    	<center> <li><a href="http://collegelaplace.free.fr/index.php?numero=1231"> le site du college Amedee Laplace  </a></li> </center>
    	<center> <li><a href="https://www.facebook.com/profile.php?id=100004882458025"> ma page facebook  </a></li> </center>
     
    	</footer>
     
    	</body>
    </html>
    Alors ce que je voudrais faire c'est bloquer l'inscription si :
    -Le mots de passe et et le confirme mots de passe sont differents
    -La date "fin"est inférieure à la date "debut"
    -la date "debut" est inférieure à 2000

    Mais il n'y a que le dernier if qui marche (donc le troisieme ici),Puis si j’enlève le 3eme if c'est le 2eme qui marche etc...Je voudrais que tous les if marchent correctement.
    SVP ou est mon erreur??
    Merci d'avance...

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Les conditions de tes ifs sont indépendants, c'est-à-dire que l'apparition d'une condition n'empêche pas l'apparition des autres. Les mots de passe peuvent être différents ET la date du début postérieure à la date de fin ET la date de début inférieure à 2000. Dans ces cas, la valeur de $erreur est à chaque fois écrasée par le nouvel if.

    Une solution pourrait être d'utiliser un tableau d'erreur au lieu d'une chaîne.
    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
     
    //avant les ifs
    $erreurs = [];
     
    //ensuite
    if ($_POST['pass'] != $_POST['pass_confirm']) {
     
    		$erreurs[] = 'Les 2 mots de passe sont différents.';
    	}
    	if ($_POST['fin'] <= $_POST['debut']) {
     
    		$erreurs[] = 'La date debut  doit être inferieure à celle de fin!!.';
    	}
    	if ($_POST['debut'] <= 2000) {
     
    		$erreurs[] = 'La date debut doit être superieur a 2000!!.';
    	}
    Et à la fin tu affiches le tableau au lieu de la chaîne.

    Autres conseils puisque tu débutes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isset($var) && !empty($var)
    est une répétition de la même chose.
    est suffisant.

    - Utilise une requête préparée au lieu de mysqli_escape_string pour éviter complètement les risques d'injection SQL.

    - md5 n'est pas fait pour chiffrer un mot de passe, c'est une fonction de hashage et pas d'encryption. Un mot de passe se chiffre avec password_hash() et se vérifie avec password_verify().

  3. #3
    Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Août 2017
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 68
    Points : 56
    Points
    56
    Par défaut
    quand tu dis avant les ifs je le fais avant celui ci aussi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription')

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Tu peux mettre cette déclaration n'importe où avant le premier $erreurs[] = xxxx

    Déclarer une variable n'est pas obligatoire en PHP, mais c'est mieux de le faire lorsqu'on l'affecte à l'intérieur d'un if.

  5. #5
    Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Août 2017
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 68
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    Tu peux mettre cette déclaration n'importe où avant le premier $erreurs[] = xxxx

    Déclarer une variable n'est pas obligatoire en PHP, mais c'est mieux de le faire lorsqu'on l'affecte à l'intérieur d'un if.
    Heu j'ai besoin de ton avis j'ai fait comme ceci est ça marche très bien :
    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
     
    ?php>
    // on teste si le visiteur a soumis le formulaire
     
    if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
     
    	// on teste l'existence de nos variables. On teste également si elles ne sont pas vides
     
    	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['email']) && !empty($_POST['email'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm'])) && (isset($_POST['debut']) && !empty($_POST['debut'])) && (isset($_POST['fin']) && !empty($_POST['fin'])) && (isset($_POST['act']) && !empty($_POST['act'])) && (isset($_POST['nom']) && !empty($_POST['nom'])) && (isset($_POST['prenom']) && !empty($_POST['prenom']))) {
     
    	// on teste les deux mots de passe
     
    	if ($_POST['pass'] != $_POST['pass_confirm']) {
     
    		echo$erreur = 'Les 2 mots de passe sont différents.';
    	}
    	if ($_POST['fin'] <= $_POST['debut']) {
     
    		echo$erreur = 'La date debut  doit etre inferieure à celle de fin!!.';
     
    	}
    	if ($_POST['debut'] <=2000) {
     
    		echo$erreur = 'La date debut  doit etre superieur a 2000!.';
     
    	}
     
         // on teste si syntaxe email est exacte 
    	else {
     
    		$connexion = mysqli_connect ('localhost', 'root', '', 'mysql');
     
    		//mysql_select_db ('mysql', $base);
     
     
     
    		// on recherche si ce login est déjà utilisé par un autre membre
     
    		$sql = 'SELECT count(*) FROM membres2 WHERE login="'.mysqli_escape_string($connexion, $_POST['login']).'"';
     
    		$req = mysqli_query($connexion, $sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysqli_error($connexion));
     
    		$data = mysqli_fetch_array($req);
     
     
     
    		if ($data[0] == 0) {
     
    		$sql = 'INSERT INTO membres2 VALUES("", "'.mysqli_escape_string($connexion, $_POST['login']).'", "'.mysqli_escape_string($connexion, $_POST['email']).'", "'.mysqli_escape_string($connexion, md5($_POST['pass'])).'", "'.mysqli_escape_string($connexion, DATE() ).'", "'.mysqli_escape_string($connexion, $_POST['debut']).'", "'.mysqli_escape_string($connexion, $_POST['fin']).'", "'.mysqli_escape_string($connexion, $_POST['act']).'", "'.mysqli_escape_string($connexion, $_POST['nom']).'", "'.mysqli_escape_string($connexion, $_POST['prenom']).'" )';
     
    		$req = mysqli_query($connexion, $sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error($connexion));
     
     
     
    		session_start();
     
    		$_SESSION['login'] = $_POST['login'];
     
    		header('Location: membre.php');
     
    		exit();
     
    		}
     
    		else {
     
    		$erreur = 'Un membre possède déjà ce login.';
     
     	    }
     
        }
     
    	}
     
    	else {
     
    	$erreur = 'Au moins un des champs est vide. Merci de ressaisir les champs manqués!!';
     
    	}
     
    }
     
    ?>
    Est ce normal que cela fonctionne ?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Oui puisque tu affiches la variable $erreur à chaque fois.

    Dans ta première version, le contenu de la variable est écrasé après chaque if. C'est toujours le cas ici, sauf qu'avant d'être écrasé il est affiché.

    Si ton but est d'afficher les messages d'erreur immédiatement, tu peux carrément supprimer $erreur = et afficher directement l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'Les 2 mots de passe sont différents.'
    Mais si ton but est de stocker les messages d'erreur quelque part pour les utiliser ou les afficher ensuite, tu dois utiliser un tableau.

  7. #7
    Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Août 2017
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 68
    Points : 56
    Points
    56
    Par défaut
    et bien ce que je viens de mettre est complètement contradictoire avec ce que j'ai dis au début mais sinon peux tu me montrer comment faire un tableau d'erreur car tout à l'heure je n'avais pas compris..

  8. #8
    Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Août 2017
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 68
    Points : 56
    Points
    56
    Par défaut
    Saye!!!! Merci beaucoup!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Un formulaire avec plusieurs boutons "submit"
    Par novices dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 11/09/2006, 21h25
  2. Formulaire avec plusieurs listes déroulantes
    Par cyberdevelopment dans le forum Langage
    Réponses: 5
    Dernier message: 17/07/2006, 16h59
  3. formulaire avec plusieurs etapes
    Par dolf13 dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2006, 09h54
  4. Formulaire avec plusieurs submit !
    Par alfigor dans le forum Langage
    Réponses: 6
    Dernier message: 21/04/2006, 12h09
  5. Formulaire avec plusieurs submit -> Récupération
    Par masseur dans le forum Langage
    Réponses: 14
    Dernier message: 30/03/2006, 08h17

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