Foreach() : code qui ne fonctionne plus. [Résolu]

Signaler
Messages postés
19
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
20 octobre 2005
-
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
-
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'avance pour votre aide.

s1m0n

21 réponses

Messages postés
19
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
20 octobre 2005

Finalement j'ai la réponse à mon problème : Je suis chez free et la
fonction glob() n'est plus "accéptée" manifestement... Donc j'ai mis
les fichiers de la galerie sur un autre serveur et ça fonctionne à
nouveau.

Un grand merci pour ton aide.

s1m0n
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Salut,

je vois pas où est le problème normalement ça devrais marcher nikel.

Ensuite je suis allé sur le site et le fichier n'existe pas !!! (la galerie)

@+

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
19
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
20 octobre 2005

oui c'est normal j'ai tout supprimé et remis à jour, et j'ai arrangé le
script. Pourtant ça ne fonctionne toujours pas. Manifestement le code
php ne détecte plus les fichiers jpg de mon repertoire.

s1m0n
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Re,

essaie ça :

<html>

<head>

<title></title>



<style>



<!--

BODY {

SCROLLBAR-FACE-COLOR: #000000;
SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; SCROLLBAR-3DLIGHT-COLOR: #000000;
SCROLLBAR-ARROW-COLOR: #ffffff; SCROLLBAR-TRACK-COLOR: #000000

}

-->



.fond {

background-attachment: fixed;

background-color: #000000;

background-image: url(copy.gif);

background-repeat: no-repeat;

background-position: left bottom;

}

</style>



<script type="text/javascript">

function ChangePhoto(nom_photo,photo){

if (parent.frames[0].document.getElementById){

parent.frames[0].document.getElementById(photo).innerHTML=nom_photo;

}

}





function des(txt) {

window.status = txt;

return true;

}

function eff() {

window.status="";

}





</script>





</head>





,

<?php

$tab=str_replace(array('img/','.jpg'),'',glob('img/*.jpg'));

foreach($tab as $photo){

$photo_nom=$photo;

?>

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
19
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
20 octobre 2005

Non, ca ne fonctionne pas, j'ai toujours le même message d'erreur.

s1m0n
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Grrrr

Dans ce cas là je joue plus avec les foreach !!!

Na

Maintenant on passe aux While :-p



<html>

<head>

<title></title>



<style>



<!--

BODY {

SCROLLBAR-FACE-COLOR: #000000;
SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; SCROLLBAR-3DLIGHT-COLOR: #000000;
SCROLLBAR-ARROW-COLOR: #ffffff; SCROLLBAR-TRACK-COLOR: #000000

}

-->



.fond {

background-attachment: fixed;

background-color: #000000;

background-image: url(copy.gif);

background-repeat: no-repeat;

background-position: left bottom;

}

</style>



<script type="text/javascript">

function ChangePhoto(nom_photo,photo){

if (parent.frames[0].document.getElementById){

parent.frames[0].document.getElementById(photo).innerHTML=nom_photo;

}

}





function des(txt) {

window.status = txt;

return true;

}

function eff() {

window.status="";

}





</script>





</head>





,

<?php

$tab=str_replace(array('img/','.jpg'),'',glob('./img/*.jpg'));

while(list($num, $photo_nom) = each($tab)){

?>

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
19
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
20 octobre 2005

Marche pas. Voila le nouveau message d'erreur :


Warning: Variable passed to each() is not an array or object in /var/www/free.fr/f/6/latox/3d/bas.php on line 50


Merci pour ton aide en tout cas.
s1m0n
Messages postés
19
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
20 octobre 2005

Je me suis fait aidé sur un autre foum, et on me propose ceci : (mais ça ne marche pas non plus)



<html>

<head>

<title></title>



<style>



<!--

BODY {

SCROLLBAR-FACE-COLOR: #000000;
SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; SCROLLBAR-3DLIGHT-COLOR: #000000;
SCROLLBAR-ARROW-COLOR: #ffffff; SCROLLBAR-TRACK-COLOR: #000000

}

-->



.fond {

background-attachment: fixed;

background-color: #000000;

background-image: url(copy.gif);

background-repeat: no-repeat;

background-position: left bottom;

}

</style>



<script type="text/javascript">

function ChangePhoto(nom_photo,photo){

if (parent.frames[0].document.getElementById){

parent.frames[0].document.getElementById(photo).innerHTML=nom_photo;

}

}





function des(txt) {

window.status = txt;

return true;

}

function eff() {

window.status="";

}





</script>





</head>





,

<?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);

?>

color=<? echo "white" ?>><? echo
$photo_nom
?>

>

href=<? echo
"index.php" ?> target=<? echo "_blank" ?>>Retour
accueil','image')">">,

<?

}

}

else

{

?>

Aucune image n'est actuellement
disponible.,

<?php

}

}

else

{

?>

Le répertoire "img" n'existe pas ou n'a pas été trouvé
à l'endroit indiqué.,

<?php

}

?>








</html>

s1m0n
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Le dossier img existe ?

Question con apar l'érreur ça marche ??


Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
19
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
20 octobre 2005

Oui mon dossier img existe bien, et toute les images à l'interieurs sont présentes : http://latox.free.fr/3d/img

A part l'erreur de la galerie, le site fonctionne bien, mais comme il
repose sur l'existence de cette galerie, il ne sert plus à grand chose
si les images ne sont pas détectées...

s1m0n
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
<html>

<head>

<title></title>



<style>



<!--

BODY {

SCROLLBAR-FACE-COLOR: #000000;
SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; SCROLLBAR-3DLIGHT-COLOR: #000000;
SCROLLBAR-ARROW-COLOR: #ffffff; SCROLLBAR-TRACK-COLOR: #000000

}

