8796 sujets

Développement web côté serveur, CMS

Bonjour à Tous !

je me suis appuyé sur ce tuto pour mettre en place un formulaire de modification des données d'une bdd.

j'ai modifié le formulaire pour permettre l'upload d'images en ajoutant la ligne enctype="multipart/form-data" dans la balise <form>, ainsi qu'un input de type "file".

le premier formulaire, celui qui permet d'ajouter de données fonctionne parfaitement,
par contre,
le second formulaire, celui qui permet de modifier des données existantes, fonctionne partiellement : les données destinées à la bdd arrivent à destination, par contre, la nouvelle image n'est pas uploadée. (de plus, aucun message d'erreur)

je précise que l'upload d'une nouvelle image n'a pas vocation d'écraser l'ancienne, il s'agit d'un upload basique, il ajoute du contenu simplement.

voici le formulaire d'ajout de données (toute information textuelle part dans la bdd & les images vont dans un dossier du serveur) :

<form enctype="multipart/form-data" method="post" action="prestationAdmin.php">
    <p>Titre de la prestation :
    <input type="text" name="titrePrestation" value="" size="40" /></p>    
    <p>Texte de la prestation :
    <textarea name="textePrestation" value=""  rows=10 COLS=40 ></textarea></p>    
    <p>Image &agrave; uploader :
    <input type="file" name="src" /></p>  
    <p>Nom du fichier :
    <input type="text" name="imgPrestation" value="" size="15" title="(sans l'extension et sans espace)" />               
    <input name="Submit" type="submit" value="G&eacute;n&eacute;rer" title="G&eacute;n&eacute;rer le contenu" /></p> 
</form>  


et voici le formulaire qui permet de modifier les données existantes :

<form enctype="multipart/form-data" action="prestationAdminModificationMessage.php" method="POST">
  <input type="hidden" name="id" value="<?php echo($id) ;?>" />
  <p>Titre de la prestation :
       <input type="text" name="titrePrestation" value="<?php echo($result->titrePrestation) ;?>" />
  </p>
  <p>Texte de la prestation :
       <textarea name="textePrestation" rows=10 COLS=40 ><?php echo($result->textePrestation) ;?></textarea>
  </p>  
  <p>Image &agrave; uploader :
       <input type="file" name="src"  /></p>  
  <p>Nom du fichier :
       <input type="text" name="imgPrestation" value="<?php echo($result->imgPrestation) ;?>" size="15" title="(sans l'extension et sans espace)" />       
       <input type="submit" value="modifier" />
  </p>
</form>


si vous le souhaitez, je peux vous fournir plus de détails sur mes fichiers.

auriez vous une piste à me suggérer ??
merci ^^
Salut,

déjà ce tuto est vraiment vieillot et comporte pas mal d'erreurs (pas de doctype, de déclaration d'encodage, de css, d'éléments LABEL associés aux INPUT, de protection des données via mysql_real_escape_string, etc.)

Ensuite pour une question PHP/Mysql ne fournir qu'un bout de code html ne sert bien sûr à rien. Smiley murf
Salut Heyoan,
tout d'abord, je te remercie d'avoir jeter un oeil à mon post.

en ce qui concerne le doctype & l'appel de la css, ils sont déclarés dans mon fichier,
je n'ai pas voulu copier coller l'intégralité pour qu'il y ait d'avantage de lisibilité.

en ce qui concerne les "label", j'avais complètement oublié leur utilité, du coup, je vais mettre mes formulaires à jour ^^

et la protection des données via "mysql_real_escape_string"... mon faible niveau en php fait que ça ne me parle pas des masses...

juste un petit rappel : le transfère des nouvelles données dans ma bdd fonctionne,
c'est seulement l'upload du fichier qui ne fonctionne pas dan le formulaire de modification.

