Avatar billede pstidsen Novice
21. april 2011 - 22:47 Der er 35 kommentarer og
1 løsning

Overføre name til mailform

Hvordan overfører man names til ens php mailform? Det lyder nok værkeligt at jeg vil det, men det er fordi jeg har en masse checkboxe og hvis der er en som er krydset af skal der i mailen til mig stå name og value, men i kopimailen skal der kun stå value. Er det muligt?

Skriv hvis i vil have noget kode!
Avatar billede repox Seniormester
21. april 2011 - 22:56 #1
Du kan jo bare iterere hen over dit $_POST array og trække nøgler og værdier ud?

<?php
foreach($_POST as $key => $value)
{
  $mail_body .= "$key: $value";
}
?>
Avatar billede pstidsen Novice
21. april 2011 - 23:07 #2
Jeg kan kun meget lidt php. Hvordan indsættes det her:
<?php
$hjemmeside = "morgenmusikken.dk";
$mail = "mail@hotmail.com";
$afsendermail = "kanikke@besvares.invalid";
$viderestil = "tak.html";

/* Her hentes oplysningerne fra de udfyldte felter */
$_POST["Melodi109"];
$Navne = $_REQUEST['Navne'] ;
$Til = $_REQUEST['Til'] ;
$Dag = $_REQUEST['Dag'] ;
$Dat = $_REQUEST['Dat'] ;
$Mdr = $_REQUEST['Mdr'] ;
$Aar = $_REQUEST['Aar'] ;
$Sangblade = $_REQUEST['Sangblade'] ;
$Kontakt = $_REQUEST['Kontakt'] ;
$epost = $_REQUEST['epost'] ;
$kopi = $_REQUEST['kopi'] ;
$egne_forslag = $_REQUEST['egne_forslag'] ;
$Relation = $_REQUEST['Relation'] ;
$Telefon = $_REQUEST['Telefon'] ;
$Melodi109 = $_REQUEST['Melodi109'];
$Melodi156 = $_REQUEST['Melodi156'];
$Melodi15 = $_REQUEST['Melodi15'];
$Melodi10 = $_REQUEST['Melodi10'];

$emne="Musikvalg vedr. $Dat $Mdr $Aar";

/* Her tjekkes, om afsenderen har indtastet sin mail-adresse, og i så fald bruges den som afsendeeradresse, så der kan svares på mailen */
if(!empty($epost)) {
  $headers="From: $Kontakt <$epost>\r\n";
}
else {
  $headers="From: $Kontakt <$epost>\r\n";
}

/* Her indsættes din mailadresse, så afsenderen kan svare på kopimailen */
$formularheaders="From: $hjemmeside <$afsendermail>\r\n";

/* Her samles afsenderens navn, mailadresse og besked i en enkelt variabel */
$oplysninger="Til: $Til
Dag: $Dag
Dat: $Dat
Mdr: $Mdr
Aar: $Aar
Ægteparrets navne: $Navne
$Melodi109 $Melodi156 $Melodi15 $Melodi10
Evt. ønsker: $egne_forslag
Hvem laver sangblade: $Sangblade
Navn: $Kontakt
Relation: $Relation
Email: $epost
Telefonnummer: $Telefon
Kopimail: $kopi";

/* Her samles oplysningerne til afsenderens kopi af mailen */
$kopimail="Hej $Kontakt\r\n
Du har sendt følgende via kontaktformularen på $hjemmeside:\r\n
Til: $Til
Dag: $Dag
Dat: $Dat
Mdr: $Mdr
Aar: $Aar
Ægteparrets navne: $Navne
$Melodi109 $Melodi156 $Melodi15 $Melodi10
Evt. ønsker: $egne_forslag
Hvem laver sangblade: $Sangblade
Navn: $Kontakt
Relation: $Relation
Email: $epost
Telefonnummer: $Telefon";

if ($kopi > '') {
  /* Her sendes til modtageradressen */
  mail($mail, $emne, $oplysninger, $headers);

  /* Her sendes en kopimail til afsenderen */
  mail($epost, $emne, $kopimail, $formularheaders);
}

