Problème avec include

Eléphant du PHP | 117 Messages

09 oct. 2005, 12:41

Bonjour,

Je vous soumets un jeux-test d'enchainement.
J'ai un cadre (conteneur) cadre.php que je lance en 1er.
Ce cadre est piloté par une feuille de style: css.css
Dans ce cadre, je fais appel par "include" à un traitement : enregistre.php qui lui même fait appel à un formulaire : form.php
Le traitement est logique et renvoie des réponses par des echos.

Mais ces echos sortent du cadre piloté par la feuille de style. Voila mon problème.
Comment faire pour que tout le traitement reste dans le cadre piloté par la feuille de style ?

Pour vous permettre de mieux comprendre voici le code de mon test:

cadre.php

Code : Tout sélectionner

<link rel="stylesheet" media="screen" type="text/css" title="essai" href="css.css" /> <div class="cadre"> <? include ("enregistre.php ");?> </div>
css.css

Code : Tout sélectionner

.cadre { width: 300px; height: 200px; padding-left: 50px; padding-right: 0px; padding-top: 50px; background-color: #eee; position: absolute; top: 50px; left: 300px; border:#000 solid 1px; color:green; }
enregistre.php

Code : Tout sélectionner

<? if (isset ($_POST['nom'])) {$nom= $_POST['nom'];} else{$nom="";} if ($nom!="secrêt") { include ("form.php"); echo $nom," mauvais mot"; } else { echo $nom ," trouvé"; } ?>
form.php

Code : Tout sélectionner

<form action="enregistre.php" method="post"> <b>Entrez le mot</b> <br> <input type="text" name="nom" value="NOM" /> <br> <input type="submit" value="Ok" /> </form>
Merci d'avance

Mammouth du PHP | 19672 Messages

09 oct. 2005, 13:06

Le problème vient peut-être des liens relatifs: essaye en mettant de chemins comme ceci:
include ("./enregistre.php ");
Y compris dans le href de ta balise <link> vers la feuille de style.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 117 Messages

09 oct. 2005, 14:46

Je viens d'essayer, mais cela n'y fait rien, toujour même mauvais résultat

Mammouth du PHP | 1776 Messages

09 oct. 2005, 15:30

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="stylesheet" media="screen" type="text/css" title="essai" href="css.css" /> 
<div class="cadre"> 
<? 
if (isset ($_POST['nom'])) {$nom= $_POST['nom'];} 
else{$nom="";} 

if ($nom!="secrêt") 
   { 
   include ("form.php"); 
   echo $nom," mauvais mot"; 
   } 
else 
   { 
   echo $nom ," trouvé";  
    } 
?>
</div>
</head>

<body>

</body>
</html>
Voilà ce que ca donne normalement, a savoir que le link est censé etre dans le head. Vu ton code ca reagit comme cela, ca affiche donc du texte en dehors du body... :?

Mammouth du PHP | 19672 Messages

09 oct. 2005, 15:42

Et les balises <body> ? C'est pour décorer ?

Voilà ce que j,ai fait et testé :
  1. cadre.php :
    <?php
    echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
    <title>Éléments imbriqués par include()</title>
    <link rel="stylesheet" media="screen" type="text/css" title="essai" href="./css.css" />
    </head>
    <body>
    <div class="cadre">
    <?php
    include ("./enregistre.php ");
    ?>
    </div>
    </body>
    </html>
    
  2. css.css:

    Code : Tout sélectionner

    .cadre { width: 300px; height: 200px; padding-left: 50px; padding-right: 0px; padding-top: 50px; background-color: #eee; position: absolute; top: 50px; left: 50%; margin-left: -150px; border:#000 solid 1px; color:green; }
  3. form.php :
    <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
    <b>Entrez le mot</b> <br>
    <input type="text" name="nom" value="NOM" /> <br>
    <input type="submit" value="Ok" />
    </form>
  4. enregistre.php :
    <?php
    $nom = isset($_POST['nom']) ? $_POST['nom'] : "";
    if ($nom!="secrêt")
    {
       include ("form.php");
       if(isset($_POST['nom']))
       {
           echo("<p>". $nom ." : mauvais mot</p>\n");
       }
    }
    else
    {
        echo("<p>".$nom ." trouvé</p>\n"); 
    }
    ?>
    
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 117 Messages

09 oct. 2005, 15:44

Excuse moi PRoGRaFLaSH

J'ai essayé ton code, car je n'ai pas compris ton explication.
Ton code aboutit au même dysfonctionnement que le mien

Que faut-il faire comme correction ?

Eléphant du PHP | 117 Messages

09 oct. 2005, 15:59

Cyrano, Merci !

J'ai rechargé ton code et il fonctionne.
Je n'ai pas encore compris la correction je vais analyser.
Tu as rajouté quelques trucs inhabituels pour moi

<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">

Merci beaucoup.

Mammouth du PHP | 1776 Messages

09 oct. 2005, 16:17

Excuse moi PRoGRaFLaSH

J'ai essayé ton code, car je n'ai pas compris ton explication.
Ton code aboutit au même dysfonctionnement que le mien

Que faut-il faire comme correction ?
Normal, c'est synthétiquement le tien ! :roll:
Le texte doit être placé dans un body et le link en head, d'où mon post :roll:
C'est d'ailleurs là dessus que j'attirais ton attention (et non ! ce n'était pas un code tout fait que je te donnais :lol: )

Mammouth du PHP | 19672 Messages

09 oct. 2005, 16:25

Tu as rajouté quelques trucs inhabituels pour moi
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
La super-globale $_SERVER contient quelques index pratiques, en particulier PHP_SELF : ce que j'ai mis fait recharger la page sur elle-même, ça permet à un bour de script de formulaire d'être utilisé sur n'importe quelle page. Mais tu peux remplacer par le nom de la page comme c'était avant et ça fonctionnera de la même manière.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: