Page 1 sur 3
Foreach() : code qui ne fonctionne plus.
Posté : 16 oct. 2005, 13:13
par Simon
Bonjour, j'ai créé il y a quelques mois un site internet incluant une galerie d'image en php. Je me suis apperçu un jour en visitant mon site que le code php n'était plus valide, et me générait une erreur sans que je ne l'ai modifié. Comme je suis débutant, j'avais utilisé un script donné dans un numéros du magazine SVM (Sciences et Vie Micro), et je l'avais un peu arrangé pour l'adapter à ma galerie. Le code fonctionnait bien et je ne comprend pas pourquoi il s'est subitement arrété de fonctionner.
Voici l'erreur qu'il m'affiche dans mon navigateur :
Warning: Invalid argument supplied for foreach() in /var/www/free.fr/f/6/latox/3d/bas.php on line 50
A la ligne 50 j'ai ceci :
foreach ($tab as $photo)
Le code complet de la page est à cette adresse :
http://latox.free.fr/3d/bas.txt
Et voila l'adresse de mon site (cliquer sur le lien Galerie en haut à gauche) :
http://latox.free.fr/3d/
Merci d'avanc pour votre aide.
Posté : 16 oct. 2005, 13:18
par fab
essaye
if( $tab=glob('img/*.jpg') ) {
// ton foreach
}
else {
echo "probleme avec glob";
}
et dit nous ce que ça retourne
Posté : 16 oct. 2005, 13:19
par Vaedan
ceci signifie que $tab n'est pas un tableau car
- soit ton dossier n'existe pas
- soit tu n'as pas d'images jpg !
Posté : 16 oct. 2005, 13:25
par Simon
Non, mon dossier img et mes images sont bien présents.
J'ai fait ce que fab me propose, mais j'ai du mal placer le code car il me renvoi ceci :
Parse error: parse error, unexpected T_ELSE in /var/www/free.fr/f/6/latox/3d/bas.php on line 71
En tout cas je dois dire que je n'ai jamais vu une réponse aussi rapide sur un forum ! Merci
Posté : 16 oct. 2005, 13:26
par Cyrano
Il faudrait que tu vérifies ce que te retourne glob() , tu utilises:
$tab = glob('img/*.jpg');
Ajoute un test pour vérifier la valeur de retour avec ceci juste après:
echo("<pre>\n");
var_dump($tab);
echo("</pre>\n");
Posté : 16 oct. 2005, 13:32
par Simon
Voila la réponse quand je recharge la page apres le test de Cyrano :
bool(false)
Warning: Invalid argument supplied for foreach() in /var/www/free.fr/f/6/latox/3d/bas.php on line 58
Posté : 16 oct. 2005, 13:39
par Cyrano
Ça peut significatier qu'il n'y a aucun fichier correspondant, et dans le cas le retour est normal (
voir la doc) : dans ce cas, il faut encadrer la boucle dans une alternative:
<?php
$tab = glob('img/*.jpg');
if(false !== $tab)
{
foreach ($tab as $photo)
{
$photo_nom = str_replace("img/", "", $photo);
$photo_nom = str_replace(".jpg", "", $photo_nom);
?>
<td align="center">
<a onMouseOver="des('Cliquez pour agrandir'); return true;" onMouseOut="eff();" href="javascript:ChangePhoto('<font size=<? echo "2" ?> color=<? echo "white" ?>><em><b><? echo $photo_nom ?></b></em></font><br><br><img src=<? echo "",$photo ?>><br><br><br><br><a style=<? echo "color:white; font-size:10; font-weight:normal" ?> href=<? echo "index.php" ?> target=<? echo "_blank" ?>>Retour accueil</a>','image')"><img border="0" src="<? echo $photo.".min" ?>"></a>
</td>
<?
}
}
else
{
?>
<td><p>Aucune image n'est actuellement disponible</p></td>
<?php
}
?>
Posté : 16 oct. 2005, 13:54
par Simon
Maintenant, il m'affiche bien le message "aucune image n'aest actuellement disponible". Ce que je ne comprend pas c'est que toutes mes images sont bien présentes dans le bon dossier. Comment se fait-il que le code ne les détecte pas ?
Posté : 16 oct. 2005, 14:03
par Cyrano
Est-ce que tes images sont dans le même répertoire que la page elle-même ?
Posté : 16 oct. 2005, 14:05
par Simon
Non, dans le dossier img. Comment se fait-il que d'un seul coup le code ne détecte plus les images alors que je n'ai rien changé ?
Posté : 16 oct. 2005, 14:09
par Cyrano
Essaye juste en ajoutant un petit détail:
$tab = glob('./img/*.jpg');
Le "./" juste avant img, teste et reviens avec le résultat.
Posté : 16 oct. 2005, 14:23
par Simon
Aucun résultat malheuresement. Toujours pas d'image disponible.
Posté : 16 oct. 2005, 14:31
par fab
tu es sur du chemin d'acces au dossier car la sinon je vosi pas trop pourquoi ça ne marche pas
Posté : 16 oct. 2005, 14:32
par Cyrano
Alors on va augmenter encore le niveau de test:
<?php
if(file_exists("./img") && is_dir("./img"))
{
$tab = glob('./img/*.jpg');
if(false !== $tab)
{
foreach ($tab as $photo)
{
$photo_nom = str_replace("img/", "", $photo);
$photo_nom = str_replace(".jpg", "", $photo_nom);
?>
<td align="center">
<a onMouseOver="des('Cliquez pour agrandir'); return true;" onMouseOut="eff();" href="javascript:ChangePhoto('<font size=<? echo "2" ?> color=<? echo "white" ?>><em><b><? echo $photo_nom ?></b></em></font><br><br><img src=<? echo "",$photo ?>><br><br><br><br><a style=<? echo "color:white; font-size:10; font-weight:normal" ?> href=<? echo "index.php" ?> target=<? echo "_blank" ?>>Retour accueil</a>','image')"><img border="0" src="<? echo $photo.".min" ?>"></a>
</td>
<?
}
}
else
{
?>
<td><p>Aucune image n'est actuellement disponible</p></td>
<?php
}
}
else
{
?>
<td><p>Le répertoire "img" n'existe pas ou n'a pas été trouvé à l'endroit indiqué.</p></td>
<?php
}
?>
Posté : 16 oct. 2005, 14:33
par jeff
salut
peut etre un probleme de casse ou d'extention??