else {
  /* Her sendes mailen til modtageradressen */
  mail($mail, $emne, $oplysninger, $headers);
}

/* Når mailen er sendt, viderestilles til denne hjemmeside */
header( "Location: $viderestil" );
?>


(det er 300-400 i alt)
Avatar billede repox Seniormester
21. april 2011 - 23:11 #3
Voldsomt - var det ikke bedre at samle det i en database? Nå, ikke lige emnet...

I stedet for:
/* Her samles afsenderens navn, mailadresse og besked i en enkelt variabel */
$oplysninger="Til: $Til...


kan du skrive:
/* Her samles afsenderens navn, mailadresse og besked i en enkelt variabel */
$oplysninger = ""; //erklæring af variablen
foreach($_POST as $key => $value)
  $oplysninger .= "$key: $value\n";
Avatar billede pstidsen Novice
21. april 2011 - 23:20 #4
Skal jeg ikke skrive REQUEST i stedet for POST??
/* Her hentes oplysningerne fra de udfyldte felter */
$_POST["Melodi109"];
POST var en test, jeg IKKE fik til at virke.
Avatar billede pstidsen Novice
21. april 2011 - 23:28 #5
jo det skal jeg...

Nu får jeg spyttet
realname:
recipient: kontor@morgenmusikken.dk
subject: Opfølgning
redirect: http://www.morgenmusikken.dk/svaret.htm[/div] i hovedet i mailen. Og det forstår jeg ikke hvor den får fra...
Avatar billede repox Seniormester
21. april 2011 - 23:31 #6
$_REQUEST er noget gris - noget rigtig, rigtig gris - som du straks bør holde op med!
Enten bruger du $_GET eller også bruger du $_POST... Det andet udgør en sikkerhedsrisiko når man forstår det bedre end du gør lige nu. Det er sandsynligvis fordi din formular anvender GET metoden (hvilket også er noget gris).
Avatar billede pstidsen Novice
21. april 2011 - 23:33 #7
Eksperten.dk har nogle bugs for tiden.... "i hovedet i mailen. Og det forstår jeg ikke hvor den får fra..." skulle ikke være ne del af [div]..

Kan jeg bestemme at den der foreach ikke skal gælde for nogle af elementerne?
Avatar billede pstidsen Novice
21. april 2011 - 23:34 #8
Skal jeg skifte alle REQUEST ud med POST ??
Avatar billede pstidsen Novice
21. april 2011 - 23:40 #9
ja det virker fint... Stadig: Kan jeg bestemme at den der foreach ikke skal gælde for nogle af elementerne? og #5.
Avatar billede repox Seniormester
21. april 2011 - 23:41 #10
Ja, du kan lave noget ala:

$ignore_array = array("redirect", "recipient", "indsæt selv andre navne");
foreach($_POST as $key => $value)
{
  if(in_array($key, $ignore_array))
    continue; //continue får en iteration til at hoppe videre fra det punkt du skriver det.

  $oplysninger .= "$key: $value\n";
}
Avatar billede pstidsen Novice
22. april 2011 - 00:08 #11
Lige en sidste: Kan jeg skrive noget som bare skal stå ÉN gang? F.eks. venlig hilsen osv.

smid svar! du har reddet mange timers arbejde ;)
Avatar billede repox Seniormester
22. april 2011 - 00:11 #12
Ja, du kan efter foreach-løkken bare tilføje tekst:
$oplysninger .= "\nMed venlig hilsen
osv...
";
Avatar billede pstidsen Novice
22. april 2011 - 00:12 #13
HOV! Der er da lige et problem, der hvor der IKKE skal stå names.

Der skal først stå noget hvor der skal være names og value, så skal der være noget uden names, og så igen noget med begge. Hvis det er et problem, kan jeg sagtens skrive det selv, men hvis jeg skriver noget i $oplysninger kommer foreach ikke med. Kan jeg gøre sådan?
Avatar billede pstidsen Novice
22. april 2011 - 00:17 #14
Tror jeg er ved at være for træt. Jeg kommer igen i aften...
Avatar billede repox Seniormester
22. april 2011 - 00:24 #15
Lyder som en god idé ;)
Avatar billede pstidsen Novice
22. april 2011 - 10:05 #16
Hvis du kan svare på #13 ville det være dejligt!

Smid også svar så du kan få dine point ;)
Avatar billede olsensweb.dk Ekspert
22. april 2011 - 15:43 #17
har du overvejet at overfører det som et array istedet ??

så istedet for at kalde dem Melodi_xxx

<input type="checkbox" name="Melodi_178" value="Dage som denne(Thomas Kjellerup.)"><b>Dage som denne</b><i> (Thomas Kjellerup.)</i><br />
<input type="checkbox" name="Melodi_350" value="Den blå anemone(Mogens Wieth.)"><b>Den blå anemone</b><i> (Mogens Wieth.)</i><br />
<input type="checkbox" name="Melodi_179" value="Den danske sommer(Ib Schønberg.)"><b>Den danske sommer</b><i> (Ib Schønberg.)</i><br />
<input type="checkbox" name="Melodi_180" value="Den er fin med kompasset"><b>Den er fin med kompasset</b><br />


kalder dem Melodi_uden_tekster[]

<input type="checkbox" name="Melodi_uden_tekster[]" value="Dage som denne(Thomas Kjellerup.)"><b>Dage som denne</b><i> (Thomas Kjellerup.)</i><br />
<input type="checkbox" name="Melodi_uden_tekster[]" value="Den blå anemone(Mogens Wieth.)"><b>Den blå anemone</b><i> (Mogens Wieth.)</i><br />
<input type="checkbox" name="Melodi_uden_tekster[]" value="Den danske sommer(Ib Schønberg.)"><b>Den danske sommer</b><i> (Ib Schønberg.)</i><br />
<input type="checkbox" name="Melodi_uden_tekster[]" value="Den er fin med kompasset"><b>Den er fin med kompasset</b><br />


det vil gøre testen nemmere, da du får dem som

[Melodi_uden_tekster] => Array
        (
            [0] => Den blå anemone(Mogens Wieth.)
            [1] => Den er fin med kompasset           
        )
       
istedet for;       
[Melodi_350] => Den blå anemone(Mogens Wieth.)
[Melodi_180] => Den er fin med kompasset

og som repox skriver bør titlerne ligge i en database, men så skal value bare ændres til titel id, sidst jeg løsligt talte var der 155 Melodier_med_tekster og 170 Melodier_uden_tekster.
Avatar billede pstidsen Novice
22. april 2011 - 19:18 #18
jeg gider ikke lave det til en database. Jeg har ikke overvejet at overføre som array. Det vil IKKE være en god idé! Da det vil medføre ekstra arbejde med at slå melodierne op ;)
Avatar billede pstidsen Novice
22. april 2011 - 22:50 #19
#12: det kan man jo ikke i et foreach loop. Som navnet siger foreach. Altså kommer det til at stå hele tiden ;) Det skal jo kun stå én gang. Kan man det?

#13?????????????
Avatar billede repox Seniormester
22. april 2011 - 22:50 #20
Jeg er ikke sikker på jeg forstår hvad det er du vil i #13?
Avatar billede pstidsen Novice
22. april 2011 - 23:03 #21
Så skal jeg meget gerne forklare det igen:

I den mail til mig skal der både være $key ($name) og $value. Det virker fint!

Problemet opstår i kopimailen hvor melodiernes name IKKE skal med over. Det skal de andre dog.

"De andre" er 12 ting og jeg har allerede det her:
Til: $Til
Dag: $Dag
Dat: $Dat
Mdr: $Mdr
Aar: $Aar
Ægteparrets navne: $Navne
[MELODIER HER]
Evt. ønsker: $egne_forslag
Hvem laver sangblade: $Sangblade
Navn: $Kontakt
Relation: $Relation
Email: $epost
Telefonnummer: $Telefon
(ved ikke om det hjælper noget...)

Jeg har prøvet at ignore dem, men hvis jeg skriver noget
/* Her samles afsenderens navn, mailadresse og besked i en enkelt variabel */
$oplysninger="HER!!!!";
kommer det fra foreach loopet ikke med.

