Code

Résolu
Bonjour, je suis debutant en php et je solicite votre aide.
je craie une application qui envoie les donnees dans une bd, les recupere et les affiche.
apres la connexion a la bd, j ai ce formulaire dans une page html

<body>
   <form method="POST" action="ajoutEtudiant.php" enctype="multipart/form-data">
  <table>
   <tr>
    <td>Nom</td>
    <td><input type="text" name="nom"></td>  
   </tr>
   <tr>
    <td>Email</td>
    <td><input type="text" name="email"></td>  
   </tr>
   <tr>
    <td>Photo</td>
    <td><input type="file" name="photo"></td>  
   </tr>
   <tr>
    <td></td>
    <td><input type="submit" value="Enregistrer"></td>  
   </tr>
  </table>
   </form>
</body>


puis je récupère les informations et je les traite ainsi

 <?php
  require_once("connexion.php");
  if (isset($_POST['nom']) and isset($_POST['email']) and isset($_POST['photo'])) 
  {
   $nom=$_POST['nom'];
   $email=$_POST['email'];
   $nomPhoto=$_FILES['photo']['name'];
   $file_tmp_name=$_FILES['photo']['tmp_name'];
   move_uploaded_file($file_tmp_name,"./images/$nomPhoto");
   $req = $bdd->query("insert into ETUDIANT(NOM, EMAIL, PHOTO)     values('$nom','$email','$nomPhoto')");   
      header("location:afficherEtudiant.php");
  }
 ?> 


je veux enfin être redirigé vers la page qui m'affiche tous les etudiants dont voici le code

<body>
  <table border="1" width="80%">
    <tr>
     <th>CODE</th><th>NOM</th><th>PHOTO</th>
     <th>SUPPRESSION</th><th>EDITION</th>
    </tr>
     
   <?php // On affiche chaque entrée une à une
    while ($donnees = $req->fetch())
       { ?>  
      <tr>
       <td><?php echo($donnees['CODE'])?></td> 
       <td><?php echo($donnees['NOM'])?></td> 
       <td><img src="images/<?php echo($donnees['PHOTO'])?>"></td> 
       <td><a href="supprimerEtudiant.php?code=<?php echo($donnees['CODE'])?>">Supprimer</a></td> 
       <td><a href="editEtudiant.php?code=<?php echo($donnees['CODE'])?>">Editer</a></td>      
      </tr> 
   
   
   <?php   } ?>
  
  </table>


non seulement les données ne vont pas dans la bd mais il n'y a pas de redirection comme voulu. s'il vous plait je débute et j'ai passé beaucoup de temps à chercher, si quelqu'un peut m'aider.
MERCI.

