OVH Community, votre nouvel espace communautaire.

Passage à la ligne dans un formulaire


Heartless
14/11/2006, 13h56
Ok, je vais corriger ça, merci !

Homer Jay
14/11/2006, 13h49
Citation Envoyé par Daniel60
Essayez comme ça :
Code PHP:
header('Location: ../contact_erreur.html'); //page sur laquelle on redirige le visiteur s'il n'a pas rempli un des champs ci dessus 
En passant, c'est incorrect de mettre Location avec une adresse relative. Il faut calculer une adresse absolue.

Heartless
14/11/2006, 12h40
Citation Envoyé par Gagar
Entre nl2br, striptags et str_replace, j'ai l'impression que c'est un peu l'usine à gaz...

Je suis plutot d'accord avec Daniel sur le fait qu'envoyer les mails en texte serait plus simple. De toute façon, l'intérêt de l'html pour un message texte pur et limité.

PS: je mettrais aussi plutôt 'Content-Transfer-Encoding: 8bit'
C'est pas grave, ça ! Du moment que j'ai le rendu souhaité, ça me va ! lol

C'est quoi la différence entre 7 et 8bit ? <_<

Gagar
14/11/2006, 12h37
Entre nl2br, striptags et str_replace, j'ai l'impression que c'est un peu l'usine à gaz...

Je suis plutot d'accord avec Daniel sur le fait qu'envoyer les mails en texte serait plus simple. De toute façon, l'intérêt de l'html pour un message texte pur et limité.

PS: je mettrais aussi plutôt 'Content-Transfer-Encoding: 8bit'

Heartless
14/11/2006, 11h50
Mais là c'est bon, tout fonctionne ! ^^

le problème avec htmlentities, c'est qu'il annule bien les balises mais les laisse visibles, donc pour la lecture, c'est plutôt gênant ! =/

là, avec strip_tags, elles sont carrément supprimées ! ^^

Daniel60
14/11/2006, 11h48
Comment voulez-vous que le texte inclus dans le document html s'affiche comme vous le souhaitez si le texte final ne comporte pas au moins des balises de retour à la ligne ? Dans la solution que je vous propose les balises éventuelles ont déjà été retirés avant que les
soient ajoutés.

Heartless
14/11/2006, 11h44
ouiiiiiiiiiiiii !!!!!!!!! Je viens de réussir !!!

merci grandement à gilouse et son strip_tags !!!!!!! ^^

voilà le code pour ceux qui en auraient besoin à l'avenir !

Code PHP:
$auteur trim(stripslashes($_POST['auteur']));
$email trim(stripslashes($_POST['email']));
$sujet trim(stripslashes($_POST['sujet']));
// --- On désactive les balises html entrées par le visiteur
$texte stripslashes(strip_tags(nl2br($_POST['message'])));

$message '
                
                
                    E-mail via le site
                
                
                
                        Bonjour,
                        un visiteur du site a utilisé le formulaire de contact pour vous envoyer le message suivant :
                        --------------------------------------------------
                        Sujet: '
.$sujet.'
                        Message: '
.str_replace("\r\n","",$texte).'
                        
                
                
            '
;

$headers 'Reply-To: '.$auteur.'\n';
$headers .= 'Content-Type: text/html; charset=\'iso-8859-1\'\n';
$headers .= 'Content-Transfer-Encoding: 7bit\n\n';

