Avatar billede jpi Mester
14. oktober 2009 - 22:46 Der er 5 kommentarer og
1 løsning

Formmail - hurtig hjælp

Hej

Jeg skal konvertere en formmail fra et windows-site (ASP) til et linux-site (PHP).
Jeg har kopieret det meste fra nogle supportsider hos udbyderen, men jeg har et problem.

Et par af felterne har mulighed for flere linier tekst, og alt hvad der bliver indtastet efter det første linieskift kommer ikke med i mailen.
Det har noget med funktionen sanitize at gøre, men da jeg ikke lige kan gennemskue hvad den gør kan jeg ikke fikse det.

Hvad skal der ændres for at hele teksten kommer med ? Og går ændringen ud over noget andet ?


Her er koden:

<?php

// Surftown formmail

// angiv modtagere af formmailen
// flere modtagere kan tilføjes som
// $modtagere[1] = "adresse@domain.dk"
// $modtagere[2] = "adresse2@domain.dk"
// osv.
$modtagere[0] = "";
//$modtagere[1] = "";

// succes og fejlsider
$succes = "succes.htm";
$fejl = "fejl.htm";

// standard tesktbokse er
// navn
// emailadresse
// emne
// besked

// disse skal være "name" på de forskellige tekstbokse på html-siden
// f.eks. <input type="text" name="navn"></input>

// lav liste over modtagere
$mail_modtagere = implode(",", $modtagere);

// klargør parametre
$navn = sanitize($_POST['navn']);
$emailadresse = "From: " . sanitize($_POST['emailadresse']);
$emne = "Besked fra " . $navn . ": " . sanitize($_POST['emne']);
$besked = $_POST['besked'];

// send mail
$mail_status = mail($mail_modtagere, $emne, $besked, $emailadresse);

if ($mail_status) {
header("Location: " . $succes);
} else {
header("Location: " . $fejl);
}

function sanitize($data) {
$safe_data = $data;

if ($pos = strpos($safe_data, "\n")) {
$safe_data = substr($safe_data, 0, $pos-1);
}
if ($pos = strpos($safe_data, "\r")) {
$safe_data = substr($safe_data, 0, $pos-1);
}
return $safe_data;
}
?>
Avatar billede nissen2630 Novice
14. oktober 2009 - 22:52 #1
For mig at se smider sanitize() alt efter /n/r direkte i skraldespanden.
Avatar billede jpi Mester
14. oktober 2009 - 23:04 #2
Og hvad er lige /n/r, og hvad skal det sanitize gør gøre godt for ?

Har aldrig skrevet en linie php :-)
Avatar billede nissen2630 Novice
14. oktober 2009 - 23:09 #3
/r/n = CR LF

Så det den gør er at fjerne alt indhold efter et af disse tegn.
Det gør at den kun sender til en mail adresse.

-Hvis der er flere linier i feltet skal det splittes op.
Men så stiv er jeg ikke i PHP
Avatar billede jpi Mester
14. oktober 2009 - 23:11 #4
Argh... Kan godt se nu at man ikke skal bruge sanitize() på større felter der kan indeholde linieskift...

Jeg var nok lige hurtig nok...
Avatar billede jpi Mester
14. oktober 2009 - 23:12 #5
Læg et svar, så får du point...
Avatar billede nissen2630 Novice
14. oktober 2009 - 23:17 #6
svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester