23. juli 2008 - 00:47
Der er
32 kommentarer og 1 løsning
Hjælp til Formmail
Hej Eksperter, Jeg har følgende to filer, som arbejder sammen således at de gerne skulle kunne sende en mail til min mailadresse udfra fra en form på min hjemmeside - Men sådan fungerer det, desværre ikke lige nu ig derfor mangler jeg lige lidt hjælp til at få det sidste tilpasset. Kontakt.php og Sender.php er de to filer jeg anvender. Når jeg indtaster data i formen, så tager den ikke højde for at der er nogle af felterne der skal udfyldes - den sender bare en mail med det data der nu er tastet ind - eller på mangel af samme. Så fejlen ligger i sender.php, og jeg tror det er fordi det ikke hænger sammen her i mellem disse: If ($Error != 0) { HER -> Mangler noget! $body .= "Meddelelse den " . date("d/m y") . " kl. " . da Her er filerne: Kontakt.php ----------- <form action="index.php?side=sender" method="post"> <table border="0" width="100%" style="border-collapse: collapse" cellpadding="0"> <tr> <td width="189">Firma:<br /> <input type="text" name="firma" size="30" style="border: 1px solid #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFFF" /> </td> <td>Navn: <font color="#0000FF">*</font><br /> <input type="text" name="navn" size="30" style="border: 1px solid #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFFF" /></td> </tr> <tr> <td width="189">Adresse: <font color="#0000FF">*</font><br /> <input type="text" name="adresse" size="30" style="border: 1px solid #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFFF" /></td> <td>Postnr. <font color="#0000FF">*</font> & By: <font color="#0000FF">*</font><br /> <input type="text" style="border:1px solid #000000; width: 50px; padding-left:4px; padding-right:4px; padding-top:1px; padding-bottom:1px; background-color:#FFFFFF" name="postnr" size="4" /> <input type="text" name="by" size="19" style="border: 1px solid #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFFF" /></td> </tr> <tr> <td width="189">E-mail: <font color="#0000FF">*</font><br /> <input type="text" name="email" size="30" style="border: 1px solid #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFFF" /> </td> <td>Telefon:<br /> <input type="text" name="telefon" size="30" style="border: 1px solid #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFFF" /> </td> </tr> <tr> <td width="189">Mobil:<br /> <input type="text" name="mobil" size="30" style="border: 1px solid #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFFF" /></td> <td><p> Emne: <font color="#0000FF">*</font><br> <input type="text" name="emne" size="30" style="border: 1px solid #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFFF" /></p> </td> </tr> <tr> <td height="119" colspan="2">Besked: <font color="#0000FF">*</font><br /> <textarea rows="6" name="besked" cols="42" style="border: 1px solid #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFFF"></textarea></td> </tr> </table> <p> <input type="submit" value="Send mail" style="border: 1px solid #000000; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFFF" /></p> </form> Sender.php ---------- <?php $Error = 0; Unset($_SESSION['fejl']); If ($_REQUEST['navn'] == "") { $_SESSION['fejl'][] = "Feltet 'Navn' må ikke stå tomt<br /><br />"; $Error += 1; } If ($_REQUEST['adresse'] == "") { $_SESSION['fejl'][] = "Feltet 'Adresse' må ikke stå tomt<br /><br />"; $Error += 1; } If ($_REQUEST['postnr'] == "" || !is_numeric($_REQUEST['postnr'])) { $_SESSION['fejl'][] = "Feltet 'Postnr.' må ikke stå tomt og må kun indeholde tal<br /><br />"; $Error += 1; } If ($_REQUEST['by'] == "") { $_SESSION['fejl'][] = "Feltet 'By' må ikke stå tomt<br /><br />"; $Error += 1; } If ($_REQUEST['email'] == "") { $_SESSION['fejl'][] = "Feltet 'E-mail' må ikke stå tomt og skal indeholde et @ (Eks. Info@smash2u.dk)<br /><br />"; $Error += 1; } If ($_REQUEST['emne'] == "" || !is_numeric($_REQUEST['postnr'])) { $_SESSION['fejl'][] = "Feltet 'Emne' må ikke stå tomt<br /><br />"; $Error += 1; } If ($_REQUEST['besked'] == "" || !is_numeric($_REQUEST['postnr'])) { $_SESSION['fejl'][] = "Feltet 'Besked' må ikke stå tomt<br /><br />"; $Error += 1; } If ($Error != 0) { $body .= "Meddelelse den " . date("d/m y") . " kl. " . date("G:i") . "\r\n" . "<b>Firma:</b> " . $_POST['firma'] . "\r\n" . "<b>Navn:</b> " . $_POST['navn'] . "\r\n" . "<b>Adresse:</b> " . $_POST['adresse'] . "\r\n" . "<b>Postnr.:</b> " . $_POST['postnr'] . "\r\n" . "<b>By:</b> " . $_POST['by'] . "\r\n" . "<b>Mail:</b> " . $_POST['email'] . "\r\n" . "<b>Telefon:</b> " . $_POST['telefon'] . "\r\n" . "<b>Mobil:</b> " . $_POST['mobil'] . "\r\n" . "<b>Emne:</b> " . $_POST['emne'] . "\r\n" . "<b>Besked:</b> " . $_POST['besked'] . "\r\n\r\n" . $_POST['besked']; if(@mail("Min_mail", strip_tags($_POST['subject']), stripslashes(strip_tags($body)), $headers)) { echo "<p>Tak for din henvendelse. Jeg svarer så hurtigt som muligt.</p>"; } } ?>
Annonceindlæg fra HP
Du skal ihf. have en session_start(); i toppen af sender.php
Øhh.. ved bare at indsætte session_start(); i toppen af sender.php, gør ingen forskel. Jeg tror altså som jeg beskrev at fejlen ligger i den overgang fra fejlmeldingerne til der hvorden sender mailen ?! :)
If ($Error != 0) { skal vel være: if ($Error == 0) { som også bare kan skrives: if (!$Error) { Ellers kører den jo kun, når der er fejl.
JA ok... Nu skriver den jo godt nok dette: Alle felter med * skal udfyldes! Men den burde jo skrive lige som beskrevet i sender.php, skrive at eks. navn ikke må stå tomt osv?!
"Alle felter med * skal udfyldes!" står ikke noget sted i den kode, du har vist os.
Nej forstår det heller ikke ?!
Ups, nej det er noget jeg senere har skrevet ind - så efter din rettelse skriver den overhovedet ingenting?!
Så prøv at rette: If ($Error != 0) { $body .= "Meddelelse den " . date("d/m y") . " kl. " . date("G:i") . "\r\n" . "<b>Firma:</b> " . $_POST['firma'] . "\r\n" . "<b>Navn:</b> " . $_POST['navn'] . "\r\n" . "<b>Adresse:</b> " . $_POST['adresse'] . "\r\n" . "<b>Postnr.:</b> " . $_POST['postnr'] . "\r\n" . "<b>By:</b> " . $_POST['by'] . "\r\n" . "<b>Mail:</b> " . $_POST['email'] . "\r\n" . "<b>Telefon:</b> " . $_POST['telefon'] . "\r\n" . "<b>Mobil:</b> " . $_POST['mobil'] . "\r\n" . "<b>Emne:</b> " . $_POST['emne'] . "\r\n" . "<b>Besked:</b> " . $_POST['besked'] . "\r\n\r\n" . $_POST['besked']; if(@mail("Min_mail", strip_tags($_POST['subject']), stripslashes(strip_tags($body)), $headers)) { echo "<p>Tak for din henvendelse. Jeg svarer så hurtigt som muligt.</p>"; } } til: if ($Error != 0) { $body .= "Meddelelse den " . date("d/m y") . " kl. " . date("G:i") . "\r\n" . "<b>Firma:</b> " . $_POST['firma'] . "\r\n" . "<b>Navn:</b> " . $_POST['navn'] . "\r\n" . "<b>Adresse:</b> " . $_POST['adresse'] . "\r\n" . "<b>Postnr.:</b> " . $_POST['postnr'] . "\r\n" . "<b>By:</b> " . $_POST['by'] . "\r\n" . "<b>Mail:</b> " . $_POST['email'] . "\r\n" . "<b>Telefon:</b> " . $_POST['telefon'] . "\r\n" . "<b>Mobil:</b> " . $_POST['mobil'] . "\r\n" . "<b>Emne:</b> " . $_POST['emne'] . "\r\n" . "<b>Besked:</b> " . $_POST['besked'] . "\r\n\r\n" . $_POST['besked']; if(@mail("Min_mail", strip_tags($_POST['subject']), stripslashes(strip_tags($body)), $headers)) { echo "<p>Tak for din henvendelse. Jeg svarer så hurtigt som muligt.</p>"; } }else{ echo "Mailen kunne ikke sendes!<br><br>"; foreach($errormessage in $_SESSION['fejl'][]){ echo $errormessage . "<br>"; } } Skriver den så noget?
Det ser nemlig ikke ud til, at din kode p.t. er sat til at skrive fejlbeskederne ud. =)
23. juli 2008 - 10:35
#10
Skal jeg ikke stadig rette if ($Error != 0) { til if (!$Error) { ?
23. juli 2008 - 10:36
#11
Jo, den smuttede lige.
23. juli 2008 - 10:36
#12
ok ... Nu skriver den : Parse error: syntax error, unexpected T_STRING in /usr/home/web/bla/smash2u/kontakt/sender.php on line 146
23. juli 2008 - 10:38
#13
foreach($errormessage in $_SESSION['fejl'][]){ skal nok være: foreach($errormessage in $_SESSION['fejl']){
23. juli 2008 - 10:39
#14
Hvorfor dette i øvrigt gemmes i en Session, ved jeg ikke. Det burde nok være en normal variable, hvis det ikke skal kunne huskes på andre sider.
23. juli 2008 - 10:40
#15
Og du mangler nok en session_start(); i toppen af PHP-koden, hvis det skal virke med Session.
23. juli 2008 - 10:41
#16
skriver stadig: Parse error: syntax error, unexpected T_STRING in /usr/home/web/bla/smash2u/kontakt/sender.php on line 146
23. juli 2008 - 10:43
#17
Hvilken anden variable kan man indsætte istedet for $_SESSION?
23. juli 2008 - 10:49
#18
En normal. :) F.eks. $fejlarray.
23. juli 2008 - 10:54
#19
Du ka' prøve: <?php $afejl = array(); if ($_REQUEST['navn'] == "") { $afejl[] = "Feltet 'Navn' må ikke stå tomt!"; } if ($_REQUEST['adresse'] == "") { $afejl[] = "Feltet 'Adresse' må ikke stå tomt!"; } if ($_REQUEST['postnr'] == "" || !is_numeric($_REQUEST['postnr'])) { $afejl[] = "Feltet 'Postnr.' må ikke stå tomt og må kun indeholde tal!"; } if ($_REQUEST['by'] == "") { $afejl[] = "Feltet 'By' må ikke stå tomt!"; } if ($_REQUEST['email'] == "") { $afejl[] = "Feltet 'E-mail' må ikke stå tomt og skal indeholde et @ (Eks. info@smash2u.dk)!"; } if ($_REQUEST['emne'] == "" || !is_numeric($_REQUEST['postnr'])) { $afejl[] = "Feltet 'Emne' må ikke stå tomt!"; } if ($_REQUEST['besked'] == "" || !is_numeric($_REQUEST['postnr'])) { $afejl[] = "Feltet 'Besked' må ikke stå tomt!"; } if (count($afejl)) { echo "Mailen kunne ikke sendes!<br><br>"; foreach($error in $afejl){ echo $error . "<br><br>"; } }else{ $body .= "Meddelelse den " . date("d/m y") . " kl. " . date("G:i") . "\r\n" . "<b>Firma:</b> " . $_POST['firma'] . "\r\n" . "<b>Navn:</b> " . $_POST['navn'] . "\r\n" . "<b>Adresse:</b> " . $_POST['adresse'] . "\r\n" . "<b>Postnr.:</b> " . $_POST['postnr'] . "\r\n" . "<b>By:</b> " . $_POST['by'] . "\r\n" . "<b>Mail:</b> " . $_POST['email'] . "\r\n" . "<b>Telefon:</b> " . $_POST['telefon'] . "\r\n" . "<b>Mobil:</b> " . $_POST['mobil'] . "\r\n" . "<b>Emne:</b> " . $_POST['emne'] . "\r\n" . "<b>Besked:</b> " . $_POST['besked'] . "\r\n\r\n" . $_POST['besked']; if(@mail("Min_mail", strip_tags($_POST['subject']), stripslashes(strip_tags($body)), $headers)) { echo "<p>Tak for din henvendelse. Jeg svarer så hurtigt som muligt.</p>"; } } ?>
23. juli 2008 - 10:57
#20
Nu skriver den : Parse error: syntax error, unexpected T_STRING in /usr/home/web/sth151964/smash2u/kontakt/sender.php on line 125 if (count($afejl)) { echo "Mailen kunne ikke sendes!<br><br>"; foreach($error in $afejl){ <- Dette er linie 125 echo $error . "<br><br>"; }
23. juli 2008 - 10:59
#21
Prøv at rette: foreach($error in $afejl){ <- Dette er linie 125 echo $error . "<br><br>"; } til: print_r($afejl); Hvad skriver den så?
23. juli 2008 - 11:02
#22
Mailen kunne ikke sendes! Array ( [0] => Feltet 'Navn' må ikke stå tomt! [1] => Feltet 'Adresse' må ikke stå tomt! [2] => Feltet 'Postnr.' må ikke stå tomt og må kun indeholde tal! [3] => Feltet 'By' må ikke stå tomt! [4] => Feltet 'E-mail' må ikke stå tomt og skal indeholde et @ (Eks. info@smash2u.dk)! [5] => Feltet 'Emne' må ikke stå tomt! [6] => Feltet 'Besked' må ikke stå tomt! )
23. juli 2008 - 11:17
#23
Hvordan kan man så gøre således at det bliver stillet op under hinanden og mere overskueligt?
23. juli 2008 - 11:19
#24
Smid echo '<pre>'; print_r($aFejl); echo '</pre>'; Eller smid den via foreach()
23. juli 2008 - 11:20
#25
Lige nu debugger vi. Derfor står det overskueligt. Min gamle kode skulle stille det overskueligt op, men den gav os jo fejl, så derfor prøvede vi denne kode, der udskriver hvad fejlvariablen indeholder.
23. juli 2008 - 11:20
#26
*Derfor står det uoverskueligt.
23. juli 2008 - 11:21
#27
Prøv med dette i stedet: foreach($afejl as $error){ echo $error . "<br><br>"; }
23. juli 2008 - 11:23
#28
Nu skriver den bare mailen kunne ikke sendes! - Mangler ligesom stadig at den skal fortælle hvilke felter der ikke er udfyldt korrekt!
23. juli 2008 - 11:25
#29
hvor skal jeg indsætte dette foreach($afejl as $error){ echo $error . "<br><br>"; } w13?
23. juli 2008 - 11:27
#30
I stedet for: print_r($afejl);
23. juli 2008 - 11:30
#31
Det virkede - men hvordan ændrer man dette: if ($_REQUEST['email'] == "") { således at den ikke godtager hvis man ikke skriver en mail på følgende måde: min@mail.dk, sådan at der skal indgå et @ i teksten?
23. juli 2008 - 12:13
#32
Det er der vist ikke nogen generel funktion til. Det skal evt. kodes med noget reg.exp. og du må nok spørge om det i et nyt spørgsmål. =)
23. juli 2008 - 12:13
#33
Tak for point i øvrigt! ;)
Vi tilbyder markedets bedste kurser inden for webudvikling