|
| Kontaktformular med selvvalgt modtager Fra : tp6100 | Vist : 780 gange 150 point Dato : 05-06-10 20:55 |
|
Hej,
Jeg har netop overtaget en hjemmeside med en kontaktformular, som jeg nu godt kunne tænke mig at lave om på, så brugere har muligheden for selv at vælge modtageren (Jens, Birthe, Hans - 6 i alt) af beskeden i en drop-down menu.
Jeg er bestemt ikke ekspert på området, og må læse diverse guides og tutorials for at løse problemer på siden hen ad vejen. Jeg har dog ikke kunnet finde en god løsning på denne udfordring.
Jeg har i første omgang tilføjet følgende stykke kode til kontaktformularen:
Kode <label for="t4">Vælg modtager: </label>
<select name="recipient" size="1">
<option value="1">Jens</option>
<option value="2">Birthe</option>
<option value="3">Hans</option>
</select> |
Dernæst skal der så i tilhørende 'send-php'-fil være en oversættelse af de forskellige valg (1, 2, 3 osv.) til tre forskellige mail-adresser.
Jeg har søgt rigtig mange steder på nettet, og er kommet frem til at der er rigtig mange måder at gøre det her på. Men eftersom jeg har noget gammelt script jeg har bygget videre på, kan jeg ikke helt få tingene til at spille sammen.
Det script jeg har stående i 'send.php' lige nu er følgende:
Kode <?php
if (isset($_POST['submit']))
{
*UDELADT AFSNIT MED KONTROL AF INDTASTEDE DATA OG SIKRING MOD SPAMBOTTER*
$recipients = array(
"1" => 'jens@mail.dk',
"2" => 'birthe@mail.dk',
"3" => 'hans@mail.dk'
);
$my_email = $recipients[$_REQUEST['recipient']];
echo "<center><br><br><br><p>Tak for din henvendelse! Vi vender tilbage med et svar hurtigst muligt.</p><br><br><br>";
}
else
{
echo "<center><br><br><br><p>E-mailen blev ikke sendt. Der skete en fejl. Prøv igen!</p><br><br><br>";
}
?> |
Er der nogen der kan finde fejl i ovenstående?
Jeg har som sagt været mange forsøg igennem og har fået forskellige fejl hver gang. Det betyder sikkert også at det her stykke er meget rodet og sikkert helt forkert.
Men lige nu kommer man fint videre fra kontaktformularen og får at vide at beskeden er sendt, men det er den så alligevel ikke.
Nogen der har ideer til omskrivning af dette script, eller forslag til en helt anden måde at gøre det på, så kom endelig med det. Som sagt er jeg langt fra ekspert, så gode forklaringer vil hjælpe meget.
| |
|
Du kan sende e-mail med mail() funktionen.
ini_set('sendmail_from', $fra); // hvis du bruger windows
$til = $recipients[$_REQUEST['recipient']];
$fra = "mig@her.der";
$headers = "From: $fra <$fra>\r\n";
$headers .= "Content-type: text/plain; charset=utf-8\r\n";
if(mail($til, $emne, $besked, $headers)){
// besked sendt
}else{
// beskeden blev ikke sendt
}
| |
| Kommentar Fra : tp6100 |
Dato : 05-06-10 22:15 |
|
Hej scootergrisen,
Nu ved jeg ikke nok om det til at kunne se, om det vil være den rigtige løsning for mig. Jeg tænker dog, når du skriver "hvis du bruger windows", at det ikke er den rigtige løsning, da formularen skal kunne bruges af alle, uanset browser og styresystem..
Jeg tilføjer lige hele koden til kontaktformularen, så man kan se hvilke værdier jeg har givet de forskellige felter. Jeg tænker det er nemmere for mig at forstå de svar der måtte komme, hvis der bliver brugt samme ord/værdier - tror det er det der forvirrer mig, når jeg læser forskellige andre fora igennem; at jeg ikke kan overføre de forskellige script-dele til mit eget..
Kode </p>
<form method="post" action="sender.php">
<fieldset>
<legend>Husk at udfylde alle felter</legend>
<label for="t1">Navn: </label>
<input id="t1" type="text" name="name"><br>
<label for="t2">Email:</label>
<input id="t2" type="text" name="email"><br>
<label for="t3">Emne:</label>
<input id="t3" type="text" name="emne"><br>
<br>
<label for="t4">Vælg din modtager: </label>
<select name="recipient" size="1">
<option value="1"></option>
<option value="2">Jens</option>
<option value="3">Birthe</option>
<option value="4">Hans</option>
</select>
<br>
<label for="t4"></label>
<textarea id="t4" name="besked" rows="10" cols="49"></textarea><br />
<label for="t6"> </label><input id="t6" type="submit" name="submit" value=" Send mail " />
</fieldset>
</form> |
| |
| Accepteret svar Fra : scootergrisen | Modtaget 150 point Dato : 05-06-10 23:15 |
|
Når jeg skrev "hvis du bruger windows" så betyder det at du kun skal skrive det hvis den computer din PHP kode udføres på er med windows.
Det har ikke noget at gøre med hvilken computer eller browseren dine brugere bruger når de besøger din hjemmeside.
Når du har udfyldt formularen og trykker på "send mail" knappen så indenholder kan du bruge : $_POST["name"]
og
$_POST["email"]
og
$_POST["emne"]
osv.
Du kan så gøre sådan her :
$recipients = array("1" => 'jens@mail.dk',"2" => 'birthe@mail.dk',"3" => 'hans@mail.dk');
$til = $recipients[$_POST['recipient']];
$fra = $_POST["email"];
$headers = "From: $fra <$fra>\r\n";
$headers .= "Content-type: text/plain; charset=utf-8\r\n";
$emne = $_POST["emne"];
$besked = 'Navn : ' . $_POST["name"] . "\r\n\r\n" . 'Besked : ' . "\r\n" . $_POST["besked"];
if(mail($til, $emne, $besked, $headers)){
// besked sendt
}else{
// beskeden blev ikke sendt
}
Prøv dig lidt frem og se om du ikke kan få det til at virke.
Hvis du bruger windows kan du download en php manual du kan slå op i når du vil vide mere om en funktion eller noget : http://dk.php.net/get/php_manual_en.chm/from/a/mirror
| |
| Kommentar Fra : tp6100 |
Dato : 06-06-10 00:02 |
|
Tak for forklaringerne!
Med brug af store dele af det sidst sendte, fungerer det faktisk nu.
Er det muligt med denne form for script at sende samme besked til 2 af modtagerne? Altså så 'Jens' og 'Birthe' modtager samme besked, hvis modtager-mulighed 2 vælges, mens mulighed 3 fx igen kun modtages af en af dem?
Har prøvet at liste to mails efter hinanden med både ',' og ';' imellem, som man i nogle tilfælde kan. Men det virker ikke umiddelbart her..
| |
|
Du kunne gøre det at valgmulighed nummer 2 laves om til et array som indenholder de 2 email adresser.
$recipients = array(
"1" => 'jens@mail.dk'
,"2" => array('birthe@mail.dk', 'hans@mail.dk')
,"3" => 'hans@mail.dk');
$til = $recipients[$_POST['recipient']];
if(is_array($til)){
foreach($til as $emailadresse){
if(mail($emailadresse, $emne, $besked, $headers)){
// besked sendt
}else{
// beskeden blev ikke sendt
}
}
}else{
if(mail($til, $emne, $besked, $headers)){
// besked sendt
}else{
// beskeden blev ikke sendt
}
}
| |
| 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.
| |
|
|