13375k1133z Skrevet 14. oktober 2015 Del Skrevet 14. oktober 2015 (endret) Jobber med å lage et kontaktskjema hvor besøkende kan velge hvilke avdeling de besøkende skal kontakte. Skjemaet nedenfor fungerer, men process.php tar ikke hensyn til: option value Jeg ønsker at dersom noen velger f.eks <option value="sporsmal"> skal mail bli sendt til:[email protected], dersom noen velger reklamasjon skal mailen bli sendt til: [email protected]. Hvordan gjør man dette? <?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $from = 'Fra test'; $to = '[email protected]'; $body = "From: $name\n E-Mail: $email\n Message:\n $message"; ?> <?php if ($_POST['submit']) { if (mail ($to, $subject, $body, $from)) { header("Location:#"); } else { echo '<p>Woops! Det har skjedd en feil. Vennligst prøv igjen!</p>'; } } ?> <form action="process.php" method="post" enctype="multipart/form-data"> <input name="name" required="required" placeholder="Ditt navn"> <label></label> <input name="email" type="email" required="required" placeholder="Din E-post"> <label></label> <select name ="avdeling"> <option value="#">Hva gjelder din forespørsel?</option> <option value="sporsmal">Spørsmål</option> <option value="reklamasjon">Reklamasjon</option> </select> <label></label> <textarea name="message" cols="20" rows="5" required placeholder="Din melding"></textarea> <input id="submit" name="submit" type="submit" value="Send"> </form> Endret 14. oktober 2015 av 13375k1133z Lenke til kommentar
trondes Skrevet 14. oktober 2015 Del Skrevet 14. oktober 2015 Jobber med å lage et kontaktskjema hvor besøkende kan velge hvilke avdeling de besøkende skal kontakte. Skjemaet nedenfor fungerer, men process.php tar ikke hensyn til: option value Jeg ønsker at dersom noen velger f.eks <option value="sporsmal"> skal mail bli sendt til:[email protected], dersom noen velger reklamasjon skal mailen bli sendt til: [email protected]. Hvordan gjør man dette? En enkel if/else fikser dette, hvis det ikke er valgt "reklamasjon" vil de automatisk bli sendt til [email protected] feks slik: <?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $from = 'Fra test'; if( $_POST['avdeling'] == "reklamasjon" ) { $to = "[email protected]"; } else { $to = "[email protected]"; } $body = "From: $name\n E-Mail: $email\n Message:\n $message"; ?> <?php if ($_POST['submit']) { if (mail ($to, $subject, $body, $from)) { header("Location:#"); } else { echo '<p>Woops! Det har skjedd en feil. Vennligst prøv igjen!</p>'; } } ?> Lenke til kommentar
Dan-Levi Skrevet 14. oktober 2015 Del Skrevet 14. oktober 2015 (endret) En annen tilnærming. $domain = "@test.no"; $defaultDep = "sporsmal" . $domain; $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $from = 'Fra test'; // Sjekker om avdeling er satt i post forespørsel og om post ikke er $defaultDep. Om den er det er $to verdien til defaultDep ([email protected]) $to = isset($_POST['avdeling']) && $_POST['avdeling']) !== $defaultDep ? $_POST['avdeling'] . $domain : $defaultDep; $body = "From: $name\n E-Mail: $email\n Message:\n $message"; Koden er ikke testet, og skrevet fort da jeg er på farta på telefonen, og sjekkom om avdelinger og slikt er ikke tatt med, og burde sjekkes, samt sanitering av post forespørsler. Endret 14. oktober 2015 av [email protected] Lenke til kommentar
Yawa Skrevet 15. oktober 2015 Del Skrevet 15. oktober 2015 med tanke på at det sannsynligvis er flere enn 2 avdelinger, så kan en php.switch være aktuellt å benytte: switch($_POST['avdeling']){ case 'reklame': $department = '[email protected]'; default: $department = '[email protected]'; // denne vil bli benyttet om ingen avd. er valgt. } $mailTo = $department; På denne måten kan du legge til så mange avdelinger du måtte ønske ved å legge til en nye "swtich.case". $domain = '@test.no'; switch($_POST['avdeling']){ case 'reklame': $department = 'reklamasjon'; break; case 'sporsmal': $department = 'sporsmal'; break; case 'avd3': $department = 'avd3'; break; // ... case 'avd99': $department = 'avd99'; break; default: $department = 'post'; // denne vil bli benyttet om ingen avd. er valgt. } $mailTo = $department.$domain; Om avdelingene ligger lagret i en database kan du foreta en sql spørring hvor du da velger hvilken epost som skal benyttes basert på valget: /* eksempel for MySQL og PHP PDO */ $get_department = $dbh->prepare('SELECT email FROM departments WHERE name = ?'); $get_department->execute(array($_POST['avdeling'])); $mailTo = $get_department->fetchColumn(); Denne løsningen vil være den mest gunstige da du kan gå vekk fra å hardkode hver avdeling, og lett kan legge til nye avdelinger osv.. Lenke til kommentar
Dan-Levi Skrevet 15. oktober 2015 Del Skrevet 15. oktober 2015 Mye unødvendig kode. Lag heller en funksjon som sjekker om avdelingen eksister. Om den ikke gjør det så bruk default e-post. Lenke til kommentar
13375k1133z Skrevet 16. oktober 2015 Forfatter Del Skrevet 16. oktober 2015 Hei, prøvde denne koden, men det fungerer ikke. Hva er feil? (mailadd er selvsagt byttet...) <?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $from = 'Fra kontaktskjema'; if( $_POST['avdeling'] == "reklamasjon" ) { $to = "[email protected]"; } else { $to = "[email protected]"; $to = "[email protected]" } $body = "From: $name\n E-Mail: $email\n Message:\n $message"; ?> <?php if ($_POST['submit']) { if (mail ($to, $subject, $body, $from)) { header("Location: #"); } else { echo '<p>Woops! Det har skjedd en feil. Vennligst prøv igjen!</p>'; } } ?> Lenke til kommentar
forvirretoggal Skrevet 17. oktober 2015 Del Skrevet 17. oktober 2015 Hei, prøvde denne koden, men det fungerer ikke. Hva er feil? (mailadd er selvsagt byttet...) <?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $from = 'Fra kontaktskjema'; if( $_POST['avdeling'] == "reklamasjon" ) { $to = "[email protected]"; } else { $to = "[email protected]"; $to = "[email protected]" } $body = "From: $name\n E-Mail: $email\n Message:\n $message"; ?> <?php if ($_POST['submit']) { if (mail ($to, $subject, $body, $from)) { header("Location: #"); } else { echo '<p>Woops! Det har skjedd en feil. Vennligst prøv igjen!</p>'; } } ?> Hvordan fungerer det ikke, om feilen ikke er den uthevet i rødt over? Lenke til kommentar
13375k1133z Skrevet 17. oktober 2015 Forfatter Del Skrevet 17. oktober 2015 Hei, prøvde denne koden, men det fungerer ikke. Hva er feil? (mailadd er selvsagt byttet...) <?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $from = 'Fra kontaktskjema'; if( $_POST['avdeling'] == "reklamasjon" ) { $to = "[email protected]"; } else { $to = "[email protected]"; $to = "[email protected]" } $body = "From: $name\n E-Mail: $email\n Message:\n $message"; ?> <?php if ($_POST['submit']) { if (mail ($to, $subject, $body, $from)) { header("Location: #"); } else { echo '<p>Woops! Det har skjedd en feil. Vennligst prøv igjen!</p>'; } } ?> Hvordan fungerer det ikke, om feilen ikke er den uthevet i rødt over? Har selvsagt endret mail til riktig. Feilmeldingen jeg får er: Nettstedet støtte på en feil ved henting av http://...php. Det kan være stengt for vedlikehold eller feilaktig konfigurert. Lenke til kommentar
Lanes Skrevet 19. oktober 2015 Del Skrevet 19. oktober 2015 Lenge siden jeg brukte header('Location') til å redirekte, men burde det ikke være header('Location: /') for å gå til root? Feilmelding du får ser ut til å være fra nettleseren din, ikke fra webserveren eller scriptet - som tyder på at du routes til feil sted. Feilen i rødt tidligere kommentert tror jeg var at du: 1) Har glemt å lukke med semikolon 2) Assinger først en e-post til $to, deretter overskriver du den igjen, fremfor å legge til em ekstra e-post. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå