8796 sujets

Développement web côté serveur, CMS

Pages :
Bonjour à tous,

Je n'y comprends rien. Je suis dans un script en PHP, sans un seul echo ".

Je vais inclure un doc pour avoir en mémoire la valeur de $msg. Il y a de nombreuses variables dans l'include, déjà déclarées et remplies par le document appelant, c'est pourquoi ce n'est pas un doc à part, "bonjour.php" par exemple sinon il me faudrait tout passer par $_SESSION ou par $_POST ou encore par $_GET et tout retraiter.

include ('../include/bonjour.php.inc' );

Et voilà l'include :


<?php

$msg = "
<HTML>
<BODY>
<TABLE border='1' bordercolor='$couleurTab'>
<TR>
<TD align='center' bgcolor='$couleurFond'>
<FONT class='font01'>Bonjour à tous</FONT></TD>
</TR>
</TABLE>
</BODY>
</HTML>";

?>


Et bien mon include s'affiche, c-a-d qu'il y a le tableau, ses couleurs, ses phrases, etc... Il me donne la valeur de la variable $msg. Je ne comprends pas pourquoi et je n'arrive pas a éviter cela.

Si vous aviez une idée.

D'avance, merci beaucoup.

Cordialement,

Whombat
Modifié par whombat (27 Aug 2010 - 13:36)
Salut,

whombat a écrit :
Je ne comprends pas pourquoi et je n'arrive pas a éviter cela.
Le contenu s'affiche parce qu'en nommant ta page bonjour.php.inc au lieu de bonjour.inc.php il est traité comme du simple texte et pas interprété.
Même si c'est un include ouvert et fermé par les balises <?php et ?> ?

Je vais essayer. Merci pour votre aide.

Si pour moi ça fonctionne, c'était bête comme chou mais je n'y aurai jamais pensé. J'étais sûr que les balises suffisaient. Surtout que le document appelant est un doc php.

J'y cours.
surtout pas.

Je fait include, et là se définit définitivement le contenu de la variable $mg et puis j'envoie le tout dans la fonction mail(). Il n'y a pas un seul echo.
Bon...

1) tu as bien renommé ta page bonjour.inc.php ?

2) tu as bien modifié ton include pour cibler cette page et pas l'ancienne ?

Si tu as répondu Oui à ces 2 questions je ne vois aucune raison pour que ça ne fonctionne pas.
J'ai bien répondu oui à ces 2 questions et ça ne fonctionne pas, c'est a dire qu'il m'affiche le contenu de la variable (alors que ça doit être transparent).

Je n'y comprends rien.
Est-ce que par hasard (juste pour rire) tu aurais supprimé les balises <?php et ?> de la page incluse ?
non, la page incluse se présente comme le script plus haut, avec les balises, comme d'ailleurs toutes mes pages incluses (qui sont en php.inc elles).
whombat a écrit :
comme d'ailleurs toutes mes pages incluses (qui sont en php.inc elles).
Alors comme je te disais plus haut et à moins que tu n'aies modifié le paramétrage par défaut les pages contenant du php nécessitent d'avoir l'extension .php pour qu'il soit interprété.

Sinon tu pourrais montrer le code de la page qui fait l'include ?
Merci de vous pencher sur mon problème, je n'y comprends vraiment rien.