if (
$auteur == '' OR $email == '' OR $sujet == '' OR $message == ''
{
header('Location: ../contact_erreur.html'); //page sur laquelle on redirige le visiteur s'il n'a pas rempli un des champs ci dessus
exit();
}
else
{
mail($email$sujet$message'From:<'.$auteur.'>',$headers);
header('Location: ../contact_ok.html'); //page sur laquelle on redirige le visiteur si le formulaire est complet
}
?>
ça fonctionne très bien, les retours à la ligne sont pris en compte et les balises entrées sont effacées ! voici un screen du résultat !

http://img155.imageshack.us/img155/8440/hbtytnpi0.png ^^

et merci aussi à tous ceux qui ont essayé de m'aider !

Heartless
14/11/2006, 11h32
en fait, ce que j'aimerais, c'est obtenir ceci :

Bonjour,
un visiteur du site a utilisé le formulaire de contact pour vous envoyer le message suivant :
--------------------------------------------------
Sujet: Paiement en ligne
Message: première ligne
deuxième ligne
troisième ligne

je souhaite donc que les retours à la ligne comptent et que le html () mette en forme ce qui est autour du message du visiteur, mais que les balises entrées par le visiteur ne soient pas interprêtées !

c'est hard, je sais ! XD
De mon point de vue, la solution serait d'interdire le html uniquement pour $texte sans pour autant empêcher le retour à la ligne de fonctionner...

mais si vraiment c'est trop compliqué... =/

Daniel60
14/11/2006, 10h11
Bonjour,
Après différents essais nl2br() fonctionne bien !
Mais il faut procéder en deux temps :
$texte = trim(stripslashes(htmlentities($_POST['message'])));
$texte = nl2br($texte);
$message = ".....
On obtient ceci comme texte de message :



E-mail d''un visiteur



Bonjour,

un visiteur du site utilisé le formulaire de contact pour vous envoyer le message suivant :

--------------------------------------------------


Sujet: Paiement en ligne

Message:première ligne

deuxième ligne

troisième ligne




J'espère que c'est ce que vous souhaitez car moi je ne vois pas trop à quoi ça sert de mettre des emails en html

gilouse
14/11/2006, 10h06
je suppose que le message est entré par l'utilisateur dans un champ TEXTAREA.

comme tu fais un trim sur $texte, toutes les passages à la ligne sont supprimés.

à la place de faire un trim, tu devrais remplacer les \n par des BR de manière à conserver la mise en page initiale dans ta sortie HTML.

$texte=str_replace("\n","
",$texte);

à faire après stripslashes() bien sûr.

ceci dit, j'utiliserais plutot strip_tags() au lieu de stripslashes() pour supprimer totalement les tags HTML.

Heartless
13/11/2006, 17h46
ben c'est la page qui contient ce code <_<

Daniel60
13/11/2006, 17h44
C'est comment email.php ?

Heartless
13/11/2006, 17h35
hm malheureusement ça ne traite pas l'email, ça me mène sur la page email.php et c'est une page blanche =/

Daniel60
13/11/2006, 17h28
Essayez comme ça :
Code PHP:
$auteur trim(stripslashes($_POST['auteur']));
$email trim(stripslashes($_POST['email']));
// --- On désactive les balises html entrées par le visiteur
$sujet trim(stripslashes(htmlentities($_POST['sujet'])));
$texte stripslashes(htmlentities($_POST['message']));

$message '
                
                
                    E-mail d''un visiteur
                
                
                
                        Bonjour,
                        un visiteur du site utilisé le formulaire de contact pour vous envoyer le message suivant :
                        --------------------------------------------------
                        Sujet: '
.$sujet.'
                        Message: '
.$texte.'
                        
                
                
            '
;

$headers 'Reply-To: '.$auteur.'\n';
$headers .= 'Content-Type: text/plain; charset=\'iso-8859-1\'\n';
$headers .= 'Content-Transfer-Encoding: 7bit\n\n';

if (
$auteur == '' OR $email == '' OR $sujet == '' OR $message == ''
{
header('Location: ../contact_erreur.html'); //page sur laquelle on redirige le visiteur s'il n'a pas rempli un des champs ci dessus
exit();
}
else
{
mail($email$sujet$message'From:<'.$auteur.'>',$headers);
header('Location: ../contact_ok.html'); //page sur laquelle on redirige le visiteur si le formulaire est complet
}
?>

Heartless
13/11/2006, 14h53
bon alors j'ai essayé les deux méthodes et aucune ne fonctionne, peut-être que je m'y suis mal pris... =/

si quelqu'un pouvait faire les modifs pour moi, ça m'aiderait beaucoup !!!
merci d'avance ! ^^

Daniel60
12/11/2006, 20h42
Donc, le HTML étant désactivé - et c'est une bonne mesure - le message est interprété comme un fichier texte. Dans ce cas les retours à la ligne devraient normalement être pris en compte.
Ceci sera fait si vous essayer de retirer la fonction trim() qui efface les \n.
Voilà

Heartless
12/11/2006, 20h38
Citation Envoyé par Gagar
As-tu essayé de faire: replace("\r\n", "
") ?
ah ça doit marcher alors ! ^^ merci !

Citation Envoyé par Gagar
Sinon, pourquoi ne pas formater le texte en plain text au lieu d'html?
Comme ça tu aurais les \r\n interprétés correctement sans traitement.
ah et ça ça permettrait de ne pas faire fonctionner le html dns le message mais de représenter tout de même les retours à la ligne ? 8D c'est génial !!!

merci merci ! ^^

Gagar
12/11/2006, 20h33
As-tu essayé de faire: replace("\r\n", "
") ?

Sinon, pourquoi ne pas formater le texte en plain text au lieu d'html?
Comme ça tu aurais les \r\n interprétés correctement sans traitement.

Heartless
12/11/2006, 20h29
je ne veux pas qu'il y ait un retour à chaque ligne !
Si le visiteur tape par exemple :
Code:
coucou, je suis un visiteur !

comment ça va ?
(c'est un exemple XD)

Je veux donc que les retour à la ligne qu'il a inséré entre coucou, je suis un visiteur ! et comment ça va ? soient interprêtés dans la lecture de l'e-mail et ce n'est pas le cas actuellement (puisque j'ai désactivé le html) !
lorsque je lis les emails envoyés, il y a écrit coucou, je suis un visiteur !

comment ça va ?
!

sinon j'aimerais savoir si un remplacement de tous les
par \n (et \r pour certains) via str_replace() en php fonctionnerait... <_<

Daniel60
12/11/2006, 18h36
Bonjour,
Vous avez certainement d'excellentes raisons pour cela, mais à quoi cela peut servir de mettre un retour à chaque ligne ? En principe, c'est utilisé pour marquer les paragraphes et c'est généralement bien traduit dans Outlook par 0D 0A dans les messages envoyés par mail().

Heartless
12/11/2006, 18h01
je vois mal les visiteurs écrire à chaque fois \n à la fin de chaque ligne dans leurs messages... =/

Bon alors si ça ne peut pas fonctionner, y'a-t-il un moyen de n'autoriser que quelques balises ne particulier (et non pas interdire certaines) ?

Abogil
11/11/2006, 14h46
Je pense qu'il faut mettre " \n " à la fin de chaque ligne.

Gagar
11/11/2006, 14h12
Disons que la fonction est faite pour le html:

nl2br

(PHP 3, PHP 4, PHP 5)
nl2br -- Inserts HTML line breaks before all newlines in a string
Description
string nl2br ( string string )

Returns string with '
' inserted before all newlines.


Donc a priori ça ne marchera jamais...

Heartless
09/11/2006, 16h01
Bonjour,

J'ai installé sur mon site un formulaire de contact pour que les visiteurs puissent nous écrire, à moi et aux autres membres de l'équipe.

J'ai bien sûr désactivé html dedans pour des raisons de sécurité, mais j'aimerais que le passage à la ligne soit interprêté avec la fonction nl2br()...

Voici mon code et, pour ceux qui pourraient m'aider, merci d'avance !

Code:

				
				
					E-mail d'un visiteur
				
				
				
						Bonjour,
un visiteur du site utilisé le formulaire de contact pour vous envoyer le message suivant :
--------------------------------------------------

Sujet: '.$sujet.'
Message: '.$message.'
'; $headers = 'Reply-To: '.$auteur.'\n'; $headers .= 'Content-Type: text/html; charset=\'iso-8859-1\'\n'; $headers .= 'Content-Transfer-Encoding: 7bit\n\n'; if ($auteur == '' OR $email == '' OR $sujet == '' OR $message == '') { header('Location: ../contact_erreur.html'); //page sur laquelle on redirige le visiteur s'il n'a pas rempli un des champs ci dessus exit(); } else { mail($email, $sujet, $message, 'From:<'.$auteur.'>',$headers); header('Location: ../contact_ok.html'); //page sur laquelle on redirige le visiteur si le formulaire est complet } ?>