PHP affichage sous condition

Fermé
Utilisateur anonyme - 24 mai 2009 à 06:56
 Utilisateur anonyme - 27 mai 2009 à 19:22
Bonjour,

Je vous passe mon script, qui ne fais rien d'exceptionnel... comme tant d'autres, il ne fonctionne pas comme il le devrait !

Je voudrais, selon que certaines variables sont affectées, ou non, afficher le contenu d'un fichier texte,
soit dans une <div>,
soit dans un <textarea> .

Les superglobales 'visul' et 'liste' sont affectées depuis un précédent formulaire, qui affiche selon d'autres conditions la liste des fichiers texte du répertoire courant.

La fonction document() fonctionne correctement puisque le résultat s'affiche dans la <div>, mais je ne parviens pas à faire afficher le fichier texte sélectionné dans le <textarea>.

Je vous passe la création du tableau trié...
[code]
if (isset($_POST['visul'])) {
if ( ! empty($_POST['liste'])) {
echo '<form name="Lecture" method="POST" action="'.$_SERVER['SCRIPT_NAME'].'">'."\n";
echo '<fieldset class="page">'."\n";
echo '<legend id="titre"> Billet </legend>'."\n";
echo '<fieldset class="texte">'."\n";

if ( ! isset($_POST['modif'])) {
echo '<div id="document">'."\n";
document('Lecture', $lireDoc);
echo "</div> \n";
echo '</fieldset> <fieldset class="commandes">'."\n";
echo ' <input id="commG" type="submit" name="modif" value="Modifier">'."\n";
echo ' <input id="commD" type="submit" name="fermer" value="Fermer">'."\n";
} else {
echo '<textarea name="post" cols="80" rows="31">'."\n";
document('Modification', $lireDoc);
echo "</textarea> \n </fieldset> \n";
echo '<fieldset class="commandes">'."\n";
echo ' <input type="submit" name="valider" value="Valider">'."\n";
echo ' <input type="submit" name="fermer" value="Annuler">'."\n";
}
echo "</fieldset> \n </fieldset> \n </form> \n";

if (isset($_POST['fermer'])) unset($_POST['liste']);
}
} /code

Que me conseillez-vous pour résoudre mon souci ?
A voir également:

9 réponses

Bonjour

