Signaler

[php] rajouter une vérification dans mon code [Résolu/Fermé]

Posez votre question fabrice11901 790Messages postés dimanche 31 juillet 2005Date d'inscription 12 juillet 2007 Dernière intervention - Dernière réponse le 17 juin 2006 à 14:20 par Thom@s
Bonjour
J'ai un script, qui vérifis si tous les champs du précédent formulaire ont bien étaient entrés et si oui on inscris le membre et on envois un mail si il l'a demandé, sinon on met un message d'erreur mais j'aimerai maintenant rajouter une vérification (voir si le pseudo du membre) n'existe pas dans la bdd mais je ne sais pas comment faire.
1° on vérifis si tous les champs sont remplis
2° on vérifis dans la bdd si le pseudo choisis n'existe déjà pas si il n'existe pas, on fais la requete d'insertion sinon on met un message d'erreur
merci de m'aider je ppense qu'il faut faire un if dans un if mais je ne suis jamais monté aussi haut dans les vérifications.
merci
voici mon code acutel :

<?

  if ( isset($_POST['pseudo'])) 
    $pseudo=$_POST['pseudo'];
  
  if ( isset($_POST['passe'])) 
    $passe=$_POST['passe'];
  
  if ( isset($_POST['adresse'])) 
    $adresse=$_POST['adresse'];
  

  if ($pseudo && $passe && $adresse) {
      echo '<html>
              <head>
              </head>
              <body>';
$dbc = @mysql_connect ("localhost", "zone_zone", "*****");

if(!mysql_errno($dbc)) {
  mysql_select_db("zone_bdd");
      
$requete1 = "insert into v2 values( '' , '".$pseudo."' , '".$passe."' , '".$adresse."')";
  
mysql_query($requete1);

      echo ' <html> Bravo, votre inscription est bien prise en compte. Si vous avez demandé une confirmation par e-mail celle-ci a été envoyé !
              </body>
              </html>  ';
  }
  else {
          echo '<html><head><META HTTP-EQUIV="Refresh" CONTENT="5; URL=http://www.zone-mobile.net/form_inscription.php"></head>';
          echo '<body>Merci de remplir tous les champs</body>';
  }
}
mysql_close();

$mail=$_POST['mail'];
if ($mail == '1') {mail($adresse,
"Confirmation d'inscription au site zone-mobile.net",
"Bonjour et merci pour votre inscription\r\nVous avez demandé à recevoir par e-mail vos identifiants pour vous connecter au site zone-mobile.net\r\nVoici
vos informations :\r\nPseudo : ".$pseudo ."\r\nMot de passe : ". $passe."\r\n".
"Le webmaster vous souhaite une agréable visite sur zone-mobile.net !\r\nPs : Ce mail a été envoyé automatiquement suite à votre demande d'inscription sur zone-mobile.net. Merci de ne pas y répondre.", "From:inscription@zone-mobile.net\r\nReply-To:inscription@zone-mobile.net");
}
else {
    echo "<p></p>";
} 

?> <html><a href="http://www.zone-mobile.net/accueil.php">Retour à l'accueil</A></html>

Utile
+0
plus moins
Salut !

Pour vérifier que le pseudo n'est pas déjà dans la base, il faut lancer une requête sur ce pseudo et vérifier que le nombre de résultats est égal à zéro.

Voilà donc le code modifié :
<html>
  <head>
  <META HTTP-EQUIV="Refresh" CONTENT="5; URL=http://www.zone-mobile.net/form_inscription.php">
  </head>
  
  <body>
<?
  if ( isset($_POST['pseudo'])) 
    $pseudo=addslashes(stripslashes($_POST['pseudo']));
  
  if ( isset($_POST['passe'])) 
    $passe=addslashes(stripslashes($_POST['passe']));
  
  if ( isset($_POST['adresse'])) 
    $adresse=addslashes(stripslashes($_POST['adresse']));

// Les addslashes sont nécessaires pour la sécurité du script (pour éviter des "injections SQL")
  
  
  if ($pseudo && $passe && $adresse) {
      echo '<html>
              <head>
              </head>
              <body>';
      $dbc = @mysql_connect ("localhost", "zone_zone", "*****");
      
      if(!mysql_errno($dbc)) {
          mysql_select_db("zone_bdd");
          
          $requete2 = "SELECT id FROM v2 WHERE pseudo='".$pseudo."'"; // On recherche le pseudo dans la base
          /* Bien sûr, c'est à adapter (ça suppose que le champ "clé" de ta table s'appelle id, que ta table s'appelle v2 et que le champ qui contient les pseudos s'appelle pseudo) */
          $requete2_query = mysql_query($requete2);
          
          if (mysql_num_rows($requete2_query)<1) { // Si le pseudo n'existe pas
            $requete1 = "insert into v2 values( '' , '".$pseudo."' , '".$passe."' , '".$adresse."')";
            mysql_query($requete1);
            
            echo 'Bravo, votre inscription est bien prise en compte. Si vous avez demandé une confirmation par e-mail, celle-ci a été envoyée !';
          }
          else { // Si le pseudo existe déjà
            echo 'Vous êtes déjà inscrit.<br>
              Aussi, votre inscription n\'a pas été prise en compte une seconde fois.';
          }
          mysql_free_result($requete2_query);
      }
      else {
            'Merci de remplir tous les champs';
      }
}
mysql_close();

