Mailer probleme d'un lien ...

Eléphanteau du PHP | 31 Messages

27 juin 2006, 11:35

Salut à tous

Voila j'ai un script pour me contacter sous la forme d'un formulaire...

Tout fonctionne bien, le mail s'envoi...etc mais une fois que le mail est envoyé une nouvelle fenêtre apparait disant "le message a bien été envoyé", et un lien : envoyer un autre message, et c'est sur ce lien que j'ai un probleme, quand je clique dessus pour renvoyer un message, je reviens à ma page d'accueil index.php alors que mon formulaire est sur index.php?page=contact ... en fait c'est un probleme de "redirection un truc dans le genre, il me semble que ce n'est pas tres compliqué mais j'ai essayé pas mal de choses et je n'y arrive pas, donc si quelqu'un veut bien me filer un pti coup de main ;)

La partie concernée :

Code : Tout sélectionner

// mail envoyé echo "Votre message a été envoyé.<br />\n"; echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Envoyer un autre message...</a>\n"; } else { // erreur lors de l'envoi du mail echo "Un problème s'est produit lors de l'envoi du message.\n"; echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a>\n"; } } ?>
C'est exactement cette partie la qui me pose soucis :

Code : Tout sélectionner

<a href=\"".$_SERVER["PHP_SELF"]."\">
J'utilise les pseudo frame donc pour le formulaire plus haut j'ai mis :

Code : Tout sélectionner

<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>?page=contact">
Merçi !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 juin 2006, 11:41

La variable $_SERVER["PHP_SELF"] correspond au chemin et au nom du script courrant, mais ne prend pas en compte les paramètres passées en get ou post qui ont permis de l'ouvrir... en gros, comme tu le fais dans le formulaire, il te faut préciser dans le lien les paramètres permettant d'accéder à ta page au travers de la pseudo frame :)
<a href="<?php echo $_SERVER["PHP_SELF"]; ?>?page=contact">

Eléphanteau du PHP | 31 Messages

27 juin 2006, 11:46

merci pour la reponse rapide ! :) je débute en php, et ce n'est pas toujours evident de comprendre la bêêête :D

Alors j'ai mis ça :

Code : Tout sélectionner

echo "Votre message a été envoyé.<br />\n"; echo "<a href="<?php echo $_SERVER["PHP_SELF"]; ?>?page=contact">Envoyer un autre message...</a>\n";
Mais maintenant ça me dit sur mon site :
Parse error: parse error, unexpected '?' in /var/www/sdb/2/c/bhsoh/test.php on line 89
:roll: Une solution ?

Merçi ;)

Mammouth du PHP | 1353 Messages

27 juin 2006, 11:48

si tu mets ton code entre des balises php tu devrais voir les problemes toi même :)
echo "Votre message a été envoyé.<br />\n"; 
                echo "<a href="<?php echo $_SERVER["PHP_SELF"]; ?>?page=test">Envoyer un autre message...</a>\n";
Indices pour la résolution :
. si tu es dans un echo tu dois deja entre entre des balises php je suppose
. n oublie pas que " peut etre considéré comme la fin de la chaine du echo (un /" peut etre une solution)
. pour concaténer une chaine il faut utiliser le . entre les deux (exemple
echo "truc"." bidule";
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 31 Messages

27 juin 2006, 11:52

Et bien ce n'est pas que je veux pas, je cherche pourtant mais je trouve pas :? j'y suis depuis une heure la :lol:

;) le php en autodidacte ça fait mal !

Mammouth du PHP | 1353 Messages

27 juin 2006, 11:54

. si tu es dans un echo tu dois deja entre entre des balises php je suppose
. n oublie pas que " peut etre considéré comme la fin de la chaine du echo (un /" peut etre une solution)
. pour concaténer une chaine il faut utiliser le . entre les deux (exemple PHP:
echo "truc"." bidule";
Fais voir ta nouvelle syntaxe avec ces éléments pris en compte stp
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 31 Messages

27 juin 2006, 11:57

trop mal au crâne ! :D voila le code :

Code : Tout sélectionner

// mail envoyé echo "Votre message a été envoyé.<br />\n"; echo "<a href="<?php echo $_SERVER["PHP_SELF"]; ?>?page=test">Envoyer un autre message...</a>\n"; }
Je vais prendre un aspirine, merçi ! :lol:

La solution serait un point ? :roll:

Parce que j'ai essayé de mettre un / a # endroits mais ca ne fonctionne toujours pas...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 juin 2006, 12:05

Si tu fais un echo, c'est que tu es en train de faire du php, les balises <?php echo ... ?> pour inclure du php dans ton code html ne sont donc pas justifiées vu que tu es déjà en php :)

Il te faut effectivement distinguer ce qui est chaine de texte (autour desquelles tu mets des guillemets) et instructions php que tu sors de la chaine, en concatenant tout ça avec des points :)