Je te conseille de nous montrer ce qu'il y a dans la fonction document(), il y a de grandes chances que le problème vienne de là. Et qu'y a -t-il dans $lireDoc ?
0
Utilisateur anonyme
24 mai 2009 à 18:42
$lireDoc est un tableau de la forme :
Array
   (
      0 => Array
         (
            timestamp => xxx
            cheminFichier => xxx
            nom => xxx
            identifiantUniq => xxx
         )
      1 => Array
         (
            timestamp => xxx
            cheminFichier => xxx
            [...]

Quant à la fonction document :
function document($etape, $lireDoc) {
         while (list($cle, $val) = each($lireDoc)) {
            if ($val['id'] == $_POST['liste']) {
               $document = file_get_contents($val['cheminFichier']) or die($etape.' : Echec à la lecture');
               $document = simplyChain($document);
                  echo $document;
pourquoi fonctionnerait-elle pour un condition donnée mais pas son contraire ?
0
Utilisateur anonyme
24 mai 2009 à 21:58
???
Il semblerait que la superglobale $_POST['liste'] ne passe pas à la condition suivante...

Pour l'instant, j'ai extrait la sous-condition pour la remettre dans le flux principal du script, et j'utilise des champs cachés pour transmettre les superglobales (bien que ça me paraisse retors comme méthode) :
<?php
/* Visualisation d'un document */
if (isset($_POST['visul'])) {
   if ( ! empty($_POST['liste'])) {
      echo '<form name="Lecture" method="POST" action="'.$_SERVER['SCRIPT_NAME'].'">'."\n";
 // ajout de champs cachés pour transmettre les superglobales pertinentes
      echo '<input type="hidden" name="list" value="'.$_POST['liste'].'">';
      echo '<input type="hidden" name="visul" value="Visualisation">';
      echo '<fieldset class="page">'."\n";
      echo '<legend id="titre"> Billet </legend>'."\n";
      echo '<fieldset class="texte">'."\n";

         echo '<div id="document">'."\n";
         document('Lecture', $lireDoc);
         echo "</div> \n";
         echo '</fieldset> <fieldset class="commandes">'."\n";
         echo '   <input id="commG" type="submit" name="modif" value="Modifier">'."\n";
         echo '   <input id="commD" type="submit" name="fermer" value="Fermer">'."\n";
      echo "</fieldset>\n</fieldset>\n</form> \n";
     if (isset($_POST['fermer'])) unset($_POST['liste']);
   }
} 
//
/* Modification d'un document */
if (isset($_POST['visul']) && isset($_POST['modif'])) {
   if ( ! empty($_POST['list'])) {
      echo '<form name="Lecture" method="POST" action="'.$_SERVER['SCRIPT_NAME'].'">'."\n";
      echo '<fieldset class="page">'."\n";
      echo '<legend id="titre"> Billet </legend>'."\n";
      echo '<fieldset class="texte">'."\n";
      echo '<textarea name="post" cols="80" rows="31">'."\n";
      document('Modification', $lireDoc);
      echo "</textarea> \n </fieldset> \n";
      echo '<fieldset class="commandes">'."\n";
      echo '   <input id="commG" type="submit" name="valider" value="Valider">'."\n";
      echo '   <input id="commD" type="submit" name="fermer" value="Annuler">'."\n";
      echo "</fieldset>\n</fieldset>\n</form> \n";
      echo $_POST['list'].' - '.$_POST['liste'];
   }
}
//

/* // Affichage de la liste // */
if (empty($_POST['liste']) && !isset($_POST['visul']) && !isset($_POST['modif']) /*&& empty($POST['list'])*/) {
   echo '<form action="'.$_SERVER['SCRIPT_NAME'].'" method="POST">';
   echo '<fieldset class="page">';
   echo '<legend id="titre"> Billets </legend>';
   echo '<fieldset class="texte"> <select id="list" name="liste" size="29">';
   echo '<option value="" selected>Sélectionne un billet</option>';

   while (list($cle, $val) = each($lireDoc)) { 
      echo '<option value="'.$val['id'].'"> <a class="elem" href="">&#8976; '.$val['titre'].'<span>'.infobul($val['cheminFichier']).' [...] </span> </a>'."\n".'</option>'."\n";
   }

   echo '</select> </fieldset> <fieldset class="commandes">';
   echo '<input id="commG"  type="submit" name="visul" value="Afficher">';
   echo '<input id="commD" type="submit" name="nvDoc" value="Nouveau">';
   echo '</fieldset> </fieldset></form>';
}
?>

Tout cela va certainement évoluer...

des suggestions ?
0
echo '<input type="hidden" name="list" value="'.$_POST['liste'].'">';

C'est pour brouiller les pistes que tu jongles avec les list sans e et les liste avec e ?

Sinon, pour passer les variables d'une page à l'autre, utilise les sessions, c'est nettement plus simple.
0

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

Posez votre question
Utilisateur anonyme
25 mai 2009 à 13:41
Bonjour,

Avec des $_SESSION, ça fonctionne.
Voici "l'éclaté" :
<?php
include('fonctions_blog.php');
$repertoire = '.';
$Fichiers = triFichiers($repertoire);
function document($etape, $Fichiers) {
         while (list($cle, $val) = each($Fichiers)) {
            if ( ! empty($_SESSION['document'])) {
               if ($val['id'] == $_SESSION['document']) {
                  $document = file_get_contents($val['cheminFichier']) or die($etape.' : Echec à la lecture');
                  switch($_SESSION['etat']) {
                     case "modification" :
                        $document = simplyChain($document);
                        $document = str_replace('<br />', '', $document);
                        return $document;
                        break;
                     case "visualisation" :
                        $document = simplyChain($document);
                        echo $document;
                        break;
                  }
               }
            } else {
               echo "oops !";
            }
         }
}
//
/* Visualisation d'un document */
if (isset($_POST['visul'])) {
   $_SESSION['etat'] = "visualisation";
   $_SESSION['document'] = $_POST['liste'];
   if ( ! empty($_POST['liste'])) {
      echo '<form  style="background-color: grey; float: right;" name="Lecture" method="POST" action="'.$_SERVER['SCRIPT_NAME'].'">'."\n";
      echo '<input type="hidden" name="liste" value="'.$_POST['liste'].'">';
         echo '<div id="document" style="float: right; /*position: absolute;*/ background-color: black; color: red; top: 65px; left: 300px; width: 700px; max-height: 350px; overflow: auto; padding: 10px 20px; " >'."\n";
         document('Lecture', $Fichiers);
         echo "</div> \n";
         echo '   <input id="commG" type="submit" name="modif" value="Modifier">'."\n";
         echo '   <input id="commD" type="submit" name="fermer" value="Fermer">'."\n";
         echo "</form> \n";
   }
}
//
/* Modification d'un document */
   if (isset($_POST['modif'])) {
      $_SESSION['etat'] = "modification";
      $_SESSION['document'] = $_POST['liste'];
      if (isset($_SESSION['document'])) {
         $docAmodifier = document('liste', $Fichiers);
         $titre = selection("<h4><u>", "</u></h4>", $docAmodifier);
         $texteAmodifier = selection("<span>", "</span>", $docAmodifier);

         echo '<form style="float: right; background-color: lightgrey; " name="Lecture" method="POST" action="'.$_SERVER['SCRIPT_NAME'].'">'."\n";
         echo '<input type="input" name="titreAmod" value="'.$titre.'" readonly> <br>';
         echo '<textarea name="post" cols="80" rows="29">'."\n".$texteAmodifier."</textarea>\n</fieldset>\n";
         echo '   <input id="commG" type="submit" name="valider" value="Valider">'."\n";
         echo '   <input id="commD" type="submit" name="fermer" value="Annuler">'."\n";
         echo "</form> \n";
      } else {
      echo '- Modifier - N° document : '.$_POST['liste'].' - '.$_SESSION['document'];
      }
}
//
/* Annulation */
     if (isset($_POST['fermer'])) unset($_SESSION['etat'], $_SESSION['document']);
//
/* // Affichage de la liste // */
//
if ( ! isset($SESSION['etat'])) {
$_SESSION['etat'] = "liste";
  if ( $_SESION['etat'] = "liste" ) {
   echo '<form id="accueil" style="background-color: dimgrey;" name="accueil" action="'.$_SERVER['SCRIPT_NAME'].'" method="POST">'."\n";
   echo '   <select id="liste" name="liste" size="29">'."\n";
   echo '      <option value="" selected>Sélectionne un billet</option>'."\n";
   while (list($cle, $val) = each($Fichiers)) { 
      echo '      <option title="'.infobul($val['cheminFichier']).'" value="'.$val['id'].'">'."\n";
      echo '         &#8976; '.$val['titre']."\n";
      echo '      </option>'."\n";
   }
   echo '   <input class="commG" type="submit" name="visul" value="Afficher">'."\n";
   echo '   <input class="commD" type="submit" name="fermer" value="Régénérer">'."\n";
   echo "</form>\n";
  }
}

?>
Mais ça ne me plait pas : je trouve ça lourd...

Pourquoi cela ne fonctionnerait-il pas seulement avec les $_POST ?
0
Je ne dis pas que ça ne peut pas fonctionner avec $_POST, je dis simplement pour pour passer des variables d'une page à une autres, il y a les sessions, elles sont faites pour ça, alors que $_POST est destiné à récupérer les variables d'un formulaire.Maintenant, tous les mécanismes sont détournables pour arriver à ses fins. Je n'ai pas essayé de comprendre l'ensemble de ton script.
Mais je suis étonné de ne pas voir de session_start() (il est peut-être dans fonctions_blog.php ?)
mais aussi de voir $_SESSION écrit parfois $SESSION ou $_SESION
mais aussi du test if ( $_SESION['etat'] = "liste" ) ( = au lieu de == )
0
Utilisateur anonyme
25 mai 2009 à 15:04
le père à écrit :
"pour passer des variables d'une page à une autres, il y a les sessions"

Mais je ne me posais pas la question de faire ça sur plusieurs pages...
j'imaginais plutôt un seul formulaire qui se modifie, selon que certaines conditions sont remplies, et est mis à jour, si des modifications ont eu lieu tant sur la liste des fichiers que dans le contenu des fichiers.

session_start() est passé à travers la copie, et merci de me signaler mes coquilles.
0
Quand je dis d'une page à une autre, ça s'applique tout aussi bien à plusieurs appels de la même page !
Mais employer les sessions, n'est nullement une obligation. Je te l'avais suggéré parce que c'est plus simple d'affecter une variable que de créer un champ de formulaire hidden, et que les sessions offrent plus de possibilités que les champs hidden, mais le résultat devrait être le même. Ta version initiale marchait peut-être sans cette coquille de 'liste' et 'list'.
0
Utilisateur anonyme
27 mai 2009 à 19:22
J'ai fini par ne plus utiliser de `$_SESSION[]`, et au lieu d'avoir des `name=` différents pour chaque bouton de formulaires, il n'y en a plus qu'un : 'etat', qui prend des valeurs différentes.

Grosso modo :
if ($_POST['etat'] == "unEtat") {
   echo '<input name="etat" value="autreEtat">
   echo '<input name="etat" value="encore1autreEtat">
} elseif ($_POST['etat'] == "autreEtat") {
   echo '<input name="etat" value="unEtat">
   echo '<input name="etat" value="encore1autreEtat">
}

C'est encore un peu brouillon, mais ça fonctionne !
0