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

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Kontaktformular med selvvalgt modtager
Fra : tp6100
Vist : 684 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&aelig;lg modtager:&nbsp;</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.

 
 
Kommentar
Fra : scootergrisen


Dato : 05-06-10 22:01

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:&nbsp;</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&aelig;lg din modtager:&nbsp;</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">&nbsp;</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..

Godkendelse af svar
Fra : tp6100


Dato : 27-07-10 18:19

Tak for svaret scootergrisen.

Kommentar
Fra : scootergrisen


Dato : 27-07-10 18:41

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

Månedens bedste
Årets bedste
Sidste års bedste