Hvordan kan både tage det med som jeg skriver
/* Her samles afsenderens navn, mailadresse og besked i en enkelt variabel */
$oplysninger="HER!!!!";
og det foreach loopet laver??

Håber det er til at forstå :)
Avatar billede repox Seniormester
22. april 2011 - 23:07 #22
Det kræver nok lige at jeg ser hele kildekoden igen (og gør os en tjeneste med så meget kode - brug pastebin).
Avatar billede pstidsen Novice
22. april 2011 - 23:10 #23
Avatar billede repox Seniormester
23. april 2011 - 10:11 #24
Hvis du på linie 31 eller 44, indskriver tekst i variablen, bør foreach-løkken bagefter stadig bare tilføje dine felter til variablen - men det siger du den ikke gør?
Avatar billede pstidsen Novice
23. april 2011 - 10:24 #25
det forstår jeg ikke, syens jeg har prøvet det, men det virker :)
Avatar billede pstidsen Novice
23. april 2011 - 10:28 #26
Det ville være bedst hvis jeg også kunne tilføje min egen tekst EFTER foreach loopet. Er det muligt?
Avatar billede pstidsen Novice
23. april 2011 - 11:09 #27
Hvorfor gider den nu ikke at acceptere $ignore_array?? Den smider value i mailen...
$kopimail="Du har indsendt følgende til morgenmusikken.dk:
Til: $Til";
$ignore_array = array("redirect", "recipient", "subject", "realname", "realname", "email", "Til");
foreach($_POST as $value)
{
  if(in_array($key, $ignore_array))
    continue; //continue får en iteration til at hoppe videre fra det punkt du skriver det.

  $kopimail .= "$value\n";
}


(hele koden: http://pastebin.com/nhwL5dAW)
Avatar billede repox Seniormester
23. april 2011 - 11:53 #28
Fordi din foreach er skrevet forkert.

Der skal stå
foreach($_POST as $key => $value)
istedet for
foreach($_POST as $value)
Avatar billede pstidsen Novice
23. april 2011 - 11:56 #29
Nej for ved kopimailen skal den jo netop ikke overføre name (er det ikke det samme som $key??)
Avatar billede repox Seniormester
23. april 2011 - 12:06 #30
Jo, men så vil dit ignore_array jo ikke virke, da den ikke kan tjekke på $key.
Avatar billede pstidsen Novice
23. april 2011 - 12:20 #31
Okay nu tager vi den lige ned til nulpunktet:

Mail til mig virker super!

Kopimail:

er det muligt at få den til at se sådan her ud:
Hej $Kontakt\r\n
Du har sendt følgende via kontaktformularen på $hjemmeside:\r\n
Til: $Til\r
Dag: $Dag\r
Dat: $Dat\r
Mdr: $Mdr\r
Aar: $Aar\r
Ægteparrets navne: $Navne\r
[ALLE MELODIERNE UDEN NAMES SKAL STÅ HER. HVIS DE IKKE KAN DET SÅ BARE TIL SIDST]\r
Evt. ønsker: $Ønsker\r
Hvem laver sangblade: $Sangblade\r
Navn: $Kontakt\r
Relation: $Relation\r
Email: $Email\r
Telefonnummer: $Telefon\r

Hvis du ikke har nogle gode idéer må jeg droppe det ;)
Avatar billede pstidsen Novice
23. april 2011 - 12:39 #32
...ellers smid svar repox. Du har hjulpet meget! :)
Avatar billede repox Seniormester
23. april 2011 - 19:57 #33
Hvordan ser melodi arrayet ud, da?
Er det også bare et have af single index names fra HTML formen?
Avatar billede pstidsen Novice
23. april 2011 - 20:35 #34
Det er ja bare en 3-400 af
<input type="checkbox" value="Det er hvidt herude." name="Melodi 299">
Avatar billede pstidsen Novice
24. april 2011 - 20:20 #35
Det er lige meget, du ;)

SMID SVAR!!
Avatar billede pstidsen Novice
28. april 2011 - 19:46 #36
Nu synes jeg snart at jeg har skrevet mange gange om at du skal smide svar, repox. Hvis du ikke har lagt svar om et par dage, lukker jeg og tager dem selv.
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