Avatar billede alluc Nybegynder
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>&nbsp; & 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" />&nbsp;<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>";
  }
  }
?>
Avatar billede jakobdo Ekspert
23. juli 2008 - 07:53 #1
Du skal ihf. have en session_start(); i toppen af sender.php
Avatar billede alluc Nybegynder
23. juli 2008 - 10:12 #2
Ø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 ?! :)
Avatar billede w13 Novice
23. juli 2008 - 10:19 #3
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.
Avatar billede alluc Nybegynder
23. juli 2008 - 10:23 #4
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?!
Avatar billede w13 Novice
23. juli 2008 - 10:25 #5
"Alle felter med * skal udfyldes!" står ikke noget sted i den kode, du har vist os.
Avatar billede alluc Nybegynder
23. juli 2008 - 10:25 #6
Nej forstår det heller ikke ?!
Avatar billede alluc Nybegynder
23. juli 2008 - 10:27 #7
Ups, nej det er noget jeg senere har skrevet ind - så efter din rettelse skriver den overhovedet ingenting?!
Avatar billede w13 Novice
23. juli 2008 - 10:33 #8
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?
Avatar billede w13 Novice
23. juli 2008 - 10:33 #9
Det ser nemlig ikke ud til, at din kode p.t. er sat til at skrive fejlbeskederne ud. =)
Avatar billede alluc Nybegynder
23. juli 2008 - 10:35 #10
Skal jeg ikke stadig rette if ($Error != 0) { til if (!$Error) {
?
Avatar billede w13 Novice
23. juli 2008 - 10:36 #11
Jo, den smuttede lige.
Avatar billede alluc Nybegynder
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
Avatar billede w13 Novice
23. juli 2008 - 10:38 #13
foreach($errormessage in $_SESSION['fejl'][]){
skal nok være:
  foreach($errormessage in $_SESSION['fejl']){
Avatar billede w13 Novice
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.
Avatar billede w13 Novice
23. juli 2008 - 10:40 #15
Og du mangler nok en session_start(); i toppen af PHP-koden, hvis det skal virke med Session.
Avatar billede alluc Nybegynder
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
Avatar billede alluc Nybegynder
23. juli 2008 - 10:43 #17
Hvilken anden variable kan man indsætte istedet for $_SESSION?
Avatar billede w13 Novice
23. juli 2008 - 10:49 #18
En normal. :) F.eks. $fejlarray.
Avatar billede w13 Novice
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>";
    }
}

?>
Avatar billede alluc Nybegynder
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>";
    }
Avatar billede w13 Novice
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å?
Avatar billede alluc Nybegynder
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! )
Avatar billede alluc Nybegynder
23. juli 2008 - 11:17 #23
Hvordan kan man så gøre således at det bliver stillet op under hinanden og mere overskueligt?
Avatar billede jakobdo Ekspert
23. juli 2008 - 11:19 #24
Smid
echo '<pre>';
print_r($aFejl);
echo '</pre>';

Eller smid den via foreach()
Avatar billede w13 Novice
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.
Avatar billede w13 Novice
23. juli 2008 - 11:20 #26
*Derfor står det uoverskueligt.
Avatar billede w13 Novice
23. juli 2008 - 11:21 #27
Prøv med dette i stedet:

    foreach($afejl as $error){
        echo $error . "<br><br>";
    }
Avatar billede alluc Nybegynder
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!
Avatar billede alluc Nybegynder
23. juli 2008 - 11:25 #29
hvor skal jeg indsætte dette
foreach($afejl as $error){
        echo $error . "<br><br>";
    }

w13?
Avatar billede w13 Novice
23. juli 2008 - 11:27 #30
I stedet for:

print_r($afejl);
Avatar billede alluc Nybegynder
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?
Avatar billede w13 Novice
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. =)
Avatar billede w13 Novice
23. juli 2008 - 12:13 #33
Tak for point i øvrigt! ;)
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