-->



.fond {

background-attachment: fixed;

background-color: #000000;

background-image: url(copy.gif);

background-repeat: no-repeat;

background-position: left bottom;

}

</style>



<script type="text/javascript">

function ChangePhoto(nom_photo,photo){

if (parent.frames[0].document.getElementById){

parent.frames[0].document.getElementById(photo).innerHTML=nom_photo;

}

}





function des(txt) {

window.status = txt;

return true;

}

function eff() {

window.status="";

}





</script>





</head>





,

<?php

$dir = './img/';

$dh = opendir($dir);// On ouvre le repertoire

while(($photo_nom = readdir($dh)) !== false){// Boucle pour parcourir le repertoire

if(strpos($photo_nom, '.jpg') !== false){// Si le nom du fichier correspond à celui demandé

$photo_nom = str_replace('.jpg','', $photo_nom);

?>

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
19
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
20 octobre 2005

Alors là ça s'est légerement amélioré : il n'y a plus d'erreur. A la
place il y a des emplacements pour les miniatures (le nombre exact
d'images dans le dossier img) et deux liens. Mais les images sont en
liens brisés et les deux liens qui apparaissent au dessus de chaque
emplacement ne devraient pas se trouver là... Je ne sais pas si je me
fais bien comprendre mais la meilleurs solution c'est que tu ailles
voir par toi même : http://latox.free.fr/3d/ rubrique Galerie.

s1m0n
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Et là ?

<html>

<head>

<title></title>



<style>



<!--

BODY {

SCROLLBAR-FACE-COLOR: #000000;
SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; SCROLLBAR-3DLIGHT-COLOR: #000000;
SCROLLBAR-ARROW-COLOR: #ffffff; SCROLLBAR-TRACK-COLOR: #000000

}

-->



.fond {

background-attachment: fixed;

background-color: #000000;

background-image: url(copy.gif);

background-repeat: no-repeat;

background-position: left bottom;

}

</style>



<script type="text/javascript">

function ChangePhoto(nom_photo,photo){

if (parent.frames[0].document.getElementById){

parent.frames[0].document.getElementById(photo).innerHTML=nom_photo;

}

}





function des(txt) {

window.status = txt;

return true;

}

function eff() {

window.status="";

}





</script>





</head>





,

<?php

$dir = './img/';

$dh = opendir($dir);// On ouvre le repertoire

while(($photo_nom = readdir($dh)) !== false){// Boucle pour parcourir le repertoire

if(strpos($photo_nom, '.jpg') !== false){// Si le nom du fichier correspond à celui demandé

$photo_nom = str_replace('.jpg','', $photo_nom);

?>

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
19
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
20 octobre 2005

Pareil... Tu es allé voir le résultat sur mon site ?

s1m0n
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Dsl

je me suis planté en écrivant j'ai fait une faute de frappe :-/

<html>

<head>

<title></title>



<style>



<!--

BODY {

SCROLLBAR-FACE-COLOR: #000000;
SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; SCROLLBAR-3DLIGHT-COLOR: #000000;
SCROLLBAR-ARROW-COLOR: #ffffff; SCROLLBAR-TRACK-COLOR: #000000

}

-->



.fond {

background-attachment: fixed;

background-color: #000000;

background-image: url(copy.gif);

background-repeat: no-repeat;

background-position: left bottom;

}

</style>



<script type="text/javascript">

function ChangePhoto(nom_photo,photo){

if (parent.frames[0].document.getElementById){

parent.frames[0].document.getElementById(photo).innerHTML=nom_photo;

}

}





function des(txt) {

window.status = txt;

return true;

}

function eff() {

window.status="";

}





</script>





</head>





,

<?php

$dir = './img/';

$dh = opendir($dir);// On ouvre le repertoire

while(($photo_nom = readdir($dh)) !== false){// Boucle pour parcourir le repertoire

if(strpos($photo_nom, '.jpg') !== false){// Si le nom du fichier correspond à celui demandé

$photo_nom = str_replace('.jpg','', $photo_nom);

?>

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
Messages postés
19
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
20 octobre 2005

Non, aucun résultats

s1m0n
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
ça fé koi ?

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Pourquoi vous vous faites chier avec 36 codes qui marchent pas ?



Le mieux est de tester la variable avant de lui faire un foreach () !!!!!



<?php
$tab=glob('img/*.jpg');
// Pour rappel, la fonction glob() en PHP renvoit un tableau avec les chemins
// des fichiers trouvés ou renvoit FALSE quand y'a rien qui correspond !

if ( is_array($tab) ) {
foreach ($tab as $photo) {
$photo_nom=str_replace("img/","",$photo);
$photo_nom=str_replace(".jpg","",$photo_nom);

// etc...
}
} else {
// $tab vaut donc FALSE, aucun fichier trouvé
}
?>
Maintenant, à toi de voir ou ca merde.
Dans le genre ('img/*.jpg') ==> ('./img/*.jpg') peut être ?
Y'a un tas de trucs à essayer. Essaye de débugger ton code au maximum avant de croire que c'est un foreach qui fait tout merder :)

D'ailleurs, au passage, si foreach() ne marche pas, while() non plus A MOINS que la version de PHP soit inférieur à la 4.xx. C'est la seule condition de non-fonctionnement !
Messages postés
19
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
20 octobre 2005

Merci FhX mais j'avais déjà essayé tout ça.

s1m0n
Messages postés
954
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2
Remarque que mon code n'utilisais pas glob !!!!

@+

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.