$mail=$_POST['mail'];
if ($mail == '1') {
  mail($adresse,
  "Confirmation d'inscription au site zone-mobile.net",
  "Bonjour et merci pour votre inscription\r\nVous avez demandé à recevoir par e-mail vos identifiants pour vous connecter au site zone-mobile.net\r\nVoici
  vos informations :\r\nPseudo : ".$pseudo ."\r\nMot de passe : ". $passe."\r\n".
  "Le webmaster vous souhaite une agréable visite sur zone-mobile.net !\r\nPs : Ce mail a été envoyé automatiquement suite à votre demande d'inscription sur zone-mobile.net. Merci de ne pas y répondre.", "From:inscription@zone-mobile.net\r\nReply-To:inscription@zone-mobile.net");
}
else {
    echo "<p></p>";
} 

?> 
  <a href="http://www.zone-mobile.net/accueil.php">Retour à l'accueil</a>
  </body>
</html>

• Deux remarques :

1) J'ai mis les balises <html>, <body>, etc. en dur une fois pour toutes (en début et fin de page), pour ne pas les répéter dans chaque echo.

2) Pour la sécurité de ton script (pour éviter les "injections SQL"), j'ai ajouté addslashes et stripslashes. Ces deux fontions servent respectivement à ajouter et supprimer les antislashes devant les caractères tels que les guillemets (") ou les apostrophes (').
- On supprime d'abord les slashes s'ils ont été ajoutés automatiquement;
- On les ajoute ensuite. Comme ça, on est bien sûr qu'ils sont là ;-)

A+ :)
Utile
+0
plus moins
salut
merci
par contre y a un pb j'obtiens si je ne remplis aucun champs warning mysql_close() puis si le pseudo est déjà prix iil envois quand même le mail de confirmation !
merci
Thom@s 3434Messages postés mardi 4 mars 2003Date d'inscription ModérateurStatut 27 août 2010 Dernière intervention - 17 juin 2006 à 12:43
Re,

Ben oui, il faut adapter le code :-)

1) Il faut que mysql_conect() et mysql_close() soient ensemble: soit tous les deux dans le if (ce que j'ai fait), soit tous les deux hors du if.

2) Ben pour qu'il envoie le mail de confirmation seulement si le pseudo n'existe pas, il suffit de mettre le mail() dans le (mysql_num_rows($requete2_query)<1).

3) Les if/else étaient un peu confus; j'ai essayé de clarifier ça.

<html>
  <head>
  <META HTTP-EQUIV="Refresh" CONTENT="5; URL=http://www.zone-mobile.net/form_inscription.php">
  </head>
  
  <body>
<?
  if ( isset($_POST['pseudo'])) 
    $pseudo=addslashes(stripslashes($_POST['pseudo']));
  
  if ( isset($_POST['passe'])) 
    $passe=addslashes(stripslashes($_POST['passe']));
  
  if ( isset($_POST['adresse'])) 
    $adresse=addslashes(stripslashes($_POST['adresse']));

