Foreach() : code qui ne fonctionne plus.

Résolu
Skymmon Messages postés 19 Date d'inscription dimanche 1 juillet 2001 Statut Membre Dernière intervention 20 octobre 2005 - 16 oct. 2005 à 14:28
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 - 16 oct. 2005 à 20:22
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

Skymmon Messages postés 19 Date d'inscription dimanche 1 juillet 2001 Statut Membre Dernière intervention 20 octobre 2005
16 oct. 2005 à 20:08
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
3
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
16 oct. 2005 à 14:50
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.
0
Skymmon Messages postés 19 Date d'inscription dimanche 1 juillet 2001 Statut Membre Dernière intervention 20 octobre 2005
16 oct. 2005 à 14:58
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
0
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
16 oct. 2005 à 15:23
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Skymmon Messages postés 19 Date d'inscription dimanche 1 juillet 2001 Statut Membre Dernière intervention 20 octobre 2005
16 oct. 2005 à 15:35
Non, ca ne fonctionne pas, j'ai toujours le même message d'erreur.

s1m0n
0
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
16 oct. 2005 à 15:52
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.
0
Skymmon Messages postés 19 Date d'inscription dimanche 1 juillet 2001 Statut Membre Dernière intervention 20 octobre 2005
16 oct. 2005 à 16:03
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
0
Skymmon Messages postés 19 Date d'inscription dimanche 1 juillet 2001 Statut Membre Dernière intervention 20 octobre 2005
16 oct. 2005 à 16:05
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
0
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
16 oct. 2005 à 16:12
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.
0
Skymmon Messages postés 19 Date d'inscription dimanche 1 juillet 2001 Statut Membre Dernière intervention 20 octobre 2005
16 oct. 2005 à 16:30
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
0
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
16 oct. 2005 à 16:43
<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.
0
Skymmon Messages postés 19 Date d'inscription dimanche 1 juillet 2001 Statut Membre Dernière intervention 20 octobre 2005
16 oct. 2005 à 16:52
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
0
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
16 oct. 2005 à 16:57
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.
0
Skymmon Messages postés 19 Date d'inscription dimanche 1 juillet 2001 Statut Membre Dernière intervention 20 octobre 2005
16 oct. 2005 à 17:28
Pareil... Tu es allé voir le résultat sur mon site ?

s1m0n
0
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
16 oct. 2005 à 17:40
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.
0
Skymmon Messages postés 19 Date d'inscription dimanche 1 juillet 2001 Statut Membre Dernière intervention 20 octobre 2005
16 oct. 2005 à 19:10
Non, aucun résultats

s1m0n
0
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
16 oct. 2005 à 19:19
ça fé koi ?

Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 oct. 2005 à 20:08
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 !
0
Skymmon Messages postés 19 Date d'inscription dimanche 1 juillet 2001 Statut Membre Dernière intervention 20 octobre 2005
16 oct. 2005 à 20:10
Merci FhX mais j'avais déjà essayé tout ça.

s1m0n
0
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
16 oct. 2005 à 20:13
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.
0
Rejoignez-nous