Passage de $_FILES par fonction

Résolu
GanJasTeR Messages postés 27 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 31 mai 2007 - 5 mars 2007 à 19:47
GanJasTeR Messages postés 27 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 31 mai 2007 - 6 mars 2007 à 13:33
Bonjour à tous

La raison de ce message est un problème de passage d'une variable $_FILES à une fonction.
Sans plus tarder voici mon code.

index.php --> Page qui contient diverses fonctions (appelées par une variable d'url index.php?ref=page&act=action)
Je vous présente le code concerné qui est celui de la page du profil d'un membre :

function profil(){
 global $bdd_prefix, $sql; 

 open_table('Compte : Profil');

 if(isset($_POST['profil_modif'])){
   // Traitement du formulaire
  require_once('includes/uploads.inc.php');
  $login = $_POST['login'];
  $_SESSION['user']->login = $login;
  $mail = $_POST['mail'];
  $mail_visible = $_POST['mail_visible'];
  $erreur = false;
  // UPLOAD
  if(!empty($_POST['avatar'])){   // Comment savoir si l'utilisateur a rempli le champ ?
   if(!verif_total($_FILES['avatar'],'avatar'))   // Transmission des infos du fichier à la fonction de traitement de l upload (voir code plus bas : uploads.inc.php)
    $erreur = true;  
  }
  if(!$erreur){
   // UPDATE
   $req = "UPDATE ".$bdd_prefix."_user SET login='".$login."',mail='".$mail."',mail_visible='".$mail_visible."' WHERE id_user=".$_POST['id_user']."";
   $sql->requete_SQL($req);
   echo'Votre profil a été modifié avec succès.

';
   redirect('index.php?ref=user&act=profil', 3); 
  }
  else{
   echo'Il y a eu une erreur lors de l\'upload de votre avatar.

';
   redirect('javascript:history.back()', 3);
  }   
 }

 else{
  // Formulaire du profil
  echo'<script type="text/javascript" src="includes/js/profil.js"></script>';
  $req = "SELECT * FROM ".$bdd_prefix."_user WHERE id_user='".$_SESSION['user']->id_user."'";
  $result = $sql->requete_SQL($req);
  $data = mysql_fetch_assoc($result);
  $id = $data['id_user'];
  $login = $data['login'];
  $mail = $data['mail'];
  $mail_visible = $data['mail_visible'];
  // On coche une case en fonction de la donnée
  if($mail_visible == 1){
   $checked1 = 'checked="checked"';
   $checked0 = '';
  }
  else{
   $checked0 = 'checked="checked"';
   $checked1 = '';
  }  $date $date date_fr($data['date']);
  echo'[index.php?ref=user&amp;act=pass Modifier son pass]

'
  . 'Vous êtes inscrit depuis le '.$date.'

'
  . '<form method="post" action="index.php?ref=user&amp;act=profil" onsubmit="return(verif_profil(this))">'
  . '<label>Login</label>

'
  . '<label>Mail</label>

'
  . '<label>Mail visible</label>oui &nbsp;'
  . 'non

'
 // Champ de mon envoi de fichier
  . '

'
  . '<label>Avatar</label>

'
  . 'taile maximale : 100ko | Dimensions maximales : 100x100
Laissez vide pour ne pas changer

'
  . '

'
  . '

</form>';
 }
 close_table();

}

uploads.inc.php --> Traitement de l'upload (extension, taille, dimensions si image...)

//  Fonction qui attribut une taille de fichier
function donne_taille($type){
 switch($type){
  case'avatar':$taille = 102400;break;
  default:$taille = 0;break;
 }
 return $taille;
}




// Fonction qui retourne un tableau d'extensions en fonction du type

function donne_ext($type){
 switch($type){
  case'avatar':$ext = array('jpg','jpeg','gif','png');break;
  default:$ext = array();break;
 }
 return $ext;
}






// VERIF AUTO

function verif_auto($error){
 if($error > 0)
  return false;
 else
  return true;
}




// VERIF TAILLE

function verif_taille($taille_fichier,$type_fichier){
 $maxsize = donne_taille($type_fichier);
 if($taille_fichier > $maxsize)
  return false;
 else
  return true;
}




// VERIF EXTENSION

function verif_ext($nom_fichier,$type_fichier,$ext_up){  // verix_ext($_FILES['avatar']['name'],'avatar');
 $extensions_valides = donne_ext($type_fichier);
 if(in_array($ext_up,$extensions_valides))
  return true;
 else
  return false;
}




// VERIF DIMENSIONS (si image)
function verif_dimensions($image,$maxwidth,$maxheight){
 $image_sizes = getimagesize($image);
 $maxwidth = 100;
 $maxheight = 100;
 if($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight)
  return false;
 else
  return true;
}




// GESTION DU CHEMIN

function gestion_chemin($fichier,$nom){ 
 $resultat = move_uploaded_file($fichier,$nom);
 if($resultat)
  return true;
 else
  return false;
}




// VERIFICATION TOTALE

function verif_total($file,$cat){   // $file correspondrait donc $ $_FILES['avatar'] et $cat au type de fichier que je souhaite (image, fichier, musique...)

 global $bdd_prefix,$sql;

 $type_fichier = $cat;
 $nom_fichier = $file['name'];
 $taille = $file['size'];
 
 // VERIF AUTO
 $res_auto = verif_auto($file['error']);
 
 // VERIF TAILLE
 $res_taille = verif_taille($taille,$type_fichier);
 
 // VERIF EXTENSION
 $extension_upload = substr(strrchr($nom_fichier, '.'),1);
 $res_ext = verif_ext($nom_fichier,$type_fichier,$extension_upload);
 
 // VERIF DIMENSIONS (SI IMAGE)
 if($type_fichier == 'avatar')  // Si on a à faire avec une image (que avatar de traité pour l instant)
  $res_dim = verif_dimensions($file['tmp_name'],100,100);
 else
  $res_dim = true;
 
 // GESTION DU CHEMIN
 $nom = $cat.'_'.random(6);
 $nom = 'uploads/'.$cat.'/'.str_replace(' ','',$nom).'.'.$extension_upload;
 $res_chemin = gestion_chemin($file['tmp_name'],$nom);
 
 
 // APPLICATION
 if(!$res_auto || !$res_taille || !$res_ext || !$res_dim || !$res_chemin) // Si une des vérifications retourne false
  return false;
 else{
   // On insère les infos de l'upload dans la bdd
  $req = "INSERT INTO ".$bdd_prefix."_uploads VALUES('','1','".$nom_fichier."','".$taille."','','','".$nom."','".time()."')";
  $result = $sql->requete_SQL($req);
  if($result)
   return true;
  else
   return false;
 }
}


Voilà je vous ai tout donné peut être un peu en bordel mais l'essentiel de mon problème est là.

Merci

2 réponses

GanJasTeR Messages postés 27 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 31 mai 2007
6 mars 2007 à 13:33
Pour mon problème j'ai trouvé de quoi il s'agisait j'avais oublié de spécifier l'entête de données du formulaire.

Dans toutes tes critiques une m'a frappé qui est celle du copié collé... Chaque caractère de ce script (du site en général aussi) je l'ai tapé avec MON Clavier, sache aussi que tout le système de session, de gestion des membres et de SQL repose sur une POO parfaitement organisée.

J'ai pris le vice de mettre formulaire et traitement dans une meme page ca c est vrai. Ha et pour le login='".$login."' je n'ai pas bien compris pourquoi tu m'as dis que c'était déjà déclaré... Le script de index.php est séparé en 2 partie bien distinctes avec chacunes leurs propres variables.
C'est sûr qu'en voyant ce code sans voir le reste ca parait bordel c'est normal :) mais toute la structure de mon site est sur papier, chaque script est sur papier avant d'arriver sur le bloc note.

Je n'ai pas la science infuse du php sinon je n'aurais pas poster dans ce forum et je ne me prendrais pas la tête des heures sur l'oubli d'un ; mais je pense ne plus être un "noob"

Voilà ^^ sinon pour le post le problème est résolu

Merci
3
lespleiades Messages postés 25 Date d'inscription lundi 8 mai 2006 Statut Membre Dernière intervention 6 août 2007
6 mars 2007 à 02:14
pour "un vrai bordel" ca tu l'as dit ^^ essaye dejas de separer ton formulaire de la verification en faisant 2 pages 1=formulaire 2=verif_formulaire ^^
je ne peut malheureusement pas enumerer toutes les fautes que je peut observer, tellement il y'en a, ex: login="".$login."" la ca ne sert strictement a rien puisque ta variable est dejas declarer plus haut ($login=$data{'login'];) et puis les """ la vraiment je me dit que tu nous a poster un brouillon, alors essaye dejas pour commencer:
$sql = "UPDATE ta_table_carj'y'comprend_rien SET login='$login', mail='$mail,etc..";
mais surtout essaye d'apprendre le php (c'est pas si difficile que ca^^) je ne veut pas etre desagreable croit moi, je voudrait bien t'aider,  mais la il te faudrait un minimum de bases, ...bref je ne pense pas qu'une personne te re-feras ton script, car il y a tout a re-faire (j exagere peut etre un peu, mais pas mal de trucs quand meme) alors, comence par des choses simples, un formulaire dejas c'est pas mal ^^, et re-post nous un truc lorsque cela auras une forme viable, mais nous avons tous été "noob", alors c'est normal le "copier/coller/j fait une popotte" ont la tous fait^^
0
Rejoignez-nous