Php problème insertion script d'upload d'image dans interface admin
cs_veebee
Messages postés4Date d'inscriptionmardi 15 avril 2008StatutMembreDernière intervention 5 mai 2009
-
4 mai 2009 à 16:02
rafplus
Messages postés7Date d'inscriptionjeudi 17 septembre 2009StatutMembreDernière intervention 4 octobre 2009
-
17 sept. 2009 à 10:41
Bonjour, à tous,
J'ai fait le tour des posts "upload" et "transfert d'images" sans trouver une solution à mon problème, sur lequel je planche maintenant depuis plusieurs jours.
J'ai monté une interface admin sans upload d'images, qui fonctionne.
Parallèlement, j'ai un script d'upload d'images qui fonctionne aussi séparément.
Lorsque je veux insérer l'upload dans l'interface admin l'upload d'image ne fonctionne plus.
Initialement j'avais essayé d'inserer le formulaire d'upload dans le formulaire de modif de l'interface admin, mais ça n'a pas marché du fait de l'impossibilité d'imbriquer des formulaires.
J'ai donc inséré les 2 lignes d'upload dans le formulaire de l'interface admin pour qu'il n'y ait qu'un seul formulaire, mais l'upload ne fonctionne toujours pas.
Si quelqu'un a une idée, elle est la bienvenue...
Voici le code :
<?php
// JE PASSE LA CONNEXION AU SERVEUR ET A LA BASE DE DONNEES, CA FONCTIONNE
if($_POST['fichier'] && $_FILES['fichier']['error']==0) // test des variables POST et FILES, (meme chose que is isset)
{
$tabinfo=pathinfo($_FILES['fichier']['name']); // extrait les infos fichiers
//echo 'nom_fichier : ',$tabinfo['basename'];
// extraction base nom fichier
$file = $tabinfo['basename'];
$var = explode(".",$file);
$nb = count($var)-1;
$base_nom_fichier= substr($file, 0, strlen($file)-strlen($var[$nb])-1);
//echo '
base nom fichier : ',$base_nom_fichier;
$extension=strtolower($tabinfo['extension']); // creation variable extension pour recup element extension du pathinfo
//echo '
extension : ',$extension,'
';
$tab_extensions_autorisees=array('jpeg','jpg','png','gif'); // creation tableau avec liste extensions autorisées
if(in_array($extension,$tab_extensions_autorisees)) // comparaison extension avec tableau
{
//UPLOAD SUR LE SERVEUR
if( ftp_put($connexion,'/www/mon_site.com/images/'.$_FILES['fichier']['name'],$_FILES['fichier']['tmp_name'],FTP_BINARY))
{
$nom_fichier_transfere=$_FILES['fichier']['name'];
echo 'Upload effectue. Nom du fichier telecharge : ',$nom_fichier_transfere;
}
else{echo 'Echec de l\'upload';}
}
else
{echo 'Ce fichier n\'est pas un fichier image';}
}
elseif( isset($_FILES['fichier']) && $_FILES['fichier']['error']==1)
{echo 'fichier trop gros, transfer a echoue';}
elseif( isset($_FILES['fichier']) && $_FILES['fichier']['error']==2)
{echo 'fichier trop gros, transfer a echoue';}
elseif( isset($_FILES['fichier']) && $_FILES['fichier']['error']==3)
{echo 'transfer partiel, svp recommencez';}
elseif( isset($_FILES['fichier']) && $_FILES['fichier']['error']==4)
{echo 'choisissez un fichier';}
// JE VOUS PASSE LE REDIMENSIONNEMENT DE L'IMAGE, QUI FONCTIONNE AUSSI
ftp_close($connexion); // ferme la connexion ftp
}
// JE VOUS VOUS PASSE AUSSI LE CODE D'INSERTIOND DES RUBRIQUES DANS LA BASE DE DONNEES, CA FONCTIONNE AUSSI
// FORMULAIRE ECOURTE CAR BEAUCOUP DE CHAMPS
?>
<form enctype="multipart/form-data" id="form2" form name="form2" action="modif.php" method="post">
cs_veebee
Messages postés4Date d'inscriptionmardi 15 avril 2008StatutMembreDernière intervention 5 mai 2009 5 mai 2009 à 10:01
Bonjour et merci Alexflex25.
Je viens tout juste de trouver le bug : en fait c'était le test sur la variable de déclenchement du script d'upload qui ne passait pas ($_POST['fichier']). Ca c'est un truc qui m'épate, parce que dans certains cas ça fonctionne très bien (utiliser le nom d'un des champs du formulaire) et dans d'autres pas. Bref en changeant la ligne :
if($_POST['fichier'] && $_FILES['fichier']['error']==0),
par :
if($_POST['modif_page'] && $_FILES['fichier']['error']==0),
ça tourne !
Par contre ta suggestion m'interpelle : pourrais-tu me dire pourquoi tu préfères utiliser la fonction :
"move_uploaded_file()" plutôt que "ftp_put()"
cs_veebee
Messages postés4Date d'inscriptionmardi 15 avril 2008StatutMembreDernière intervention 5 mai 2009 5 mai 2009 à 11:44
ok.
je profite de t'avoir "sous la souris" pour te solliciter encore ::
J'ai jusqu'à 9 images à uploader sur mon interface admin.
J'ai donc fait une boucle autour de mon script d'upload :
for($f=1 ; $f<=9 $f++){script d'upload;}
Dans mon script d'upload j'ai modifier tous les éléments ('fichier') en ('fichier'.$f)
et dans mon formulaire j'ai appelé mes fichiers 'fichier1' 'fichier2' etc
J'ai testé ma variable 'fichier'.$f sur l'upload de la première image, pas de problème ça fonctionne, la variable d'incrémentation est prise en charge par le script.
Sauf que dès que j'ai tenté d'uploader 2 images, 'fichier1' et 'fichier2' la 1ere est bien uploadée, mais pas la 2nde.
J'obtiens le message d'erreur suivant :
"Warning: ftp_put(): 3 is not a valid FTP Buffer resource"
Pour voir d'où cela vient il faudrait afficher les paramètres que passe a la fonction ftp_put avant chaque appel. Apparemment, à un moment donnée tu passe en paramètre quelque chose comme:
ftp_put
( 3
, string<tt class ="parameter">$remote_file</tt>
, string<tt class="parameter">$local_file</tt>
, int<tt class="parameter">$mode</tt>
[, int<tt class="parameter">$startpos</tt>= 0
] );
Le problème ce situe au niveau du premier paramètre.... Si tu ne trouve toujours pas le problème:
Affiche le contenu des variables que tu passes à la fonction ftp_put à l'ecran avant chaque appel à la fonction et colle le résultat ici.
Si tu trouve tout seul, félicitation...
cs_veebee
Messages postés4Date d'inscriptionmardi 15 avril 2008StatutMembreDernière intervention 5 mai 2009 5 mai 2009 à 18:35
uprès avoir vérifié tous les paramètres, qui semblaient ok, j'ai fini par ouvrir le fichier avec Notepad++ (ordinairement je me sers plutôt de Dreamweaver), et me suis aperçue qu'il y avait un problème d'accolades fermantes. J'ai corrigé en me disant que quand-même ça serait étonnant que ça soit si simple, et finalement... ça marche !
Comme quoi faut toujours aller vers la simplicité !!!
Quoi qu'il en soit merci encore de tes conseils avisés. C'est vrai que je n'avais pas pensé à vérifier les variables passées à ftp_put. C'aurait pu venir de là donc j'essaierai de garder le truc en tête pour une prochaine fois !
Merci encore.