5 réponses

  1. Salut,

    Comme tu as pu le voir dans le traitement de ton formulaire, un input type="file" se récupère en PHP via la superglobale $_FILES et non via $_POST.

    Donc ta première condition
    if (isset($_POST['nom']) and isset($_POST['email']) and isset($_POST['photo']))
    n'est jamais vrai puisque $_POST['photo'] n'est pas définie.

    Bonne journée
    1. Modérateur
      Bonjour,

      Tu fais erreur.... il a, dans son formulaire, des champs INPUT (nom,email....) qui eux.. sont transmits en POST.
      Seul le fichier ( dont le nom est :"photo" est passé par $_FILES )
  2. Merci Pitet pour ta réaction, c'est la première fois que j'interviens dans un forum et je suis très touché. en fait, après la modification je reçois les mêmes messages d'erreur:

    ( ! ) Notice: Undefined variable: nom in C:\wamp\www\GestionEtudiants\ajoutEtudiant.php on line 23

    pareil pour l'émail. je ne sais comment définir ces variables.
    voici les codes respectifs modifiés de ajoutEtudiant.html et ajoutEtudiant.php .
    <! DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <link rel="stylesheet" href="style. css" />
    <title>SCOLARITE</title>
    </head>
    <body>
       <form method="POST" action="ajoutEtudiant.php" enctype="multipart/form-data">
      <table>
       <tr>
        <td>Nom</td>
        <td><input type="text" name="nom"></td>  
       </tr>
       <tr>
        <td>Email</td>
        <td><input type="text" name="email"></td>  
       </tr>
       <tr>
        <td>Photo</td>
        <td><input type="file" name="photo"></td>  
       </tr>
       <tr>
        <td></td>
        <td><input type="submit" value="Enregistrer"></td>  
       </tr>
      </table>
       </form>
    </body>
    </html>
    


    ajoutEtudiant.php
     <?php
      require_once("connexion.php");
      if (isset($_POST['nom']) and isset($_POST['email']) and isset($_FILLE['photo'])) 
      {
       $nom=$_POST['nom'];
       $email=$_POST['email'];
       $nomPhoto=$_FILES['photo']['name'];
       $file_tmp_name=$_FILES['photo']['tmp_name'];
       move_uploaded_file($file_tmp_name,"./images/$nomPhoto");
       $req = $bdd->query("insert into ETUDIANT(NOM, EMAIL, PHOTO) values('$nom','$email','$nomPhoto')");   
          header("location:afficherEtudiant.php");
      }
       
      ?>
    
     <! DOCTYPE html>
     <html>
     <body>
       <table border="1" width='30%'>
        <tr>
         <td>Nom</td>
         <td><?php echo($nom)?></td>  
        </tr>
        <tr>
         <td>Email</td>
         <td><?php echo($email)?></td>  
        </tr>
        <tr>
         <td>Photo</td>
         <td><img src="./images/<?php echo'($nomPhoto)'?>" /></td>  
        </tr>
    
       </table>
       <a href="afficherEtudiant.php">Afficher les etudiantss</a>
     </body>
     </html>
      

    merci encore pour la promptitude de vos réactions.

    EDIT : Ajout des balises de code
    1. Modérateur
      Bonjour,

      Essayes ça :
       <?php
       /* Page : ajoutEtudiant.php  */
      require_once("connexion.php");
        
      // Récupération "propre" des variables :
       $nom=!empty($_POST['nom'])?$_POST['nom']:NULL;
       $email=!empty($_POST['email'])?$_POST['email']:NULL;
       $nomPhoto=!empty($_FILES['photo']['name'])?$_FILES['photo']['name']:NULL;
      
      //Traitement du submit
       if($nom && $email && $nomPhoto) {
         $file_tmp_name=$_FILES['photo']['tmp_name'];
         if(!move_uploaded_file($file_tmp_name,"./images/$nomPhoto")){
            echo "<br>Erreur lors du téléchargement de l'image"  ;
            $req = $bdd->query("insert into ETUDIANT(NOM, EMAIL, PHOTO) values('$nom','$email','$nomPhoto')");   
          }      
       } else {
       // Un ou plusieurs champs sont manquants....
       //le temps des tests si ça ne fonctionne toujours pas:
       echo "<pre>POST : <br> ";
         print_r($_POST);
       echo "<br> FILES :<br>";
         print_r($_FILES);
       echo "</pre>";
       }
      ?>
      
      <! DOCTYPE html>
      <html>
       <body>
         <table border="1" width='30%'>
          <tr>
           <td>Nom</td>
           <td><?php echo $nom;?></td>  
          </tr>
          <tr>
           <td>Email</td>
           <td><?php echo $email ;?></td>  
          </tr>
          <tr>
           <td>Photo</td>
           <td><img src="./images/<?php echo $nomPhoto;?>" /></td>  
          </tr>
         </table>
         <a href="afficherEtudiant.php">Afficher les etudiantss</a>
       </body>
      </html>
      
      1. MERCI !!!
        il n y a plus d'affichage d'erreurs mais la photo ne s'affiche pas ds ajout.php et les données inserées à partir de ajoutEtudiant.html ne partent pas ds la bd donc impossible de les récupérer pour les afficher dans afficherEtudiant.php dont voici le code:

        <! DOCTYPE html>
        <html>
         <head>
          <meta charset="utf-8" />
          <link rel="stylesheet" href="style. css" />
          <title>SCOLARITE</title>
         </head>
            <body>
          <table border="1" width="80%">
            <tr>
             <th>CODE</th><th>NOM</th><th>PHOTO</th>
             <th>SUPPRESSION</th><th>EDITION</th>
            </tr>
             
           <?php // On affiche chaque entrée une à une
            while ($donnees = $req->fetch())
               { ?>  
              <tr>
               <td><?php echo($donnees['CODE'])?></td> 
               <td><?php echo($donnees['NOM'])?></td> 
               <td><img src="images/<?php echo($donnees['PHOTO'])?>"></td> 
               <td><a href="supprimerEtudiant.php?code=<?php echo($donnees['CODE'])?>">Supprimer</a></td> 
               <td><a href="editEtudiant.php?code=<?php echo($donnees['CODE'])?>">Editer</a></td>      
              </tr> 
              
           <?php   } ?>
          
          </table>
           
            </body>
        </html>
        


        je cherche une solution depuis des heures et je continu à chercher mais si vous pouvez m'aider... ça m'aiderait beaucoup à avancer.
        merci.

        EDIT : Ajout des balises de code (la coloration syntaxique).
        Explications disponibles ici :
        https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

        Merci d'y penser dans tes prochains messages.
        .
        1. Modérateur
          1 - **** Attention ****
          Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
          Explications disponibles ici :
          https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

          2 - Je ne vois pas, dans ta page, l'include du fichier de connexion à la BDD

          3 - Je ne vois pas, dans ton code.. la requête $req

          4 - Quand tu dis :
          les données inserées à partir de ajoutEtudiant.html ne partent pas ds la bd

          il y a une erreur dans le code que je t'ai donné
          il faut modifier cette partie du code :
             $file_tmp_name=$_FILES['photo']['tmp_name'];
             if(!move_uploaded_file($file_tmp_name,"./images/$nomPhoto")){
                echo "<br>Erreur lors du téléchargement de l'image"  ;
                $req = $bdd->query("insert into ETUDIANT(NOM, EMAIL, PHOTO) values('$nom','$email','$nomPhoto')");   
              } 
          

          par :
              $file_tmp_name=$_FILES['photo']['tmp_name'];
              if(!move_uploaded_file($file_tmp_name,"./images/$nomPhoto")){
                echo "<br>Erreur lors du téléchargement de l'image"  ;
              }else{
                  $sql ="insert into ETUDIANT(NOM, EMAIL, PHOTO) values(:nom,:email,:nomPhoto)";
                  $params = array(":nom"=>$nom,":email"=>$email,":nomPhoto"=>$nomPhoto
                 try{
                    $prepare = $bdd->prepare($sql);   
                    $prepare->execute($params);
                 }catch(Exception $e){
                  //en cas d'erreur...
                   echo "<br>Erreur !". $e->getmessage();
                 }
              }
          

          nb: Comme tu peux le voir, je suis passé par des requêtes préparées...
          c'est plus sûr ... cela permet, entre autres choses.. d'éviter les failles de sécurité liées aux injections sql...
      2. ça marche comme je veux , merci encore pour votre assistance.
        trop cool ce forum...