je fais un copier coller de mon fichier, j'ai retirer plusieurs div pour éviter que sa lecture soit trop laborieuse.


  <?php
    //connection au serveur:
    $cnx = mysql_connect("mysql5-xxx", "xxx", "xxx") ;
 
    //sélection de la base de données:
    $db = mysql_select_db("xxx") ;
 
  //récupération de la variable d'URL,
  //qui va nous permettre de savoir quel enregistrement modifier
  $id  = $_GET["id_prestation"] ;
 
  //requête SQL:
  $sql = "SELECT * FROM prestation WHERE id_prestation = ".$id ;
 
  //exécution de la requête:
  $requete = mysql_query( $sql, $cnx ) ;
 
  //affichage des données:
  if( $result = mysql_fetch_object( $requete ) )
  {
  ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
		<head>
            <meta http-equiv="content-Type" content="text/html; charset=utf-8" />
            <link rel="stylesheet" type="text/css" media="screen" href="../Css/admin.css" />
            <!--[if IE]>
                <link rel="stylesheet" type="text/css" media="screen" href="../Css/ie.css" />
            <![endif]-->									
            <link rel="shortcut icon" type="image/x-icon" href="../I/favicon.ico" />		
            <title>BackOffice</title>
        </head>
    <body>
        <div class="headerBackOffice">           
               <ul class="headerMenuBackOffice">
                    <li class="btn1"><a href="../index.php" title="Mode d'emploi"></a></li>
                    <li class="btn2"><a href="accueilAdmin.php" title="Page du site"></a></li>
                </ul>          
        </div>     
        <div class="containerBackOffice">
            <div class="contentAdmin">
                <h1>Contenu de la page "Prestation" du site</h1>
                <div class="content">
                     <h2 class="box">
                         Modifier l'entr&eacute;e n°<?php echo($result->id_prestation) ;?>
                     </h2>      
  	            <form enctype="multipart/form-data" action="prestationAdminModificationMessage.php" method="POST">
  		         <input type="hidden" name="id" value="<?php echo($id) ;?>" />
  		         <p>Position de la prestation :
   			      <input type="text" name="positionPrestation" value="<?php echo($result->positionPrestation) ;?>" size="5" title="Ins&eacute;rer une valeur num&eacute;rique" />
  		        </p>
  		        <p>Titre de la prestation :
     		             <input type="text" name="titrePrestation" value="<?php echo($result->titrePrestation) ;?>" />
   		       </p>
                       <p>Texte de la prestation :
                             <textarea name="textePrestation" rows=10 COLS=40 >
                                  <?php echo($result->textePrestation) ;?>
                             </textarea>
                       </p>  
   		       <p>Image &agrave; uploader :
    		             <input type="file" name="src" class="uploadInput" />
                       </p>  
   		       <p>Nom du fichier :
    		              <input type="text" name="imgPrestation" value="<?php echo($result->imgPrestation) ;?>" size="15" title="(sans l'extension et sans espace)" />       
    		              <input type="submit" value="modifier" class="newContent" />
   		       </p>
	        </form>
                <?php
                    }//fin if 
                ?>                                    
               <?php
                    //on vérifies que le champ est bien rempli:
                    if(!empty($_FILES["src"]["name"]))
                        {
                         //nom du fichier choisi:
                         $nomFichier    = $_FILES["src"]["name"] ;
                         //nom temporaire sur le serveur:
                         $nomTemporaire = $_FILES["src"]["tmp_name"] ;
                         //type du fichier choisi:
                         $typeFichier   = $_FILES["src"]["type"] ;
                         //poids en octets du fichier choisit:
                         $poidsFichier  = $_FILES["src"]["size"] ;
                         //code de l'erreur si jamais il y en a une:
                         $codeErreur    = $_FILES["src"]["error"] ;      
                         //chemin qui mène au dossier qui va contenir les fichiers upload:
                         $chemin = "/homez.xxx/xxx/www/NouveauSite/I/Upload/" ;
                         if(copy($nomTemporaire, $chemin.$nomFichier))
                         echo('<p>l\'upload a r&eacute;ussi</p>') ;
                         else
                         echo('<p>l\'upload a &eacute;chou&eacute;</p>') ;
                         }//fin if
                         else
                            {
                            echo('<p>N\'oubliez pas de choisir un fichier.</p>') ;
                             }//fin else					
                     ?>           
                </div>
            </div>
        </div>												
        <div class="footerBackOffice"></div>
    </body>
</html>
Guim a écrit :
et la protection des données via "mysql_real_escape_string"... mon faible niveau en php fait que ça ne me parle pas des masses...
Alors il faut lire la doc. Smiley cligne

Guim a écrit :
juste un petit rappel : le transfère des nouvelles données dans ma bdd fonctionne
Jusqu'au jour où quelqu'un va s'amuser à faire une injection SQL.

Guim a écrit :
c'est seulement l'upload du fichier qui ne fonctionne pas dan le formulaire de modification.
Pareil : le plus simple est de lire la doc. Typiquement ce n'est pas copy qu'on utilise mais move_uploaded_file.

Sinon encore quelques remarques en vrac :
* tu as placé le code de réception de $_FILES après le formulaire : juste pour être sûr qu'il n'y a pas de confusion tu peux le placer en début de page puisque de toutes façons le PHP est un langage serveur et est donc exécuté avant la génération du code html.
* tu ne fais aucun test sur l'éventuel contenu de $id et il peut donc être vide ou pire encore contenir n'importe quoi (cf. injection SQL) et tu effectues toujours la requête. Donc une suggestion :
$id = !empty($_GET["id_prestation"]) ? intval($_GET["id_prestation"]) : 0;
if(!empty($id)) { // On n'effectue la requête que si id est > 0
	$sql = "SELECT * FROM prestation WHERE id_prestation = ".$id ;
	// etc.

* tu utilises un commentaire conditionnel qui cible toutes les versions d'IE et c'est étrange puisque IE8 respecte les standards CSS 2.1 donc ne devrait à priori pas être corrigé.