Controler champ fichier dans formulaire ?

kalimbra Messages postés 546 Statut Membre -  
kalimbra Messages postés 546 Statut Membre -
Bonjour,

j'ai un formulaire avec un champ fichier (pour une image). Ce formulaire sert à modifier des données. Je voudrais que lorsque qu'on ne touche pas au champ fichier, l'image reste en place. Ca j'arrive . Par contre au contraire quand le champ est rempli il faut updater la base et uploader le nouveau fichier. Et ça ne fonctionne pas..

Voici mon code :

//vérification si changement image
// si champ image vide, form = old photo
if ($_POST['photo_pers']==""){
$_FILES['photo_pers']['name']=$_POST['Old_Photo'];
$NoUpload="yes";
}
// fin de vérification

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "Moders")) {
  $updateSQL = sprintf("UPDATE Personnel SET nom_perso=%s, prenom_perso=%s, titre_pers_FR=%s, titre_pers_DE=%s, titre_pers_EN=%s, photo_pers=%s, id_cat_equipe=%s WHERE id_personnel=%s",
                       GetSQLValueString($_POST['nom_perso'], "text"),
                       GetSQLValueString($_POST['prenom_perso'], "text"),
                       GetSQLValueString($_POST['titre_pers_FR'], "text"),
                       GetSQLValueString($_POST['titre_pers_DE'], "text"),
                       GetSQLValueString($_POST['titre_pers_EN'], "text"),
                       GetSQLValueString($_FILES['photo_pers']['name'], "text"),
                       GetSQLValueString($_POST['id_cat_equipe'], "int"),
                       GetSQLValueString($_POST['id_personnel'], "int"));

  mysql_select_db($database_IFBL, $IFBL);
  $Result1 = mysql_query($updateSQL, $IFBL) or die(mysql_error());
  
 //upload du fichier
 // vérification si nécessaire uploader nouvelle photo
 if ($NoUpload !="yes"){
 $destination ='../Imgs';
$tmp_name=$_FILES['photo_pers']['tmp_name'];
$nom_fichier=$_FILES['photo_pers']['name'];
move_uploaded_file($tmp_name, "$destination/$nom_fichier");
// on efface aussi la vieille photo
   //suppression du fichier sur le serveur
 /*  $FileToDelete = $_POST['OldPhoto'];
    $old = getcwd(); // Save the current directory
    chdir('/var/www/ifbl-test/Imgs/');
  if (is_file($FileToDelete)){
unlink ($FileToDelete);  
 chdir($old); // Restore the old working directory
*/

   }
// fin de suppression 
//fin upload
A voir également:

3 réponses

kalimbra Messages postés 546 Statut Membre 72
 
je vais préciser ce que je veux faire. Au moment du traitement du formulaire je voudrais vérifier le champ fichier .

s'il est vide, je récupère l'ancienne valeur pour remplacer le $_FILES['form']['name'], je soumets le form.
s'il est rempli, c'est que l'on modifie le fichier uploader. Du coup j'upload le nouveau fichier, j'efface l'ancien et je mets à jour l'enregistrement dans la base.

Le problème vient du if.. si je prends un $_post['form'], ça fonctionne si c'est vide. Ca ne repère pas que le champ a été rempli. Si je teste le $_FILES, que ce soit le name, size ou autre ça ne fonctionne pas non plus.

J'ai testé avec un if ($_POSTOUFILES) =="", isset, rien n'y fait.

Dans les deux cas la requète est unique, seule la valeur des champs changent (enfin d'un champ)
0
Alain_42 Messages postés 5413 Statut Membre 894
 
essayes:

if (empty($_FILES['photo_pers']['name'])){
$_FILES['photo_pers']['name']=$_POST['Old_Photo'];
$NoUpload="yes";
}


parce que si je ne m'abuse un champ type="file" n"envoie pas dans la globale $_POST mais dans la $_FILES
0
kalimbra Messages postés 546 Statut Membre 72
 
Désolé, j'étais partit sur d'autres trucs à développer.

Ben apparemment non, ça ne fonctionne pas. Il me trouve toujours le champ vide, même quand j'ai choisi un fichier.

Tant pis je vais faire autrement...
0