[RESOLU] Affichage oui ou non apres envoi du formulaire

Mammouth du PHP | 643 Messages

04 août 2014, 13:38

Salut j'ai mon petit formulaire mais j'ai un petit souci
j'ai créer 2 variables qui permette de dire si le formulaire est envoyé ou une erreur dans le formulaire
après l'envoi du formulaire les 2 message s'affiche :/
et dans mon formulaire je fait un controle si les champ ne sont pas vide mais ça ne marche pas :roll:

PS: la deuxième partie est ma page de connexion qui merde aussi pourtant à l'air d'être en régle

// Verification du formulaire
if(!empty($_POST))
{
  extract($_POST);
  $valid = true;
   

  // Verification saisie pseudo
  if(empty($pseudo))
  {
    $valid = false;
    $erreurpseudo = 'Indiquez un pseudo';
  }
  
  // Verification selectionner une region
  if(empty($email))
  {
    $valid = false;
    $erreuremail = 'renseigner un e-mail';
  }
  
  // Verification saisie password
  if(empty($region))
  {
    $valid = false;
    $erreurregion = 'Indiquez un region';
  }
  
  // Verification saisie password
  if(empty($password))
  {
    $valid = false;
    $erreurpassword = 'Indiquez un password';
  }
  
  
  $success = 'ok';
  
  $erreur = 'ca merdé';

 // On insère le tout en BDD
 $req = $bdd->prepare('INSERT INTO simply_user ( pseudo, password, email, region, date_create) VALUES(:pseudo, :password, :email, :region, CURDATE())');
    $req->execute(array(
	  'pseudo'=>$pseudo,
      'region'=>$region,
	  'password'=>$password,
	  'email'=>$email
    ));
	
	 echo $success;
     echo $erreur;
	
}

?>
LE FORMULAIRE:
<form class="ins_con" method="post" action="compte_utilisateur_inscription.php">  
<h2>Inscription</h2>

      <p>
        <label for="nom">Nom :</label>
        <input type="text" name ="pseudo" id="nom" value="<?php if(isset($pseudo)) echo $pseudo;?>">
        <div class="error"><?php if(isset($erreurspseudo['pseudo'])) echo $erreurspseudo['pseudo'];?></div>
      </p>
       <p>
        <label for="email" class="required">Email :</label>
        <input type="email" name ="email" id="email" value="<?php if(isset($email)) echo $email;?>">
        <div class="error"><?php if(isset($erreursemail['email'])) echo $erreursemail['email'];?></div>
      </p>
      
      <p>
        <label for="password" class="required">Mot de passe :</label>
        <input type="password" name ="password" id="password" value="<?php if(isset($password)) echo $password;?>">
        <div class="error"><?php if(isset($erreurspassword['password'])) echo $erreurspassword['password'];?></div>
      </p>
      <?php if (!empty($erreur_password)): ?>
      <div class="error"><?php echo $erreur_password; ?></div>
      <?php endif ?>
        
       
            
            
<?php 
$req_region = $bdd->query('SELECT * FROM regions order by nom'); 	
?>          
<label>Region</label>
<select name="region" class="form-control margin-bottom-20">
<?php
while ($reg = $req_region->fetch())
{
?>
<option value="<?php echo $reg['region_id']; ?>"><?php echo $reg['nom'];?></option>
</p>
      <?php if (!empty($erreur_region)): ?>
          <div class="error"><?php echo $erreur_region; ?></div>
        <?php endif ?>
      <p>
<?php
}
?>

 
<input class="confirmer" type="submit" name ="submit" value="S'inscrire">

</form>

La page connexion qui merde:

Message d'erreur: Undefined index: password in C:\wamp\www\lasortie\compte_utilisateur_connexion.php on line 6
Message d'erreru: Undefined variable: pseudo in C:\wamp\www\lasortie\compte_utilisateur_connexion.php on line 11
<?php
require('conndb.php');

// Hachage du mot de passe
$password_hache = sha1($_POST['password']);

// Vérification des identifiants
$req = $bdd->prepare('SELECT id_simply_user FROM simply_user WHERE pseudo = :pseudo AND password = :password');
$req->execute(array(
    'pseudo' => $pseudo,
    'password' => $password_hache));

$resultat = $req->fetch();

if (!$resultat)
{
    echo 'Mauvais identifiant ou mot de passe !';
}
else
{
    session_start();
    $_SESSION['id_simply_user'] = $resultat['id_simply_user'];
    $_SESSION['pseudo'] = $pseudo;
    echo 'Vous êtes connecté !';
}

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

04 août 2014, 14:47

Hello

Est-ce qu'il ne te manquerait pas un if() pour savoir si effectivement il y a eu une erreur ou non et afficher le message correspondant plutôt qu'afficher systématiquement les deux à la suite ? ;)
         echo $success;
     echo $erreur;
Quant aux messages de ta page de connexion :
- A la ligne 6, tu utilise la variable $_POST['password'], cependant si aucun formulaire n'est envoyé en post (par exemple à l'ouverture de la page), ou si le formulaire ne contient pas de champ nommé "password", alors php retourne un avertissement pour te dire qu'il ne trouve pas l'index demandé. Pour éviter cela, il te faut simplement tester si la valeur est passée ou non AVANT de l'utiliser
$password_hache = null; // mot de passe null par défaut
if (isSet($_POST['password'])) { // si un mot de passe est envoyé en post
    $password_hache = sha1($_POST['password']); // hachage du mot de passe
}
- Le second problème est similaire : tu fais appel à la valeur contenue dans la variable $pseudo ligne 11, mais à aucun moment dans ton code tu ne déclares cette valeur. Si celle-ci est envoyée en post, alors il s'agit de $_POST['pseudo']. Et là également tu devrais tester que celle-ci est bien envoyée avec isSet() ou empty() ou autre, avant d'essayer de l'utiliser :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 643 Messages

04 août 2014, 16:34

salut,
en fait mon formulaire de connexion est exactement comme ça là:
et j'ai les erreurs:
Undefined index: password in C:\wamp\www\lasortie\compte_utilisateur_connexion.php on line 11
Undefined index: pseudo in C:\wamp\www\lasortie\compte_utilisateur_connexion.php on line 16

<?php
require('conndb.php');

// Hachage du mot de passe
$password_hache = sha1($_POST['password']);

// Vérification des identifiants
$req = $bdd->prepare('SELECT id_simply_user FROM simply_user WHERE pseudo = :pseudo AND password = :password');
$req->execute(array(
    'pseudo' => $pseudo,
    'password' => $password_hache));

$resultat = $req->fetch();

if (!$resultat)
{
    echo 'Mauvais identifiant ou mot de passe !';
}
else
{
    session_start();
    $_SESSION['id_simply_user'] = $resultat['id_simply_user'];
    $_SESSION['pseudo'] = $pseudo;
    echo 'Vous êtes connecté !';
}
 
?>



 <form action="compte_utilisateur_connexion.php" id="login" method="post">
        <h2>Connexion</h2>
        <p>
          <label for="email">pseudo :</label>
          <input type="text" name ="pseudo" id="email" value="<?php if(isset($pseudo)) echo $pseudo;?>">
        </p>

         <p>
          <label for="password">Mot de passe :</label>
          <input type="password" name ="password" id="password" value="<?php if(isset($password)) echo $password;?>">
        </p>
        <p>
          <a href="signup.php"> s'inscrire</a>
        </p>
        <p>
  
          <input type="submit" name ="submit" value="Se connecter">
        </p>
      </form>

Mammouth du PHP | 571 Messages

04 août 2014, 17:29

<?php

require('conndb.php');
$tabErreurs = array();//initialisation du tableau des erreurs

//vérification du pseudo
if( empty( $_POST['pseudo'] ) ){
  $tabErreurs['pseudo'] = "le pseudo est requis";
}

//vérification du mot de passe
if( empty( $_POST['password'] ) ){
  $tabErreurs['password'] = "le mot de passe est requis";
}

//insertion des données
//pré-condition : le tableau $tabErreurs doit être vide c-a-d ne contient pas de message d'erreur

if( empty( $tabErreurs ) ){
  $pseudo = $_POST['pseudo'];
  $password_hache = sha1($_POST['password']);
  authentification( $pseudo, $password ); //appel de la fonction d'authentification
}


/*
vérifie l'existence de l'utilisateur à partir
de son login et son mot de passe
*/
function authentification($pseudo, $pass ){
  // Hachage du mot de passe


  // Vérification des identifiants
  $req = $bdd->prepare('SELECT id_simply_user FROM simply_user WHERE pseudo = :pseudo AND password = :password');
  $req->execute(array(
    			'pseudo' => $pseudo,
    			'password' => $pass   ) );

  $resultat = $req->fetch();

  if (!$resultat)
  {
     echo 'Mauvais identifiant ou mot de passe !';
  }
  else
   {
    session_start();
    $_SESSION['id_simply_user'] = $resultat['id_simply_user'];
    $_SESSION['pseudo'] = $pseudo;
    echo 'Vous êtes connecté !';
  }
 
}//fin authentification


?>
<form action="compte_utilisateur_connexion.php" id="login" method="post">
        <h2>Connexion</h2>
        <p>
          <label for="email">pseudo :</label>
          <input type="text" name ="pseudo" id="email" value="<?php empty( $tabErreurs['pseudo'] ) ? '': echo {$tabErreurs['pseudo']};?>">
        </p>

         <p>
          <label for="password">Mot de passe :</label>
          <input type="password" name ="password" id="password" value="<?php empty( $tabErreurs['password'] ) ? '': echo {$tabErreurs['password']};?>">
        </p>
        <p>
          <a href="signup.php"> s'inscrire</a>
        </p>
        <p>
 
          <input type="submit" name ="submit" value="Se connecter">
        </p>
    </form>

Mammouth du PHP | 571 Messages

04 août 2014, 17:34

un tuto sur les formulaires et leur traitement en php : formulaires pour mieux comprendre comment transmettre les données d'un formulaire.

Mammouth du PHP | 643 Messages

04 août 2014, 18:19

c'est pas tout a fait ce que je recherche et cepandant je ne vois pas trop ou est l'erreur au sein de mon formulaire...

erreur:
Undefined index: password in C:\wamp\www\lasortie\compte_utilisateur_connexion.php on line 6
Undefined index: pseudo in C:\wamp\www\lasortie\compte_utilisateur_connexion.php on line 11

<?php

include('include/conndb.php');

// Hachage du mot de passe
$password_hache = sha1($_POST['password']);

// Vérification des identifiants
$req = $bdd->prepare('SELECT id_simply_user FROM simply_user WHERE pseudo = :pseudo AND password = :password');
$req->execute(array(
    'pseudo' => $pseudo,
    'password' => $password_hache));

$resultat = $req->fetch();

if (!$resultat)
{
    echo 'Mauvais identifiant ou mot de passe !';
}
else
{
    session_start();
    $_SESSION['id_simply_user'] = $resultat['id_simply_user'];
    $_SESSION['pseudo'] = $pseudo;
    echo 'Vous êtes connecté !';
}
 
?>




 <form action="compte_utilisateur_connexion.php" id="login" method="post">
        <h2>Connexion</h2>
        <p>
          <label for="email">pseudo :</label>
          <input type="text" name ="pseudo" id="email" value="<?php if(isset($pseudo)) echo $pseudo;?>">
        </p>

         <p>
          <label for="password">Mot de passe :</label>
          <input type="password" name ="password" id="password" value="<?php if(isset($password)) echo $password;?>">
        </p>
        <p>
          <a href="signup.php"> s'inscrire</a>
        </p>
        <p>
 
          <input type="submit" name ="submit" value="Se connecter">
        </p>
      </form>

Mammouth du PHP | 2278 Messages

04 août 2014, 18:37

Le formulaire et les tests sont-ils dans le même fichier?
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Mammouth du PHP | 643 Messages

04 août 2014, 18:43

oui

Mammouth du PHP | 2278 Messages

04 août 2014, 20:06

1 session_start(); doit être la première instruction
2 Lorsque tu débarques dans ce script, la session est vide comme on t'a déjà dit plus haut.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

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

05 août 2014, 13:28

c'est pas tout a fait ce que je recherche et cepandant je ne vois pas trop ou est l'erreur au sein de mon formulaire...
erreur: Undefined index: password in C:\wamp\www\lasortie\compte_utilisateur_connexion.php on line 6

Lorsque tu fais appel au script, à la ligne 6 tu lui demandes de crypter le mot de passe reçu en via la méthode POST :
$password_hache = sha1($_POST['password']);
Mais lorsque tu arrives sur ton site et que tu ouvres le formulaire pour pouvoir te connecter, aucun mot de passe n'est envoyé à ton script (puisque l'objectif est justement que le script t'affiche le formulaire de connexion). PHP t'informe donc de son incapacité à crypter une variable qui ne lui a pas encore été transmise.

Et cet avertissement n’apparaîtra que parce que tu ne transmet pas de mot de passe à l'ouverture de la page. Si jamais tu utilises le formulaire pour te connecter, alors tu enverras bien le contenu du champ password via la méthode POST et PHP pourra ainsi le traiter.

Pour éviter d'avoir le message d'avertissement de php à l'ouverture de ton script (donc avant d'avoir complété le formulaire), il te suffit juste de tester si le formulaire a été envoyée (en vérifiant par exemple la présence de la variable que tu veux utiliser). PHP n'exécutera alors les instructions réservées au traitement du formulaire que lorsque le formulaire est envoyé et pas quand il est uniquement affiché.

Undefined index: pseudo in C:\wamp\www\lasortie\compte_utilisateur_connexion.php on line 11
La seconde erreur est du même acabit : tu utilises la variable $pseudo ligne 11, et php t'informe qu'il a beau lire et relire les 10 premières lignes de ton code, à aucun moment tu ne lui a dit d'où provenait cette variable. Il te prie donc de bien vouloir l'excuser si le traitement qui en découle ne convient pas, mais en même temps c'est pas de sa faute, tu lui donnes pas les éléments nécessaires ;)

Utilises $_POST['pseudo'] au lieu de $pseudo, et là encore assure toi que cette variable est bien transmises via le formulaire avant de l'utiliser et tes messages d'avertissement disparaîtront :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...