Problème de boucle

cocacola0589 Messages postés 13 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 10 février 2009 - 8 févr. 2009 à 17:12
cocacola0589 Messages postés 13 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 10 février 2009 - 10 févr. 2009 à 14:15
Salut, j'ai un problème dans le script suivant :

<?php
include("inc.centre.php");
$filter = ".php";

$directory = "../pages";

@$d = dir($directory);
if ($d) {
    while($entry=$d->read()) { 
        $ps = strpos(strtolower($entry), $filter);
        if (!($ps === false)) { 
            $items[] = $entry;
        }
    }
    $d->close();
    sort($items);
}
echo "<html><head><title>Config Pages</title></head>";
echo "<< Retour
";
include("servertime.php");
$items = str_replace('.php', '', $items);
echo "<form Method='post' Action='centreconfig.php'>";
for($i=0; $i<sizeof($items); $i++) {    if ($items "on"){$checked "checked=yes";}
    echo "".$items[$i]." 

";
}
echo "";
echo "</form>";
echo "</html>";
?>

Explication : le script affiche la liste des fichiers php contenus dans le répertoire $directory, chaque fichier étant suivi d'une checkbox.
La variable "on" si la checkbox est cochée est stockée dans le fichier inc.centre.php via le fichier centreconfig.php (une variable par checkbox)
Je souhaiterai afficher la checkbox déjà cochée si ma variable est "on" dans le  inc.centre.php (executé par la ligne en rouge qui ne fonctionne pas ...)

Thanks !

5 réponses

JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
8 févr. 2009 à 18:01
Ca ne devrait pas plutot être:

if ($items[$i] == "on"){$checked = "checked=yes";}


??
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
8 févr. 2009 à 21:34
Salut,

JulSoft : oui et non, avec ça si la condition est validé la variable $checked prendra une valeur qui ne sera jamais modifiée.

cocacola0589 : tu te complique bien la vie pour lister un simple dossier ...
Ton instance de classe Directory $d ... tu peux la supprimer et remplacer ton for (qui aurai du être un foreach) par ceci :

foreach (scandir($directory) as $dossier) {
     echo '<label for="', $dossier, '">', $dossier, '</label>dossier, '" ', ( $test ? 'checked="checked"' : ''), '="', $dossier, '" />
';
}

J'ajoute quelques remarques :
 - "on" n'est pas une variable mais une valeur, a ce sujet je ne vois pas comment tu défini la condiftion nécéssaire pour qu'une checkbox soit cochée ou non. Pour cette dernière raison, j'ai mis $test a la place du dit test définissant si une checkbox doit être cochée ou non.
 - Nul besoin d'aller concaténer les chaines dans le echo, tu perds du temps en un calcul complètement useless. echo peux prendre plusieurs paramètres (a séparer par des virgules), c'est bien mieux de faire ainsi.
 - Par pitié revois le HTML :
        * L'attribut checked ne peux prendre comme valeur que checked (ce qui donne checked="checked") et rien d'autre.
        * Lorsque l'on a un attribut, sa valeur doit toujours être encadrée par des guillemets doubles (pas de guillemets simple ou autre).
        * Lorsque l'on ouvre une balise on est prié de la fermer (
et non
, etc).
        * Le nom des éléments d'un formulaire doit avoir une balise <label> afin de le ratacher a l'élément qu'il décrit.
        * On ne fait pas de présentation dans le HTML. Au lieux de mettre deux retour a la ligne définit un espacement plus grand grâce au CSS.
C'est bien domage que la plupart des navigateurs acceptent encore ces vielles syntaxes biscornues datant d'il y a si longtemps...
0
cocacola0589 Messages postés 13 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 10 février 2009
9 févr. 2009 à 02:58
Merci pour ton aide, mais, petit problème :
Fatal error: Call to undefined function: scandir()
=/
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
9 févr. 2009 à 14:38
scandir() a été implémentée en PHP5. Vu que tu utilise la classe Directory, je suppose que tu utilises PHP4.

Petit rappel provenant de php.net :
"Support for PHP 4 has been discontinued since 2007-12-31. Please consider
upgrading to PHP 5.2."

Si c'est toi qui gère le serveur, il est vivement conseillé de passer a PHP5, rester avec une vielle version qui n'est plus supportée est un gros risque pour un serveur de production. Si tu as un hébergeur mutualisé, il se peu qu'il propose plusieurs versions de PHP et que par défaut PHP4 soit utilisé (c'est le cas de 1&1 par exemple), a ce moment je t'invite a regarder dans leur documentation comment modifier ce comportement.

Sinon, même en restant sur cette viellerie obsolète qu'est PHP4 tu as toujours moyen de ne faire qu'une seule boucle (avec ton instance de la classe Directory par exemple) en suivant le même modèle..
0

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

Posez votre question
cocacola0589 Messages postés 13 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 10 février 2009
10 févr. 2009 à 14:15
Ok , je vais regarder tout ça =)
Merci !
0