Eléphanteau du PHP | 31 Messages

27 juin 2006, 12:16

Merçi de maider en tout cas c'est sympa ;)

Code : Tout sélectionner

if (@mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){ // mail envoyé echo "Votre message a été envoyé.<br />\n"; echo "<a href="$_SERVER["PHP_SELF"];?page=test">Envoyer un autre message...</a>\n"; }
Je suis proche du but ? :roll:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 juin 2006, 12:28

Pas loin, pas loin :)

La meilleure solution c'est de partir dans l'autre sens : qu'est ce qu'il te faut obtenir en sortie (donc en code html) et comment le générer avec php :)

Ton lien au final doit ressembler à ça :

Code : Tout sélectionner

<a href="http://.../index.php?page=test">Envoyer un autre message...</a>
il suffit donc en php de faire
echo '<a href="http://.../index.php?page=test">Envoyer un autre message...</a>';
Attention, si tu mets des guillemets autour, il faut penser à proteger celles qui sont dans ta chaine)

là dedans, pour le rendre dynamique, tu dois remplacer "http://.../index.php" par $_SERVER["PHP_SELF"]. Il te faut donc couper la chaine et insérer ta variable php en la concaténant aux deux chaines que tu auras obtenu avec des points (.)

à toi ;)

Eléphanteau du PHP | 31 Messages

27 juin 2006, 12:46

Code : Tout sélectionner

echo "<a href=".$_SERVER["PHP_SELF"]?page=test".>Envoyer un autre message...</a>\n";
Arff ! compliqué :lol:

Déjé j'ai l'impression que " et ' ça change pas mal de choses :

genre j'ai mis echo ' au lieu de " et la mon formulaire s'affiche mais bon toujours le même probleme

Code : Tout sélectionner

echo "<a href=\"".$_SERVER["PHP_SELF"]?page=test".">Envoyer un autre message...</a>\n";
Aillaiiiillleaiiil :lol:

Eléphanteau du PHP | 31 Messages

27 juin 2006, 13:22

Désolé je n'y arrive pas, j'essai encore un peu et je laisse tomber car je n'ai plus beaucoup de temps malheureusement ...

Merçi du coup de main en tout cas, j'ai failli reussir on dira :cry:

php c'est puissant mais pas facile :lol:

Merçi ;)

Mammouth du PHP | 1353 Messages

27 juin 2006, 13:31

Tu es pas loin...
echo "<a href=\"".$_SERVER["PHP_SELF"]?page=test".">Envoyer un autre message...</a>\n"; 
$SERVER["PHP_SELF"] c'est une variable mais ?page=test c'est du texte...
Il te suffit de concaténer ca comme du texte... Si tu fais ta concaténation juste après le ] tu y es ! :D
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 31 Messages

27 juin 2006, 13:39

et bien test c'est : 'test' => 'test.php'

Et comment qu'on fait pour concatainer du texte ou une page php ... :lol: je vais encore fouiner un peu sur les tuto pour voir

J'ai fait ça mais toujours pas :

Code : Tout sélectionner

echo "<a href=\"".$_SERVER["PHP_SELF"]."?page=test".">Envoyer un autre message...</a>n";

Mammouth du PHP | 1353 Messages

27 juin 2006, 13:43

et bien test c'est : 'test' => 'test.php'
:shock:
Je ne comprend pas.

Ce que j ai voulu dire c'est que la tu n'as pas mis ?page=test dans la chaine, tu l as laissé collé a la variable sans concaténer.

Ce que l on appelle concaténation c le fait de coller plusieurs bout de chaines ensemble, par exemple si je fais
$var = "Bonjour ".$nom.", bienvenue !";
je concatène 3 chaines... C'est ce que tu as fait pour concaténer le début de ta chaine avec le $_SERVER["PHP_SELF"];
Tell me and I forget. Teach me and I remember. Involve me and I learn.