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 :

Script page d'inscription


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Script page d'inscription
    Bonsoir à tous,

    Actuellement je me forme au langage php, étant un grand bidouilleur je m'y met plus sérieusement et en profondeur. Actuellement entrain d'essayer de convertir une page d'inscription utilisant mysql_connect vers pdo. Je rencontre quelques embûches.



    Pour être plus précis j'ai un dossier info avec un fichier config.php qui contient :

    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
    <?php
    	  $db_host = 'localhost';
    	  $db_name = 'site'; //nom base de donnée principale (car j'en ai trois en tout)
    	  $db_user = 'user'; //nom utilisateur
    	  $db_pass = 'mdp'; //mot de passe
     
    	// Connexion à la base
    	try {
    		$strConnection = 'mysql:host='.$db_host.';dbname='.$db_name; //Ligne 1
    		$arrExtraParam= array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); //Ligne 2
    		$gobdd = new PDO($strConnection, $db_user, $db_pass, $arrExtraParam); //Ligne 3; Instancie la connexion
    		$gobdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//Ligne 4
    		$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
    	}
    	catch(PDOException $e) {
    		$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    		die($msg);
    	}
    ?>
    Donc voici mon script :
    Information : il s'affiche correctement sans erreur, sauf qu'une fois soumis via le bouton d'envoi, je me retrouve sur mon index.php et aucune donnée n'est inscrite dans ma bdd rm_auth.
    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
     
     <?php
    	session_start();
    	require_once ('info/config.php');
    ?>
     
    <?php
    			if(isset($_POST['valide']))
    			{
    				$ndc = ($_POST['pseudo']);
    				$mdp = ($_POST['mdp']);
    				$mdp2 = ($_POST['mdp2']);
    				$mail = ($_POST['email']);
    				if($ndc  != NULL) 
    				{ 
    					if($mdp != NULL)
    					{
    						if($mdp2 != NULL)
    						{
    							if($mdp == $mdp2)
    							{
    								if($mail != NULL)
    								{
    									$gobdd->exec('USE rm_auth');
                                        $reponse = $gobdd->prepare("INSERT INTO account (username, sha_pass_hash,  email, expansion, last_ip) VALUES (':$ndc',:SHA1(CONCAT(UPPER('$ndc'),':',:UPPER('$mdp'))),':$mail', ':$expension', ':$ip')");
    									$reponse->execute(array(
      									'pseudo' => $ndc,
          								'mdp' => $mdp,
    									'mdp2' => $mdp2,
          								'email' => $mail));
    									echo '
    										<div class="cadre_inscription">
    											<center>
    												Vous pouvez vous connecter.
    											</center>
    										</div>
    									';
     
    								}
    								else { echo '<div class="cadre_inscription"><center>Il faut indiquer votre E-Mail !<br /><br /><a href="index.php"><button type="submit2" class="submit">Retour</button></a></center></div>'; }
    							}
    							else { echo '<div class="cadre_inscription"><center>Les mots de passe ne sont pas identiques !<br /><br /><a href="index.php"><button type="submit2" class="submit">Retour</button></a></center></div>'; }
    						}
    						else { echo '<div class="cadre_inscription"><center>Il faut retaper votre mot de passe !<br /><br /><a href="index.php"><button type="submit2" class="submit">Retour</button></a></center></div>'; }
    					}
    					else { echo '<div class="cadre_inscription"><center>Il faut indiquer un mot de passe !<br /><a href="index.php"><button type="submit" class="submit2">Retour</button></a></center></div>'; }
    				}
    				else { echo '<div class="cadre_inscription"><center>Il faut indiquer un nom de compte !<br /><br /><a href="index.php"><button type="submit" class="submit2">Retour</button></a></center></div>'; }
    			}
    			else
    			{
    		?>
     
    		<div class="cadre_inscription">
    			<form action="index.php" method="post">
    				<center>
    					<input type="text" class="input_text" name="pseudo" placeholder="Votre nom de compte" /><br />
    					<input type="password" class="input_text" name="mdp" placeholder="Votre mot de passe" /><br />
    					<input type="password" class="input_text" name="mdp2" placeholder="Répétez le mot de passe" /><br />
    					<input type="text" class="input_text" name="email" placeholder="exemple@boitemail.com" /><br />
    					<br />
    					<input type="hidden" name="valide" value="1" />
    					<button type="submit" class="button-small" />Inscription !</button>
    				</center>
    			</form>
    		</div>
     
    <?php
    }
    ?>
    Voilou en vous remerciant par avance : o

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Moi non plus je ne suis pas un spécialiste de PDO, mais d'après les exemples que j'ai vus les paramètres ont la forme suivante :

    $reponse->execute(array(':pseudo' => $ndc,':mdp' => $mdp,':mdp2' => $mdp2,':email' => $mail));

    et dans la requête ils sont utilisés tels quels sans apostrophe ni $ => VALUES(:ndc et non pas VALUES (':$ndc' .

    Les : devant SHA ou UPPER ne vont pas il faut les mettre devant les paramètres.

    Dans ton code ci-dessous en plus de mes remarques précédentes je vois pas mal d'incohérences.
    - Tu mets pseudo dans l'array et on ne le voit pas dans values.
    - Tu mets mdp2 dans l'array et on ne le voit pas dans values.
    - Tu mets expension dans values mais on ne le voit pas dans array.
    - Tu mets ip dans values mais on ne le voit pas dans array.

    Bref il n'y a pas qu'une seule erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $reponse = $gobdd->prepare("INSERT INTO account (username, sha_pass_hash,  email, expansion, last_ip) VALUES (':$ndc',:SHA1(CONCAT(UPPER('$ndc'),':',:UPPER('$mdp'))),':$mail', ':$expension', ':$ip')");
    $reponse->execute(array('pseudo' => $ndc,'mdp' => $mdp,'mdp2' => $mdp2,'email' => $mail));
    Autres points (liste non exhaustive).
    - Les valeurs du tableau $_POST ne seront jamais égales à NULL. Au pire elles ne sont pas définies.
    - Tu ne contrôles pas s'il existe déjà un utilisateur avec le même pseudo.
    - Tu ne contrôles pas la validité de l'adresse e-mail.
    - La succession de if rend le code très difficile à lire et à maintenir. Si tu dois ajouter un ou deux paramètres voire 1 ou 2 contrôles ça sera coton à modifier.

    Essaie d'avoir une structure comme ci-dessous. C'est plus lisible. Non ?

    Edit : à la relecture de mon code => echo "<div class='cadre_inscription'>"; et non pas echo "<div class="cadre_inscription">";


    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
     
    $ndc  = isset($_POST['pseudo']) ? $_POST['pseudo'] : '';
    $mdp  = isset($_POST['mdp'])    ? $_POST['mdp']    : '';
    $mdp2 = isset($_POST['mdp2'])   ? $_POST['mdp2']   : '';
    $mail = isset($_POST['email'])  ? $_POST['email']  : '';
    if (($ndc == '') || ($mdp == '') || ($mdp2 == '') || ($email == '')) {
     echo "<div class="cadre_inscription">";
     if ($ndc  == '') { echo "Il faut indiquer votre pseudo !<br />";}
     if ($mdp  == '') { echo "Il faut indiquer votre mot de passe !<br />";}
     if ($mdp2 == '') { echo "Il faut retaper votre mot de passe !<br />";}
     if ($mail == '') { echo "Il faut indiquer votre adresse e-mail !<br />";}
     echo "<a href='index.php'>Retour</a>";
     echo "</div>";
    } else {
     if ($mdp != $mdp2) {
      echo "<div class="cadre_inscription">";
      echo "Les mots de passe ne sont pas identiques !<!<br />"; 
      echo "<a href='index.php'>Retour</a>";
      echo "</div>"; 
     
     } else {
      // Traitement SQL
     }
    }
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci pour tous ces points Badaze. Je vais corriger tout cela, et continuer à m’entraîner jusqu'au succès de mon premier script .

  4. #4
    Membre à l'essai Avatar de Lagriffe6K
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Pour te connecter en PDO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    try{
    	$gobdd = new PDO('mysql:localhost;dbname=nomDeLaBase;', 'root', 'motDePasse');
    }
    catch(Exception $e){
    	die ( 'Erreur de BDD : '. $e->getMessage() );
    }
    ?>
    Pour insérer des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $q = $gobdd->prepare( "INSERT INTO account (username, sha_pass_hash,  email, expansion, last_ip) VALUES (:username, :sha_pass_hash,  :email, :expansion, :last_ip) ");
    $q->bindValue(':username', $ndc);
    $q->bindValue(':sha_pass_hash', $mdp);
    $q->bindValue(':email', $mail);
    $q->bindValue(':expansion', $expension);
    $q->bindValue(':last_ip', $ip, PDO::PARAM_INT); //si ton champ en entier, regarde la doc pour plus d'infos
    $q->execute();
    ?>
    Aussi simple que ça !! Il peut y avoir quelques erreurs, je n'ai pas testé, mais c'est le principe. Goodluck!!

Discussions similaires

  1. [Forum] Personnalisation de la page d'inscription
    Par roumayne dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 15/10/2007, 12h44
  2. [PHP-JS] page d inscription dans un site
    Par H-bil dans le forum Langage
    Réponses: 5
    Dernier message: 16/06/2006, 02h03
  3. Réponses: 3
    Dernier message: 13/05/2006, 22h42
  4. Script page administration et authentification Php
    Par mastercartman dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 11/03/2006, 17h34

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