/ Forside/ Teknologi / Udvikling / HTML / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
HTML
#NavnPoint
molokyle 11184
Klaudi 5506
bentjuul 3377
severino 2040
smorch 1950
strarup 1525
natmaden 1396
scootergr.. 1320
e.c 1150
10  miritdk 1110
Problemer med formmail
Fra : anetteogjesper
Vist : 1360 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

Kommentar
Fra : anetteogjesper


Dato : 29-10-07 22:08

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

Kommentar
Fra : anetteogjesper


Dato : 29-10-07 22:24

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.

Godkendelse af svar
Fra : anetteogjesper


Dato : 03-01-08 15:10

Tak for svaret ajuul.

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.
Søg
Reklame
Statistik
Spørgsmål : 177417
Tips : 31962
Nyheder : 719565
Indlæg : 6407865
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste