Page 1 sur 2
[RÉSOLU] Problème avec un formulaire
Posté : 07 déc. 2011, 13:05
par virginweb
Bonjour à tous, alors je développe un portfolio pour un collègue
j'ai une page ou il peut gérer ses galeries et ses photos j'ai pris ce script pour la gestion du multi-upload :
http://net.tutsplus.com/tutorials/javas ... with-ajax/
J'ai donc ce formulaire :
Code : Tout sélectionner
<form method="post" enctype="multipart/form-data" action="upload.php">
<input type="hidden" id="galerie" name="galerie" value="<?php echo $selection; ?>" />
<input type="file" name="images[]" id="images" multiple />
<button type="submit" id="btn">Upload Files!</button>
</form>
c'est la valeur de l'input de type hidden que je souhaiterais récupérer
voici le code de ma page upload.php :
Code : Tout sélectionner
<?php
require('img.class.php');
foreach ($_FILES["images"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$name = $_FILES["images"]["name"][$key];
$galerie = $_POST['galerie'];
move_uploaded_file( $_FILES["images"]["tmp_name"][$key], "../img/galeries/".$galerie."/" . $_FILES['images']['name'][$key]);
Img::creerMin("../img/galeries/".$galerie."/".$_FILES["images"]['name'][$key],"../img/galeries/".$galerie."/min/",$_FILES['images']['name'][$key],215,112);
}
}
echo "<h2>Success !</h2>";
?>
mais impossible de récupérer ma variable avec $galerie = $_POST['galerie']
J'ai aussi à ma disposition un script js qui gère l'upload si ça peut vous aider.
Merci d'avance je sais pas si j'ai post dans la bonne section.
Re: Problème avec un formulaire et récupération de valeur
Posté : 07 déc. 2011, 13:22
par xTG
Tu testes bien sous Firefox ? Car le script utilises un objet JS (formData) qui apparemment n'est disponible que sous ce navigateur.
Fais un var_dump() de $_POST pour voir ce qu'il contient.
Re: Problème avec un formulaire et récupération de valeur
Posté : 07 déc. 2011, 17:52
par virginweb
J'ai testé var_dump($_POST) cela me renvoi array(0) { } sous Chrome et sous firefox
et quand je fais var_dump($_POST['galerie']) il me renvoi NULL
Re: Problème avec un formulaire et récupération de valeur
Posté : 07 déc. 2011, 19:12
par moogli
Hum ta testé ça tel quel ? (c'est à dire sans tous le merdier js/ Ajax ) ?
Parce que la tu n'a pas de donnée issue de post donc normale que le second test avec var_dump() retourne null.
@+
Re: Problème avec un formulaire et récupération de valeur
Posté : 07 déc. 2011, 20:18
par virginweb
Merci pour ta réponse j'ai supprimé le script js et ca fonctionne parfaitement.
J'ai cependant encore une question lorsque j'upload plusieurs images, des fois j'ai cette erreur :
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 19008 bytes) in /home/soisn109/public_html/admin/img.class.php on line 213
Voici le code en question de mon fichier img.class.php :
Code : Tout sélectionner
if(substr(strtolower($img),-4)==".jpg"){$image = imagecreatefromjpeg($img); }
Re: Problème avec un formulaire et récupération de valeur
Posté : 07 déc. 2011, 21:33
par moogli
C'est un dépassement mémoire (ça tu t'en doute déjà nan ?) dû à la taille de l'image (parce que quand tu l'utilise avec gd elle prend beaucoup plus de place en mémoire).
Pas grand chose à faire, regarde dans le forum "vos contributions" la classe d'upload de AB il y a pas mal de réponse à ce sujet et il me semble qu'il a géré la chose dans sa classe, tu devrais y trouver une solution ou au moins de quoi finir le script proprent je pense.
Pour ce qui de l'upload, maintenant que tu sais que le traitement est bon il te reste à deboguer la moulinette js/Ajax pour ça roule
@+
Re: Problème avec un formulaire et récupération de valeur
Posté : 07 déc. 2011, 23:52
par virginweb
D'accord je vais regarder sinon il n'y a pas moyen d'insérer un imagedestroy() quelque-part ?
Re: Problème avec un formulaire et récupération de valeur
Posté : 08 déc. 2011, 07:33
par moogli
Ben si tu a d'autre truc en mémoire avant oui c'est mieux (genre sur de la modification d'image en boucle oui il préférable, je pense, de détruire l'ancienne ressource histoire d'être sur qu'il reste rien en mémoire. Après je sais pas trop comment est gérée la mémoire (ramasse miette ou pas etc etc).
@+
Re: Problème avec un formulaire et récupération de valeur
Posté : 08 déc. 2011, 14:05
par virginweb
Donc le imagedestroy() d'après vous je le met où ?
Dans mon fichier upload.php :
Code : Tout sélectionner
<?php
require('img.class.php');
foreach ($_FILES["images"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$name = $_FILES["images"]["name"][$key];
$galerie = $_POST['galerie'];
move_uploaded_file( $_FILES["images"]["tmp_name"][$key], "../img/galeries/".$galerie."/" . $_FILES['images']['name'][$key]);
Img::creerMin("../img/galeries/".$galerie."/".$_FILES["images"]['name'][$key],"../img/galeries/".$galerie."/min/",$_FILES['images']['name'][$key],155,105);
}
}
header('Location: index.php');
?>
Ou dans ma classe image ?
Code : Tout sélectionner
static function creerMin($img,$chemin,$nom,$mlargeur=155,$mhauteur=105)
{
// On supprime l'extension du nom
$nom = substr($nom,0,-4);
// On récupère les dimensions de l'image
$dimension=getimagesize($img);
// On cré une image à partir du fichier récup
if(substr(strtolower($img),-4)==".jpg"){$image = imagecreatefromjpeg($img); }
else if(substr(strtolower($img),-4)==".png"){$image = imagecreatefrompng($img); }
else if(substr(strtolower($img),-4)==".gif"){$image = imagecreatefromgif($img); }
// L'image ne peut etre redimensionne
else{return false; }
// Création des miniatures
// On cré une image vide de la largeur et hauteur voulue
$miniature =imagecreatetruecolor ($mlargeur,$mhauteur);
// On va gérer la position et le redimensionnement de la grande image
if($dimension[0]>($mlargeur/$mhauteur)*$dimension[1] ){ $dimY=$mhauteur; $dimX=$mhauteur*$dimension[0]/$dimension[1]; $decalX=-($dimX-$mlargeur)/2; $decalY=0;}
if($dimension[0]<($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mlargeur*$dimension[1]/$dimension[0]; $decalY=-($dimY-$mhauteur)/2; $decalX=0;}
if($dimension[0]==($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mhauteur; $decalX=0; $decalY=0;}
// on modifie l'image crée en y plaçant la grande image redimensionné et décalée
imagecopyresampled($miniature,$image,$decalX,$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
// On sauvegarde le tout
imagejpeg($miniature,$chemin."/".$nom.".jpg",90);
return true;
}
Parce que je n'ai pas tout compris l'histoire de la classe à AB j'ai essayer de la faire marché mais est-ce qu'il gère le multi-upload ?
Re: Problème avec un formulaire et récupération de valeur
Posté : 08 déc. 2011, 14:08
par xTG
Tu le mets dans ta class image après le imagejpeg() qui sert à sauvegarder l'image.
Re: Problème avec un formulaire et récupération de valeur
Posté : 08 déc. 2011, 14:20
par virginweb
j'ai toujours la même erreur :
Code : Tout sélectionner
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 4752 bytes) in /home/soisn109/public_html/admin/img.class.php on line 213
mais avec le imagedestroy() cette fois le "tried to allocate" est nettement inférieur à celui d'avant.
Alors ça à l'aire de fonctionner mais il n’y a toujours pas assez de mémoire ?
Re: Problème avec un formulaire et récupération de valeur
Posté : 08 déc. 2011, 18:30
par moogli
Ouep
A tu regardé si AB indique comment il gère la chose ?
@+
Re: Problème avec un formulaire et récupération de valeur
Posté : 09 déc. 2011, 01:02
par AB
Ouep
A tu regardé si AB indique comment il gère la chose ?
@+
J'en ai
parlé ici et avant il y a des explications.
Pour un exemple de code, la fonction qui vérifie la mémoire dans ma
classe d'upload se nomme "Enoughmem" et elle est appelée dans la fonction "Redim_liste".
En fait on calcule la mémoire nécessaire pour faire le redimensionnement en fonction des
résolutions de l'image source et de l'image cible (le poids de l'image n'intervient pas pour ce calcul), et si ça dépasse la mémoire disponible pour le script en cours, on sort du script en envoyant un message personnalisé. Cela évite de se prendre un dépassement mémoire du serveur qu'on ne pourra pas maîtriser.
En bas du premier message de la
classe il y a quelques estimations. Avec 64 Mo ça devient confortable et il y peu de limitations. 32Mo est le minimum pour commencer à travailler sur des fichiers un peu volumineux.
Ah oui et
dans le lien il y a une procédure de bench pour mesurer la mémoire utilisée en fonction de l'image.
Bah finalement niveau doc sur le sujet y'a de quoi faire

Re: Problème avec un formulaire et récupération de valeur
Posté : 09 déc. 2011, 01:34
par AB
Parce que je n'ai pas tout compris l'histoire de la classe à AB j'ai essayer de la faire marché mais est-ce qu'il gère le multi-upload ?
Oui mieux même que le muti-upload, le multi-upload multiple
C'est ici
Dans cet exemple il suffit de remplacer la ligne
par
$form->Set_Redim ("1000","800");
si tu veux faire des redimensions en max 1000px de largeur et max 800px de hauteur.
Tu peux aussi faire plusieurs redimensionnement vers plusieurs répertoires et éventuellement garder l'image originale (sans traitement) dans un autre répertoire... imposer un nom de fichier... renommer le fichier si un fichier de même nom existe déjà sur le serveur ...tout cela est détaillé dans
"utilisation de la classe".
Re: Problème avec un formulaire et récupération de valeur
Posté : 09 déc. 2011, 15:25
par virginweb
Ok ! Merci beaucoup je viens de tester c'est super. Cependant si je veux mettre une variable php pour le dossier de destination cela ne marche pas.
Code : Tout sélectionner
$galerie = $_POST['galerie'];
// Déclaration de la classe avec envoi des paramètres (cf doc)
$form = new Telechargement ('/img/galeries/'.$galerie.'/','envoi_file','photo','get_form_1');
Pourtant j'ai fait un echo de $galerie et il m'affiche bien le contenu.
Je souhaiterais également faire une redirection une fois que les images sont téléchargées, comment je peux faire ça ?
avec un header mais je dois le placer où ?