[RESOLU] Dans la base, le nom mais pas le prénom !

Eléphanteau du PHP | 33 Messages

08 févr. 2015, 18:00

Bonjour
Je cherche dans mon code une erreur, et je ne trouve pas.
Il s'agit d'un formulaire qui doit permettre d'enregistrer des inscriptions à un stage.
Une premier formulaire demande : nom, prénom, date de naissance, email. Je mets ces données en session. Puis, deuxième formulaire, dans lequel je fais compléter pseudo, mot de passe, adresse, etc. Et dans ce deuxième formulaire, je fais l'insertion dans la base de données des éléments du premier formulaire et du deuxième. Ca marche presque ! Dans la base, je retrouve les enregistrements sauf celui du prénom, et de l'email, et la date de naissance est 0000-00-00.
Je patauge. Je ne trouve rien qui dans le code distingue la façon de traiter le nom et le prénom... Pourtant, j'essuie mes lunettes, je me lève pour faire des mouvements de relaxation, je respire...
Merci à qui aura la patience de se pencher sur la question.

Voici mon code :
_________________________________
Premier formulaire
<?php
session_start();

$nele_jour= isset($_POST['nele_jour'])? $_POST['nele_jour']:"";
$nele_mois= isset($_POST['nele_mois'])  ?   $_POST['nele_mois']:"";
$nele_annee= isset($_POST['nele_annee'])  ?$_POST['nele_annee']:"";
$email =isset($_POST['email'])  ?$_POST['email']:"";
$nom= isset($_POST['nom'])  ?$_POST['nom']:"";
$prenom=isset($_POST['prenom'])  ?$_POST['prenom']:"";
$email   =isset($_POST['email'])  ?$_POST['email']:"";
$submit=isset($_POST['submit'])?$_POST['submit']:"";
$idcourant= isset($_SESSION['idcourant'])?$_SESSION['idcourant']:"";


?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>accueil</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="HAPedit 3.1">
<link rel="StyleSheet" href="style2.css" type="text/css">
</head>
<body bgcolor="#FFFFFF">


<?php

include ("bandeauhaut2.php");
include ("fonction.php");
include ("gauche2.php");
include ("bonjour3.php");

?>
<div id="global">
<h1>Créer un compte</h1>
  <div class="boitelarge">
<h5>
<?php


if ($submit !="")
{

   if (empty($_POST['nom']) or empty($_POST['prenom']) or empty($_POST['nele_annee'])  or empty($_POST['nele_mois'])  or empty($_POST['nele_jour'])or empty($_POST['email']))
           {
           echo "Erreur : un champ au moins est vide (Irrtum : mindestens ein Feld ist leer)";
           }
   elseif(($nele=verif_date($_POST['nele_jour'],$_POST['nele_mois'],$_POST['nele_annee'])) == "date erronée")
          {
          echo $nele;



          }


   elseif ($baseRes=mysql_query("select * from fl... where nom='".$nom."' AND prenom='".$prenom."' AND nele='".$nele."'")and $num=mysql_num_rows($baseRes)!=0)
           {
           $base=mysql_fetch_array($baseRes);
           echo("Bonjour"." ".$base['prenom']."  ".$base['nom']); ?>

           <br><h6>Vous avez essayé de créer un compte alors qu'un
           compte à ce nom existe déjà. <br>Un mail vous a été envoyé à l'adresse :<br><?php echo $base['email'];?>
           <br>vous y trouverez votre pseudo et votre mot de passe qui vous permettront de vous identifier sur la page d'accueil.
           A bientôt.  <br><br>
           <a href="index.php">Retour à la page d'accueil </a><br /><br />
           <font color ="#97B957"> Sie haben versucht, ein Konto zu schaffen, während ein Konto mit diesem Namen schon existiert.
           Ein mail ist Ihnen an die Email :<br><?php echo $email ;?><br> gesandt gewesen : Sie werden dort Ihren pseudo und Ihr Kennwort finden, die Ihnen sich zu identifizieren erlauben werden. Bis bald.</H6>
           <?php
           $to=$base['email'];
           $sujet="Identification Fl...";
           $message =("Bonjour"." ". $base['prenom'].", voici vos identifiants : votre pseudo (Login) : ". " ".$base['pseudo']."
           et votre mot de passe (Password): ".$base['mp']);
           $from="from:[email protected]";
           mail($to,$sujet,$message,$from);
           }

           /*      while ($row = mysql_fetch_assoc($baseRes))
                {
                     echo $row['nom'];
                     echo $row['prenom'];
                     echo $row['nele']."<br>";
                }

                echo("Bonjour"." ".$prenom."   ".$nom."<br>"."Vous êtes déjà dans la base de données. Un mail vous a été envoyé à l'adresse". "  ".$email);
                $to=$email;
                $sujet="Identification Fl...";
                $message =("Bonjour"." ". $prenom.", voici vos identifiants : votre pseudo :". " ".$baseRes['pseudo']." et votre mot de passe : ".$baseRes['mp']);
                $from="from:[email protected]";
                mail($to,$sujet,$message);
          } */

    else {

              $_SESSION['nom']=$_POST['nom'];
              $_SESSION['prenom']=$_POST['prenom'];
              $_SESSION['nele']=$nele;
              $_SESSION['email']=$_POST['email'];

              rediriger("inscoordonneesstage2.php");
          }
}
?>
</h5>
<form method="POST" action="inscoordonneesstage2.php ">
  <h3>Nom (Name)</h3>
  <input type="text" value= "<?php echo $nom; ?>" name="nom">
  <h3>Prénom (Vorname)</h3>
  <input type="text" value = "<?php echo $prenom; ?>" name="prenom">
  <h3>  Date de naissance (Geburtsdatum)</h3>
  <h6><?php
      $debut=1900;
      champ_annee('nele_annee',$annee, $debut);
      champ_mois('nele_mois',$mois);
      champ_jour('nele_jour',$jour);
  ?> </h6>
  <h3>  Email </h3>

  <input type="text" value= "<?php echo $email; ?>" name="email"   >

  <br><br>
  <input type="submit" name="submit" value="enregistrer" class="submit">
</form>

</div>
</body>

</html>
___________________________
Et voici mon deuxième formulaire
<?php
session_start();

$pseudo   =isset($_POST['pseudo'])  ?$_POST['pseudo']:"";
$mp   =isset($_POST['mp'])  ?$_POST['mp']:"";
$nom      =isset($_POST['nom'])     ?$_POST['nom']:"";
$prenom   =isset($_POST['prenom'])  ?$_POST['prenom']:"";
$nele   =isset($_POST['nele'])  ?$_POST['POST']:"";
$parentM  =isset($_POST['parentM'])  ?$_POST['parentM']:"";
$parentnom =isset($_POST['parentnom'])  ?$_POST['parentnom']:"";
$parentprenom =isset($_POST['parentprenom'])  ?$_POST['parentprenom']:"";

$email   =isset($_POST['email'])  ?$_POST['email']:"";
$numrue =isset($_POST['numrue'])?$_POST['numrue']:"";
$cp     =isset($_POST['cp'])    ?$_POST['cp']:"";
$ville  =isset($_POST['ville']) ?$_POST['ville']:"";
$tel1   =isset($_POST['tel1'])  ?$_POST['tel1']:"";
$tel2   =isset($_POST['tel2'])  ?$_POST['tel2']:"";
$profession   =isset($_POST['profession'])  ?$_POST['profession']:"";
$date  =isset($_POST['date'])?$_POST['date']:"";
$text  =isset($_POST['text'])?$_POST['text']:"";
$submit=isset($_POST['submit'])?$_POST['submit']:"";
$nb=isset($_POST['nb'])?$_POST['nb']:"";
$req=isset($_POST['req'])?$_POST['req']:"";
$idcourant= isset($_SESSION['idcourant'])?$_SESSION['idcourant']:"";
?>
<?php
ini_set ('session.bug_compat_42', 0);
ini_set ('session.bug_compat_warn', 0);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>accueil</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="HAPedit 3.1">
<link rel="StyleSheet" href="style2.css" type="text/css">
</head>
<body>


<?php
include("bonjour3.php");
include("bandeauhaut2.php");
include("gauche2.php");
include ("fonction.php");
?>
<H1>
<?php
echo $prenom." ".$nom; ?>
</H1>  <div class="boitelarge"> <h4>
<?php
if ($submit!="")
{


  if (empty($_POST['pseudo']) or empty($_POST['mp']) or empty($_POST['numrue'])  or empty($_POST['cp'])  or empty($_POST['ville']))
           {
           echo "Les champs marqués d'un * sont obligatoires";
           }
  elseif (($req=mysql_query("SELECT * FROM fl  where pseudo='".$_POST['pseudo']."'" )
  or die   (mysql_error()) ) and $nb=mysql_num_rows($req)!=0)
       {
       echo "Ce pseudo est déjà utilisé. Choisissez en un autre. (Dieses Login ist schon benutzt. Wählen Sie ein anderes.)" ;
       }


  else
       {
         $numrue = addslashes($numrue);
         $nom= addslashes($numrue);

         $date=date("Y-m-d") ;
         mysql_query("insert into fl (date, pseudo, mp, prenom, nom,  nele,  email,
         numrue, cp, ville, tel1, tel2)
         VALUES ('".$date."', '".$pseudo."', '".$mp."',
          '".$prenom."', '".$nom."','".$nele."',  '".$email."', '".$numrue."', '".$cp."',
           '".$ville."', '".$tel1."', '".$tel2."' )" ) or die   (mysql_error());
         $adresse="indexstage.php";
         rediriger($adresse);
       } // ======> fin du else
} //======> fin du if submit
?></H4>

<h3>
<form method="post" action="inscoordonneesstage2.php ">
Pseudo (Login)    <br>
*<input type="text" name="pseudo" value="<?php echo $pseudo;?>"> <br>
Mot de passe (Password)    <br>
*<input type="text" name="mp" value="<?php echo $mp;?>"> <br>
Numéro et rue (Strasse und Nummer) <br>
*<input type="text" name="numrue" value="<?php echo $numrue;?>"> <br>
Code postal (Postleitzahl) <br>
*<input type ="text" name="cp"    value="<?php echo $cp;?>">  <br>
Ville (Stadt) <br>
*<input type="text" name="ville"  value="<?php echo $ville;?>">   <br>
Téléphone 1 (Telefonnummer 1) <br>
<input type="text" name="tel1"   value="<?php echo $tel1;?>">  <br>
Téléphone 2 (Telefonnummer 2) <br>
<input type="text" name="tel2"   value="<?php echo $tel2;?>">  <br>

<input type="submit" name="submit" value="enregistrer (senden)" class="submit">
</h3>

 </div>
 </form>

</body>

</html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 févr. 2015, 12:32

Hello !

Dans ton second formulaire, lorsque tu fais l'insertion en base, tu utilises les valeurs transmises par POST.
$pseudo   =isset($_POST['pseudo'])  ?$_POST['pseudo']:"";
$mp   =isset($_POST['mp'])  ?$_POST['mp']:"";
$nom      =isset($_POST['nom'])     ?$_POST['nom']:"";
$prenom   =isset($_POST['prenom'])  ?$_POST['prenom']:"";
...
Le problèmes c'est que les nom, prénom, email, etc. ne sont pas transmises par post au formulaire 2, elles sont présentes en session. Il te faut donc dissocier les informations présentées et envoyées par le formulaire 2 en POST, de celles que tu as déjà récupéré du formulaire un en SESSION.
$pseudo   =isset($_POST['pseudo'])  ?$_POST['pseudo']:"";
$mp   =isset($_POST['mp'])  ?$_POST['mp']:"";
$nom      =isset($_SESSION['nom'])     ?$_SESSION['nom']:"";
$prenom   =isset($_SESSION['prenom'])  ?$_SESSION['prenom']:"";
...
Concernant le "nom", tu as également une information qui me semble erronée juste avant le INSERT :
         $numrue = addslashes($numrue);
         $nom= addslashes($numrue);
A priori en base, ton nom est écrasé par le numéro de la rue ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 33 Messages

11 févr. 2015, 16:32

Merci Ryle, et bravo pour la perspicacité.
J'ai corrigé le addslashes :
____________________________
 $numrue = addslashes($numrue);
 $nom= addslashes($nom);
_____________________________
J'ai modifié $_POST en $_SESSION dans le haut de la page pour les valeurs en session (nom, prenom, date de naissance, email) :
___________________________
session_start();
$pseudo   =isset($_POST['pseudo'])  ?$_POST['pseudo']:"";
$mp   =isset($_POST['mp'])  ?$_POST['mp']:"";
$nom      =isset($_SESSION['nom'])     ?$_SESSION['nom']:"";
$prenom   =isset($_SESSION['prenom'])  ?$_SESSION['prenom']:"";
$email   =isset($_SESSION['email'])  ?$_SESSION['email']:"";
_________________________
Il y a une avancée : nom et prénom sont traités de la même façon ! Mais les valeurs de session ne sont pas insérées.
J'ai essayé dans mon insert en écrivant :
_________________________
         mysql_query("insert into floritaimembres (date, pseudo, mp, prenom, nom,  nele,  email,
         numrue, cp, ville, tel1, tel2)
         VALUES ('".$date."', '".$pseudo."', '".$mp."',
          '".$prenom."', '".$nom."','".$nele."',  '".$email."', '".$numrue."', '".$cp."',
           '".$ville."', '".$tel1."', '".$tel2."' )" ) or die   (mysql_error());
_________________________
Puis en écrivant :
__________________________
         mysql_query("insert into floritaimembres (date, pseudo, mp, prenom, nom,  nele,  email,
         numrue, cp, ville, tel1, tel2)
         VALUES ('".$date."', '".$pseudo."', '".$mp."',
          '".$_SESSION['prenom']."', '".$_SESSION['nom']."','".$_SESSION['nele']."',  '".$_SESSION['email']."', '".$numrue."', '".$cp."',
           '".$ville."', '".$tel1."', '".$tel2."' )" ) or die   (mysql_error());
________________________
Rien n'y fait, les données de session ne sont pas enregistrées.
Il doit y avoir dans mon vieux cerveau quelque chose qui m'empêche de comprendre les sessions ?
Merci pour votre patience.

Eléphanteau du PHP | 33 Messages

11 févr. 2015, 18:50

J'ai trouvé !
Mais sans vraiment comprendre : mes fichiers ont été créés il y a quelques années, et ma fréquentation du php est occasionnelle...
J'ai modifié dans le premier formulaire :
<form method="POST" action="inscoordonneesstage2.php ">
en
<form method="POST" action="inscoordonneesstage.php ">
Merci pour votre aide !
Philippe

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 févr. 2015, 23:01

bien vu :)

Et effectivement, c'est ton formulaire 1 qui reçoit les valeurs, les stock dans la session et redirige l'utilisateur vers le formulaire 2.
Du coup l'action de ton formulaire 1 doit bien pointer vers lui même et non vers le formulaire 2.

Voilà pour l'explication ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...