Il s'agit d'un forum. Si celui qui a laissé le premier post a souhaité qu'on le prévienne par mail d'une éventuelle réponse :



                     if($email_reply != 0)   {

                         include ( '../forum/data/mailEnvoiForum.php' );

                         $headers  ='From: '.$noEMail.'<'.$emailserveur.'>'."\n";
                         $headers .='Reply-To:'.$emailserveur."\n";
                         $headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n"; 
                         $headers .='Content-Transfer-Encoding: 8bit'; 
                         $to       = $email01;
                         $sujet    = "Vous avez une réponse :";

                                             // ... on lui envoie donc ce mail

                         $rep1 = mail($to, $sujet, $leMessage, $headers);
                         ......................




$leMessage est donné par l'include, bien sûr, d'où son utilité.

L'include était '../forum/data/mailEnvoiForum.php.inc' avant notre échange de points de vue.

Et le code du script inclu est celui (abrégé mais exact) qui est affiché plus haut. Rien que de plus évident au demeurant, et pourtant...

Ceci étant dit, je dois m'absenter un moment mais je laisse mon lecteur de mail en attente.

Une chose aussi. Une façon de contourner le pb c'était de mettre tout dans une fonction mais, là aussi, il faudrait passer toutes les variables nécéssaires et leurs valeurs. Le plus simple et le plus rapîde a exécuter pour un script c'est bien l'include avec l'option de mettre un if (si c'est l'administrateur : possibilité de visionner le mail avant l'envoi, sinon envoi direct).
Modifié par whombat (27 Aug 2010 - 00:00)
Eh bien pour commencer : désolé d'avoir autant insisté alors que tu avais raison. Smiley confused

Les pages incluses n'ont pas à avoir l'extension .php mais seulement les balises <?php et ?>. Je fais comme cela depuis des années mais ça n'est pas pour que le php soit bien interprété mais pour protéger le code d'un éventuel curieux car avec l'extension .php elles n'apparaissent pas en clair.

Du coup je ne vois vraiment pas d'où peut venir le problème...

Je fais un petit test et je te dis...


Edit: bon ben je n'arrive pas à reproduire le phénomène chez moi... cela dit je suis un peu surpris par le code que tu donnes car il ne semble pas être en relation avec la page que tu inclus (nom de fichier différent / pas d'utilisation de $msg).
Modifié par Heyoan (27 Aug 2010 - 00:19)
Oui, $msg c'était pour l'exemple du post.

En fait la variable s'appelle $leMessage tout comme le véritable nom de la page incluse est 'mailEnvoiForum.php.inc' et non boujour.php.inc, nom donné pour l'exemple.

Le fait demeure que la variable ne devrait pas s'afficher...
Modifié par whombat (27 Aug 2010 - 01:36)
Tu as bien un contexte de debug sain ?
error_reporting(E_ALL) en premier lieu.

Tu as bien vérifié que l'echo venait de là, en tuant juste après (exit) ?
Pour l'error_reporting il est bien à E_ALL.

Le reste je n'ai pas compris. Il n'y a pas d'echo. Comment le tuer après ?

D'autre part, je viens (tant pis...) de passer par une function en me disant "_cette fois-ci, il ne va rien m'afficher..." Mauvaise pioche, il affiche quand même !

Pour la fonction, j'ai fait $leMessage = DonneLeMail($tableau);

J'avais chargé un tableau avec toutes les variables nécessaires au mail (au message). Dans la fonction j'ai rempli les variables avec les données du tableau puis j'ai fait :

function DonneLeMail($tableau)  {

$donnees = array();
$donnees = $tableau;

$pseudo = $donnees['pseudo'];
$titre = $donnees['titre'];
etc...

$msg = "<HTML><BODY>.... </BODY></HTML>";  // le complet comme on a vu plus haut

return $msg;

}


Il y a vraiment un truc bizarre...
Je te parle de tuer le script juste après la définition de $msg.


$msg = 'blabla';
// ob_end_clean(); // décommente, si ça s'affiche toujours
exit;

Modifié par Lpu8er (27 Aug 2010 - 02:27)
C'est ce que je viens de faire (en réfléchissant à ce que tu voulais dire).

J'ai mis un die(); après la 1ere ligne, RAS. Bon, j'ai mis un die(); après la seconde ligne, et ainsi de suite jusqu'à toucher du doigt l'endroit précis du pb.

J'ai trouvé... Mais je reste sur ma faim.

En effet, cela vient du lien. Je vous mets le bout de code.



$rep1 = mail($to, $sujet, $leMessage, $headers);   // on a déjà vu

if (isset($_SESSION["adminNom"]))  {

    echo "  $td En tant qu'administrateur, voulez-vous visionner le mail d'information qui 
    sera expédié au membre à l'origine du premier message ?
    <BR><BR>
    <FORM action='../forum/repondre.php?msg=$leMessage'>
    <INPUT type='submit' class 'boutonUn' value=\" Oui, je souhaite visionner l'eMail \">
    </FORM>";

 }



Le fait de mette $leMessage en Get dans le lien le fait afficher... Fou non ?
Modifié par whombat (27 Aug 2010 - 02:39)
... Non, ce qui le fait s'afficher, c'est l'echo.

$var = 'bcd';
echo "a{$var}"; // abcd
// on s'la refait ?
echo "a$var"; // abcd


C'était quoi ton objectif ? Passer du html complet en GET ? Si oui, urlencode, mais j'te préviens, ça sera très laid.
Je crois que je me suis mal exprimé :
Résumé des épisodes précédents ->

1) il n'y a pas d'echo, aucun
2) je ne veux pas que ça s'affiche
3) mon but c'est d'envoyer un email au créateur du premier message, dans le forum, s'il a souhaité être prévenu par mail. Pour cela j'utilise la fonction mail() pour laquelle je déclare, avant, les données $to, $sujet, $leMessage et $headers.
4) $to, $sujet et $headers sont remplies, reste plus que le corps du texte ($leMessage).
5) Pour $leMessage, je remplis cette variable avec toutes les lignes nécessaires pour en faire un doc HTML. exemple : $msg = "<HTML><BODY><TABLE align='center' bgcolor='$couleurFond'>;
$msg .= "<TR><TD.....</BODY></HTML>";
$leMessage = $msg;

Voilà.

C'est ce que tous les forums font, et on voit pas l'email fabriqué... C'est transparent. Pour moi, il y a une variante qui consiste, lorsqu'il s'agit d'un administrateur, à offrir l'option de visualiser avant ou pas. Et c'est justement là que mon script coince semble-t-il.

Si c'est ce que vous aviez compris, alors cette fois-ci c'est vous qui vous y collez. J'ai rien capté avec cette insistance que vous avez sur l'echo.
Modifié par whombat (27 Aug 2010 - 02:58)
Pages :