// Les addslashes sont nécessaires pour la sécurité du script (pour éviter des "injections SQL")
  
  
  if ($pseudo && $passe && $adresse && !mysql_errno($dbc)) {
      echo '<html>
              <head>
              </head>
              <body>';
      $dbc = @mysql_connect ("localhost", "zone_zone", "*****");
      
      mysql_select_db("zone_bdd");
      
      $requete2 = "SELECT id FROM v2 WHERE pseudo='".$pseudo."'"; // On recherche le pseudo dans la base
      /* Bien sûr, c'est à adapter (ça suppose que le champ "clé" de ta table s'appelle id, que ta table s'appelle v2 et que le champ qui contient les pseudos s'appelle pseudo) */
      $requete2_query = mysql_query($requete2);
      
      if (mysql_num_rows($requete2_query)<1) { // Si le pseudo n'existe pas
        $requete1 = "insert into v2 values( '' , '".$pseudo."' , '".$passe."' , '".$adresse."')";
        mysql_query($requete1);
        
        echo 'Bravo, votre inscription est bien prise en compte. Si vous avez demandé une confirmation par e-mail, celle-ci a été envoyée !';
        
        $mail=$_POST['mail'];
        if ($mail == '1') {
          mail($adresse,
          "Confirmation d'inscription au site zone-mobile.net",
          "Bonjour et merci pour votre inscription\r\nVous avez demandé à recevoir par e-mail vos identifiants pour vous connecter au site zone-mobile.net\r\nVoici
          vos informations :\r\nPseudo : ".$pseudo ."\r\nMot de passe : ". $passe."\r\n".
          "Le webmaster vous souhaite une agréable visite sur zone-mobile.net !\r\nPs : Ce mail a été envoyé automatiquement suite à votre demande d'inscription sur zone-mobile.net. Merci de ne pas y répondre.", "From:inscription@zone-mobile.net\r\nReply-To:inscription@zone-mobile.net");
        }
      }
      else { // Si le pseudo existe déjà
        echo 'Vous êtes déjà inscrit.<br>
          Aussi, votre inscription n\'a pas été prise en compte une seconde fois.';
      }
      mysql_free_result($requete2_query);
      mysql_close();
}
else {
      'Merci de remplir tous les champs';
}

?> 
  <a href="http://www.zone-mobile.net/accueil.php">Retour à l'accueil</a>
  </body>
</html>

A+ :-)
Utile
+0
plus moins
re
en fait :
si un pseudo est déjà prit j'obtient :

Warning: mysql_errno(): supplied argument is not a valid MySQL-Link resource in /home/zone/domains/zone-mobile.net/public_html/inscription.php on line 19
Désolé, mais ce pseudo existe déjà.
Veuillez en choisir un autre. Retour à l'accueil.
Si je ne rentre aucun infos dans le formulaire je n'obtiens pas de message d'erreur alors que je devrait avoir : merci de remplir tous les champs" puis je suis r'envoyer vers la page d'inscription...
d'où vient le pb?
merci à toi t'es sympat
Thom@s 3434Messages postés mardi 4 mars 2003Date d'inscription ModérateurStatut 27 août 2010 Dernière intervention - 17 juin 2006 à 13:10
Re,

1) Il faut mettre mysql_connect() et mysql_close() en-dehors du if (sinon, mysql_errno ne marche pas).

2) Pour vérifier que les champs sont bien remplis, il ne suffit pas de vérifier que $_POST['LeChamp'] existe: isset($_POST['LeChamp']) .
Il faut vérifier que la variable n'est pas vide :

$LeChamp!=''
(ce sont deux apostrophes qui se suivent)

Ca donne donc :
<html>
  <head>
  <META HTTP-EQUIV="Refresh" CONTENT="5; URL=http://www.zone-mobile.net/form_inscription.php">
  </head>
  
  <body>
<?
  if ( isset($_POST['pseudo'])) 
    $pseudo=addslashes(stripslashes($_POST['pseudo']));
  
  if ( isset($_POST['passe'])) 
    $passe=addslashes(stripslashes($_POST['passe']));
  
  if ( isset($_POST['adresse'])) 
    $adresse=addslashes(stripslashes($_POST['adresse']));

// Les addslashes sont nécessaires pour la sécurité du script (pour éviter des "injections SQL")
  
  $dbc = @mysql_connect ("localhost", "zone_zone", "*****");
  
  if ($pseudo!='' && $passe!='' && $adresse!='' && !mysql_errno($dbc)) {
      echo '<html>
              <head>
              </head>
              <body>';
                    
      mysql_select_db("zone_bdd");
      
      $requete2 = "SELECT id FROM v2 WHERE pseudo='".$pseudo."'"; // On recherche le pseudo dans la base
      /* Bien sûr, c'est à adapter (ça suppose que le champ "clé" de ta table s'appelle id, que ta table s'appelle v2 et que le champ qui contient les pseudos s'appelle pseudo) */
      $requete2_query = mysql_query($requete2);
      
      if (mysql_num_rows($requete2_query)<1) { // Si le pseudo n'existe pas
        $requete1 = "insert into v2 values( '' , '".$pseudo."' , '".$passe."' , '".$adresse."')";
        mysql_query($requete1);
        
        echo 'Bravo, votre inscription est bien prise en compte. Si vous avez demandé une confirmation par e-mail, celle-ci a été envoyée !';
        
        $mail=$_POST['mail'];
        if ($mail == '1') {
          mail($adresse,
          "Confirmation d'inscription au site zone-mobile.net",
          "Bonjour et merci pour votre inscription\r\nVous avez demandé à recevoir par e-mail vos identifiants pour vous connecter au site zone-mobile.net\r\nVoici
          vos informations :\r\nPseudo : ".$pseudo ."\r\nMot de passe : ". $passe."\r\n".
          "Le webmaster vous souhaite une agréable visite sur zone-mobile.net !\r\nPs : Ce mail a été envoyé automatiquement suite à votre demande d'inscription sur zone-mobile.net. Merci de ne pas y répondre.", "From:inscription@zone-mobile.net\r\nReply-To:inscription@zone-mobile.net");
        }
      }
      else { // Si le pseudo existe déjà
        echo 'Vous êtes déjà inscrit.<br>
          Aussi, votre inscription n\'a pas été prise en compte une seconde fois.';
      }
      mysql_free_result($requete2_query);
}
else {
      'Merci de remplir tous les champs';
}
mysql_close();

?> 
  <a href="http://www.zone-mobile.net/accueil.php">Retour à l'accueil</a>
  </body>
</html>

A+ :-)
Utile
+0
plus moins
déjà je n'obtiens pas le message d'erreur warning... mais si je ne remplis aucun champs, je n'ai pas le message d'erreur "merci de remplir tous les champs" si le pseudo est déjà utilisé ça met bien le bon message d'erreur.

Code php
<html>
  <head>
  <META HTTP-EQUIV="Refresh" CONTENT="5; URL=http://www.zone-mobile.net/form_inscription.php">
  </head>

  <body>
<?
  if ( isset($_POST['pseudo']))
    $pseudo=addslashes(stripslashes($_POST['pseudo']));

  if ( isset($_POST['passe']))
    $passe=addslashes(stripslashes($_POST['passe']));

  if ( isset($_POST['adresse']))
    $adresse=addslashes(stripslashes($_POST['adresse']));

// Les addslashes sont nécessaires pour la sécurité du script (pour éviter des "injections SQL")

  $dbc = @mysql_connect ("localhost", "zone_zone", "*****");

  if ($pseudo!='' && $passe!='' && $adresse!='' && !mysql_errno($dbc)) {
      echo '<html>
              <head>
              </head>
              <body>';

      mysql_select_db("zone_bdd");

      $requete2 = "SELECT id FROM v2 WHERE pseudo='".$pseudo."'"; // On recherche le pseudo dans la base
      /* Bien s?r, c'est ? adapter (ça suppose que le champ "clé" de ta table s'appelle id, que ta table s'appelle v2 et que le champ qui contient les pseudos
s'appelle pseudo) */
      $requete2_query = mysql_query($requete2);

      if (mysql_num_rows($requete2_query)<1) { // Si le pseudo n'existe pas
        $requete1 = "insert into v2 values( '' , '".$pseudo."' , '".$passe."' , '".$adresse."')";
        mysql_query($requete1);

        echo 'Bravo, votre inscription est bien prise en compte. Si vous avez demandé une confirmation par e-mail, celle-ci a été envoyée !';

        $mail=$_POST['mail'];
        if ($mail == '1') {
          mail($adresse,
          "Confirmation d'inscription au site zone-mobile.net",
          "Bonjour et merci pour votre inscription\r\nVous avez demandé ? recevoir par e-mail vos identifiants pour vous connecter au site zone-mobile.net\r\nVoici
          vos informations :\r\nPseudo : ".$pseudo ."\r\nMot de passe : ". $passe."\r\n".
          "Le webmaster vous souhaite une agréable visite sur zone-mobile.net !\r\nPs : Ce mail a été envoyé automatiquement suite ? votre demande d'inscription
sur zone-mobile.net. Merci de ne pas y répondre.", "From:inscription@zone-mobile.net\r\nReply-To:inscription@zone-mobile.net");
        }
      }
      else { // Si le pseudo existe déj?
        echo 'Désolé, mais ce pseudo est déjà utilisé. Veuillez en choisir un autre.';
      }
      mysql_free_result($requete2_query);
}
else {
      'Merci de remplir tous les champs';
}
mysql_close();

?>
  <a href="
http://www.zone-mobile.net/accueil.php">Retour à
l'accueil</a>
  </body>
</html>


c'est vrai que je m'y pert dans ce code ! car je n'ai jamais utilisé de if dans un autre donc je me mélange...
merci
Thom@s 3434Messages postés mardi 4 mars 2003Date d'inscription ModérateurStatut 27 août 2010 Dernière intervention - 17 juin 2006 à 13:56
Re,

C'est une erreur d'inattention: il manque le echo (en bas, dans le else, devant 'Merci de remplir tous les champs';).
;-)

A+
Utile
+0
plus moins
salut
c'est bon ça marche !
merci bon va falloir que je me face à ces if (ce sont les {} qui me perturbent...)
A+ et encoremerci
Thom@s 3434Messages postés mardi 4 mars 2003Date d'inscription ModérateurStatut 27 août 2010 Dernière intervention - 17 juin 2006 à 14:20
De rien ;-)

A+

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !