|
| Problemer med formmail Fra : anetteogjesper | Vist : 1419 gange 85 point Dato : 29-10-07 21:51 |
|
Jeg har fået et underligt problem med min formular. Når jeg trykker send får jeg denne besked:
Citat Warning: mail() expects at most 5 parameters, 7 given in /home/www/jesa-net.dk/assensbowling/formmail.php on line 42
Warning: Cannot modify header information - headers already sent by (output started at /home/www/jesa-net.dk/assensbowling/formmail.php:42) in /home/www/jesa-net.dk/assensbowling/formmail.php on line 47 |
Når min formular ser sådan ud:
Kode <?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[1] = "xx@xx.dk";
//$modtagere[1] = "";
// succes og fejlsider
$succes = "succes.html";
$fejl = "fejl.html";
// standard tesktbokse er
// navn
// adresse
// telefon
// 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 = "" . sanitize($_POST['emne']);
$navn = sanitize($_POST['navn']);
$adresse = sanitize($_POST['adresse']);
$telefon = sanitize($_POST['telefon']);
$emailadresse = $_POST['emailadresse'];
$besked = $_POST['besked'];
// send mail
$mail_status = mail($mail_modtagere, $emne, $besked, $emailadresse, $navn, $adresse, $telefon);
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;
}
?> |
men hvis jeg fjerner $navn, $adresse, $telefon ubder // send mail virker den fint, men jeg får bare ikke tilsendt alle informationer så og det funker jo ikke.
Hvad er der galt?
Og hvordan sikrer jeg mig personen der udfylder formularen udfylder feks. e-mail og skal udfylde visse felter for at gå vider?
| |
| Kommentar Fra : ajuul |
Dato : 29-10-07 22:01 |
|
Det er som fejl-meddelelsen siger: Du skal kun have fem parametre med i mail() og du har syv:
mail har formen:
Kode mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]] ) |
Hvis du vil have navn, adresse og telefonnummer med så lav f.eks. en linie, der hedder
Kode $besked .= " ".$navn." ".$adresse." ".$telefon; |
eller noget, der ser pænere ud, og kald så
Kode $mail_status = mail($mail_modtagere, $emne, $besked, $emailadresse); |
/ajuul
| |
|
Jeg er ikke helt med... Du kan ikke vise helt præsic hvordan den skal se ud?
| |
| Kommentar Fra : ajuul |
Dato : 29-10-07 22:13 |
|
Joda.
Du får den lange version:
Kode <?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[1] = "xx@xx.dk";
//$modtagere[1] = "";
// succes og fejlsider
$succes = "succes.html";
$fejl = "fejl.html";
// standard tesktbokse er
// navn
// adresse
// telefon
// 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 = "" . sanitize($_POST['emne']);
$navn = sanitize($_POST['navn']);
$adresse = sanitize($_POST['adresse']);
$telefon = sanitize($_POST['telefon']);
$emailadresse = $_POST['emailadresse'];
$besked = $_POST['besked']."\n\r"." ".$navn." ".$adresse." ".$telefon;
// 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;
}
?> |
/ajuul
| |
|
Nej... var det det
Hvordan får jeg det sat lidt pænere op, så det står ca. sådan
Navn: Anette
Adresse: Blyvej 666
OSV.?
Hvad nu hvis jeg vil bruge radio knapper?
Du kunne vel ikke hjælpe med hvordan jeg sikrer mig personen der udfylder formularen udfylder feks. e-mail og skal udfylde visse felter for at gå videre?
| |
| Accepteret svar Fra : ajuul | Modtaget 85 point Dato : 30-10-07 09:33 |
|
Det var mange spørgsmål (til 50 point ):
1) Stillet pænere op:
Så kan du ændre $besked-linien til:
Kode $besked = "Navn: ".$navn."\n\rAdresse: ".$adresse."\n\rTlf.: ".$telefon."\n\r".$_POST['besked']; |
Hvis det skal stå i HTML-format, kan \n\r udskiftes med <br />.
2) Radio-knapper:
HTML-koden kan se således ud på den side, der kalder formmail.php:
Kode Køn: Mand<input type="radio" value="Mand" name="Koen">Kvinde<input type="radio" name="Koen" value="Kvinde"> |
Og så skal du referere til værdierne som:
Kode $koen= $_POST['Koen']; |
(Husk, at der er forskel på store og små bogstaver i PHP. (altså $koen og $Koen er to forskellige variable).
3) Hvis du skal tjekke at visse felter er udfyldt kan du gøre det i javascript på siden, der kalder formmail.php; men det virker jo kun, hvis personens browser understøtter javascript (det gør nu heldigvis de fleste):
Submit-knappen skal have tilføjet følgende parameter:
Kode onclick="javascript:if(tjek()) { submit(); }" |
altså:
Kode <input type="button" value="Send" name="Send" onclick="javascript:if(tjek()) { submit(); }"> |
funktionen tjek() skal så stå øverst oppe et sted nær toppen af siden, der kalder formmail:
Kode <script type="text/javascript">
<!--
function tjek() {
if(document.mailform.navn.value=='') {
return false;
}
if(document.mailform.emailadresse.value=='') {
return false;
}
// etc
return true;
}
//-->
</script> |
".mailform." i koden udskiftes til navnet på din form ...
Det virker måske lidt uoverskueligt for en begynder (det ved jeg dog ikke om du er), men det er ikke så svært.
I PHP kan du også gøre det med sætninger som du placerer øverst oppe:
Kode if($_POST['emailadresse']=="") {
header("location: index.php"); // udskift navnet index.php med navnet på siden, der kalder formmail.php
}
if($_POST['navn']=="") {
header("location: index.php"); // udskift navnet index.php med navnet på siden, der kalder formmail.php
}
// ... etc ... |
Ulempen ved dette er, at de data, man rent faktisk *har* indtastet, forsvinder, og at man ikke umiddelbart kan skrive "Udfyld venligst navn" (osv.), med mindre man også programmerer lidt med cookies i siden, der kalder formmail.php.
| |
| Du har følgende muligheder | |
|
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.
Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
| |
|
|