Probléme de lecture $_GET[]

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,

J'ai un problème avec une page PHP :

- Sur ma premiere page est affciher la liste des messages enregisté dans la base de donnée. Pour chaque message, je peux procédé a une reponse que j'ai donc codé comme ceux ci :

<td><a href="repondre.php?email=<?php echo $donnees2['email'] ?>" style="font-weight:bold" >Repondre</a></td>


Ce lien conduit donc à ma page repondre.php. Lorsque je clique, j'ai bien l'email qui est dans l'URL

Voici le code de la page repondre.php :

<?php
include('connectionbdd.php');
session_start();
 
if ($_SESSION['email']!='admin') {
header('Location: connection.php');
}
 
if(isset($_POST['bouton']))
{
    $email=$_GET['email'];
 
if(isset($email)) {
 
$req = $bdd->prepare("INSERT INTO clientneileb (email, message, reponse) VALUES ('NeiLeb Design', :message, :email )");
$req -> execute(array(
    'email' =>$email,
    'message' =>$_POST['message']));
 
if($req) {
 header('Location: admin.php');
}
}
}
?>
 
<div id="conteneur">
 
<h1>Répondre</h1>
 
 
 
<form method='POST' action='repondre.php' >
<p><br><br><br>Message :<br>
<input class='champ' type='text' name='message' required height="300px" >
<br><br>
<input type='submit' name='bouton' value='Valider' class='boutonenvoyer'>
</p>
</form>



Je veux donc inserer 'Neileb Design' dans email, le message rempli dans le formulaire dans 'message' et dans 'reponse' je veux faire rentrer le $_GET['email'].

Cela m'affiche aucune erreur et aucune ligne n'est rentré dans la base de donné.

Merci d'avance de votre aide.

3 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Essayes ça :

    <?php
    //Affichage des erreurs php
    error_reporting(E_ALL);
    
    //Démarrage des sessions
    session_start();
    
    //Connexion à la BDD
    include('connectionbdd.php');
    
    
    if ($_SESSION['email']!='admin') {
     header('Location: connection.php');
    }
     
     //récupératoin "propre des variables
     $email = !empty($_GET['email']) ? $_GET['email'] : (isset($_POST['email'] ? $_POST['email'] : '');
     $message = isset($_POST['message']) ? $_POST['message']: '';
     
    if(isset($_POST['bouton'])){
      if($email) {
       $sql = "INSERT INTO clientneileb (email, message, reponse) 
                     VALUES ('NeiLeb Design', :message, :email )";
       $a_datas = array(
                  ':email' =>$email,
                  ':message' =>$message);
       
     try{      
       $req = $bdd->prepare($sql);
        $res = $req->execute($a_datas);
      if($res){
          header('Location: admin.php');
        }
      }catch(Exception $e)
       // En cas d'erreur dans l'execution de la requete
      echo "Erreur ! ". $e->getMessage();
      echo "<br> Requete :<br>".$sql;
      echo "a_datas =<br><pre>";
      print_r($a_datas);
      echo "</pre>";
     }
     }
    }
    
    ?>
    <! -- Debut du code HTML -->
    <div id="conteneur">
     <h1>Répondre</h1>
     <form method='POST' action='' >
       <input type="hidden" name="email" value="<?php echo $email;?>">
      <p><br><br><br>Message :<br>
       <input class='champ' type='text' name='message' required height="300px" >
       <br><br>
       <input type='submit' name='bouton' value='Valider' class='boutonenvoyer'>
      </p>
     </form>
    


    Cordialement, 
    Jordane                                                                 
    1
  2. Pitet Messages postés 2845 Statut Membre 530
     
    Salut,

    En validant le formulaire de la page repondre.php, tu peux remarquer dans l'URL que le paramètre email n'est plus présent, tu ne peux donc pas le récupérer via les paramètres GET.

    Une solution simple est d'ajouter l'adresse mail dans un input de type hidden afin que celle-ci soit envoyée lors de la validation du formulaire, par exemple :
    <form method='POST' action='' >
      <p><br><br><br>Message :<br>
       <input class='champ' type='text' name='message' required height="300px" >
       <br><br>
       <input type='hidden' name='email' value="<?php echo htmlspecialchars($_GET['email']); ?>"
       <input type='submit' name='bouton' value='Valider' class='boutonenvoyer'>
      </p>
     </form>
    


    Ainsi en cliquant sur le lien repondre.php?email=toto@exemple.com, l'adresse mail toto@exemple.com est renseignée dans le champ hidden. Lors de la validation du ce formulaire, on pourra alors récupérer cette adresse via $_POST['email'] puisque le formulaire utilise la méthode post :
    $email=$_POST['email'];


    Une autre solution est de faire transiter ce mail via une variable de session.

    Bonne journée
    1
  3. Utilisateur anonyme
     
    Oui ! J'avais pas pensé à utiliser cette façon ! Merci beaucoup, ça marche nickel !
    0