Foreach() : code qui ne fonctionne plus.

Simon
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 13:13

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.

ViPHP
fab
ViPHP | 2657 Messages

16 oct. 2005, 13:18

essaye
if( $tab=glob('img/*.jpg') ) {
 // ton foreach
}
else { 
 echo "probleme avec glob";
}

et dit nous ce que ça retourne
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 493 Messages

16 oct. 2005, 13:19

ceci signifie que $tab n'est pas un tableau car
  • soit ton dossier n'existe pas
  • soit tu n'as pas d'images jpg !

Simon
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 13:25

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

Mammouth du PHP | 19672 Messages

16 oct. 2005, 13:26

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");
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Simon
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 13:32

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

Mammouth du PHP | 19672 Messages

16 oct. 2005, 13:39

Ç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
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Simon
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 13:54

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 ?

Mammouth du PHP | 19672 Messages

16 oct. 2005, 14:03

Est-ce que tes images sont dans le même répertoire que la page elle-même ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Simon
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 14:05

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é ?

Mammouth du PHP | 19672 Messages

16 oct. 2005, 14:09

Essaye juste en ajoutant un petit détail:
$tab = glob('./img/*.jpg');
Le "./" juste avant img, teste et reviens avec le résultat.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Simon
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 14:23

Aucun résultat malheuresement. Toujours pas d'image disponible.

ViPHP
fab
ViPHP | 2657 Messages

16 oct. 2005, 14:31

tu es sur du chemin d'acces au dossier car la sinon je vosi pas trop pourquoi ça ne marche pas
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Mammouth du PHP | 19672 Messages

16 oct. 2005, 14:32

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
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1311 Messages

16 oct. 2005, 14:33

salut
peut etre un probleme de casse ou d'extention??