Bonjour ! Alors voilà.. Je rencontre un problème et je commence doucement à avoir la tête en bouillie à force de chercher et de ne rien trouver :p
Je vous explique depuis le début. Il y a plus ou moins 2 semaines, en créant un site pour mon père, il a décidé de changer certaines choses. Du coup, j'avais déjà fait un système pour pouvoir upload plusieurs images simultanément à l'inscription (uniquement en PHP, sans Ajax) et là, je me retrouve à devoir le faire sur la page de modification de profil plutôt qu'à l'inscription. Pas vraiment dérangé, j'ai gardé le script que j'avais fait pour le ré-utiliser quand je serais sur la page de modification de profil. Je tiens à dire que le script fonctionnait parfaitement !
Aujourd'hui, je me retrouve à faire cette page et il ne me manque plus que d'insérer ce script pour la finir. Je le copie et le colle dans ma page et je le modifie pour qu'il fonctionne sur cette page mais voilà qu'il ne fonctionne pas..
Ce qui est énervant, c'est que je n'ai aucun message d'erreur. La page fonctionne parfaitement mais dès que je veux upload les images, rien ne se passe. Il n'y a même pas un temps de chargement long le temps que les images se téléchargent. Rien du tout.
J'ai déjà ré-écrit plusieurs fois mon code mais RIEN ne se passe, jamais. Je l'ai donc débugé mais je me rend compte que rien qui concerne ce script ne s'exécute.
Voici le script en question (les variables d'erreur sont en neerlandais mais c'est parce que le site doit être fait en neerlandais :p ) :
if($_FILES['photos']['error'][0] === 0)
{
$maxSize = 5242880;
$validExtensions = array('jpg', 'jpeg', 'gif', 'png');
for($i=0; $i < count($_FILES['photos']['tmp_name']); $i++)
{
if($infosmembre['nbre_images'] < 7)
{
if($_FILES['photos']['size'] <= $maxSize)
{
$uploadExtensions = strtolower(substr(strrchr($_FILES['photos']['name'][$i], '.'), 1));
if(in_array($uploadExtensions, $validExtensions))
{
$chemin_photo = "../members/images/galeries/".$_SESSION['id']."/".$_FILES['photos']['name'][$i];
$resultat_photo = move_uploaded_file($_FILES['photos']['tmp_name'][$i], $chemin_photo);
if($resultat_photo)
{
$photoplus = $infosmembre['nbre_images'] + 1;
$insertimg = $bdd->prepare('UPDATE members SET nbre_images = ?, dossier_img = ? WHERE id_member = ?');
$insertimg->execute(array($photoplus, $_SESSION['id'], $_SESSION['id']));
}
}
else
{
$errors[] = '<b>' . $_FILES['photos']['name'][$i] . '</b> moet aan het foormat jpeg, jpg, png, gif zijn';
}
}
else
{
$errors[] = '<b>' . $_FILES['photos']['name'][$i] . '</b> niet overschrijden 5Mo';
}
}
else
{
$errors[] = "U hebt al uploaden foto's 6";
}
}
}
Et voici mon input de type file :
<input type="file" name="photos[]" id="filer_input" multiple="multiple" />
Je n'ai pas l'impression que quelque chose cloche. Et ce qui est étrange, c'est que pour insérer un logo, le code est quasiment pareil sauf qu'il ne s'agit que d'une seule image mais je suppose que ça ne doit pas changer grand chose ?
Je précise aussi que je suis sur un hébergeur gratuit (livehost.fr) le temps de développer le site et que mon père me fournisse un hébergeur payant mais je ne pense pas que le problème vienne de là car le script fonctionnait avant..
Je vous serai très reconnaissant de m'aider !
Amicalement,
Boris
J'ai testé et trouvé l'erreur :
if($_FILES['photos']['size'] <= $maxSize)
manque l'indice $i :
if($_FILES['photos']['size'][$i] <= $maxSize)
Je te remercie beaucoup ! C'est déjà un problème de réglé !
Par contre, ça ne fonctionne toujours pas.. C'est bizarre. Et en fait, je pense que le problème vient de plus haut encore parce que j'ai rajouté une petite condition pour voir s'il y a plus de 7 images au dessus de la boucle et ça ne fonctionne pas non plus. Voici mon code actuel :
if($_FILES['photos']['error'][0] === 0)
{
$maxSize = 5242880;
$validExtensions = array('jpg', 'jpeg', 'gif', 'png');
if(!isset($_FILES['photos']['tmp_name'][6]))
{
for($i=0; $i < count($_FILES['photos']['tmp_name']); $i++)
{
if($infosmembre['nbre_images'] < 7)
{
if($_FILES['photos']['size'][$i] <= $maxSize)
{
$uploadExtensions = strtolower(substr(strrchr($_FILES['photos']['name'][$i], '.'), 1));
if(in_array($uploadExtensions, $validExtensions))
{
$chemin_photo = "../../members/images/galeries/".$_SESSION['id']."/".$_FILES['photos']['name'][$i];
$resultat_photo = move_uploaded_file($_FILES['photos']['tmp_name'][$i], $chemin_photo);
if($resultat_photo)
{
$photoplus = $infosmembre['nbre_images'] + 1;
$insertimg = $bdd->prepare('UPDATE members SET nbre_images = ?, dossier_img = ? WHERE id_member = ?');
$insertimg->execute(array($photoplus, $_SESSION['id'], $_SESSION['id']));
}
}
else
{
$errors[] = '<b>' . $_FILES['photos']['name'][$i] . '</b> moet aan het foormat jpeg, jpg, png, gif zijn';
}
}
else
{
$errors[] = '<b>' . $_FILES['photos']['name'][$i] . '</b> niet overschrijden 5Mo';
}
}
else
{
$errors[] = "U hebt al uploaden foto's 6";
}
}
}
else
{
$errors[] = "Niet dat zes foto's maximaal";
}
}
Je continue mes fouilles dans mon code mais je t'avoue que je suis complètement paumé..
Pour moi en local ça fonctionnait en remplissant la variable $infosmembre['nbre_images'].
si tu fait un
echo $infosmembre['nbre_images'];
Ca donne quoi ? si c'est vide ou supérieur à 7 ça fonctionne pas.
en local, j'ai fait:
$infosmembre : array();
$infosmembre['nbre_images'] = 5;
Ca donne un beau 0. Le truc, c'est que même en la remplissant, ça ne changera rien. La variable $infosmembre est la variable qui récupère toutes les données des membres ($infosmembre->fetch()) depuis la base de donnée. De plus, je ne comprend pas pourquoi l'erreur ne s'affiche pas alors car j'ai bien défini une $errors[] si c'est supérieur à 6.. :/
j'avis compris pour la variable $infosmembre ;)
ben moi avec
$infosmembre : array();
$infosmembre['nbre_images'] = 5;
ça fonctionne chez moi. En base de données ton champs "nbre_images" est un INT ?
pour l'erreur qui ne s'affiche pas tu fais bien un truc du genre:
if($errors)
var_dump($errors) // c'est un tableau
Je ne comprends pas le : car moi ça fait bug mon code.. :/
Et quand je fais un var_dump de $errors, peu importe l'erreur que je fais concernant ce script, ça reste NULL donc RIEN ne s'effectue.. Dingue !
if($_FILES['photos']['error'][0] === 0)
Je commence à penser que c'est cette toute première ligne qui bug.. :(
Bonsoir !
Désolé de ne pas avoir donné de nouvelles pendant quelques jours ! Je suis allé sur un autre forum où malheureusement, ils n'ont pas trouvé la solution eux non plus. J'ai fini par tenter le tout pour le tout et j'ai fini par trouver ce qui clochait !
Pour le système d'upload multipe, afin que celui-ci rende bien (visuellement), j'ai utilisé du code jQuery trouvé sur Internet. Et paf ! C'est ça qui faisait planter !
Ceci fonctionne :
<input type="file" name="photos[]" multiple="multiple" />
Ceci ne fonctionne pas :
<input type="file" name="photos[]" id="filer_input" multiple="multiple" />
Plutôt dingue non ? Je vais voir ce qui cloche dans leur code et je vous en dis des nouvelles !
Merci à vous en tout cas de vos réponses et plus particulièrement à Kraddle ! :)
Amicalement,
Boris