Avatar billede nph12 Nybegynder
10. januar 2011 - 13:37 Der er 40 kommentarer og
1 løsning

Hjælp til kontaktformular

Hej eksperter
Jeg er i gang med at lave en kontaktformular, men har brug for at lidt hjælp til at kontaktformularen opfylder mine krav:

1) Kontaktformularen må meget gerne kunne laves på en side

2) Tjek felter før afsendelse (i første omgang bare et simpel tjek - senere gerne noget mere avanceret tjek)

3) Hvis der er fejl/tomme felter, så skal formularen vise, hvis felter som fejler

4) Kontaktformularen skal huske felterne indtil at mailen er sendt (hvis IE crasher eller andet, så skal man ikke starter forfra med indtastningen)

Jeg har lavet selve formularen, men vil gerne hjælp til ovenstående. Jeg har prøvet at google kontaktformular, men finder stort set samme kontaktformular i forskellige fora, hvor folk har problemer med det ene og det andet. Jeg har kun lidt erfaring med PHP, men vil godt blive bedre. Jeg har siddet og prøvet at lave ovenstående i par dage nu, men det driller hele tiden. Jeg har brug for hjalp til at lave ovenstående step-by-step.   


PHP:
Hvordan skal jeg opbygge strukturen på min php-kode? I første omgang skal jeg vel tjekke om der er trykket på send knappen :
if (isset($_POST['send']))

Hvis der er trykket på send knappen, så skal jeg tjekke om variablerne er sat samt om de ikke er tomme.

Næste step er at sende mailen eller udskrive fejlmeddelelse på, hvorfor mailen ikke blev sendt.    Hvis et er felterne ikke er udfyldt kunne jeg godt tænke mig, at kunne vise dette i min formular.

Formular:
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <table width="61" border="0">
        <tr>
          <td width="55"><p>Navn</p>
            <p>
            <input type="text" name="navn" />
          </p></td>
        </tr>
        <tr>
          <td><p>Email</p>
            <p>
              <input type="text" name="mail" />
              </p>
          </td>
        </tr>
        <tr>
          <td><p>Emne</p>
            <p>
              <input type="text" name="emne" />
            </p>
          </td>
        </tr>
        <tr>
          <td valign="top">Besked
            <textarea name="besked" cols="50" rows="10"></textarea></td>
        </tr>
        <tr>
          <td>
              <input type="submit" name="send" value="Send" />
          </td>

        </tr>
    </table>
    </form>
Avatar billede webweaver Praktikant
10. januar 2011 - 14:48 #1
Du har point ude. Du skal huske at lukke dine gamle tråde. Du har nogle vældig gamle liggende. Hvis der er en eller flere personer som har lagt et svar eller hjulpet på anden måde, tildel dem point. Bed dem om at lægge et svar, hvis det ikke allerede er gjort. Og ellers, hvis du ikke fik svar på dit spørgsmål, så læg et svar selv og accepter det.

http://www.eksperten.dk/list/aabnespoergsmaal/nph12

Jeg er sikker på at du nok også skal få hjælp til spørgsmålet her, hvis du ordner det ovenstående :-)
Avatar billede nph12 Nybegynder
10. januar 2011 - 15:36 #2
Når jeg gennemgår listen indlæg, så er der ingen af de åbne tråde du henviser til. Jeg har kun kunne finde et indlæg, som jeg ikke havde fået lukket (som jeg har lukket nu), men resten af mine indlæg have en grøn status. De indlæg som ikke var grønne, var ikke oprettet af mig. Hvor kan man selv se ens åbne spørgsmål? Nu har jeg lukket de åbne tråde.
Avatar billede webweaver Praktikant
10. januar 2011 - 17:10 #3
Du ser dine åbne spørgsmål via det link jeg henviste til i forrige indlæg. Ikke andres. Du havde flere tråde, som ikke var lukkede. Jeg gennemgik listen. De er blevet lukket nu, så du kun har denne tråd tilbage :)

Angående din mailform, så kan der laves validering på den forholdsvis simpelt.

Fx noget ala,

<?php

$showform = TRUE;

if (isset($_POST['send'])) {       
       
if (!$_POST['navn']) {
$fejl = "<p>Du mangler at udfylde dit navn.</p>";
$showform = TRUE;
}

if (!$_POST['emne']) {
$fejl .= "<p> Du mangler at udfylde emne.</p>";
$showform = TRUE;
}
                               
if (!$fejl) {

MAIL FUNKTION HER ....

echo "Din mail blev sendt";
       
$showform = FALSE;

} else {

echo $fejl;

}

if ($showform) {

?>

DIN FORM HER

<?php

}

?>
Avatar billede nph12 Nybegynder
10. januar 2011 - 17:38 #4
OK. Jeg kender lige på koden og vender tilbage, når jeg ikke kan komme længere.

Mht. åbne tråde, hvor kan jeg se på min egen side her på eksperten, hvilke tråde der er åbne (lige som den liste du henviser til)? Det undre mig bare, at de åbne tråde du henviste til ikke stod på indlæg listen. Nok om det:-)
Avatar billede webweaver Praktikant
10. januar 2011 - 18:03 #5
Dem ser du inde under "Min profil" og så "Åbne Spørgsmål".
Så kommer du frem til det link jeg viste :)

Men jeps, du vender bare tilbage, hvis det driller :)
Avatar billede nph12 Nybegynder
12. januar 2011 - 09:40 #6
1) Når man kommer ind på formularsiden, så skriver formularen "Du mangler at skrive en besked." inden man har trykket 'send'.

2) Jeg vil godt have, at felterne forbliver når mailen er sendt. (jeg har prøvet at sætte showform til TRUE efter at mailen er sendt, men felterne er væk)

3) I stedet for at der skrive ud til brugeren, at vedkommende mangler at udfylde et eller felter, kan man ikke sætte en rød ramme om det felt som der er fejl i?

Hvordan får man koden indrammet?

    <?php
   
    $showform = TRUE;
   
    if(!isset($_POST['send'])){
       
    if(!$_POST['navn']){
    $fejl = "<p>Du mangler at udfylde dit navn.</p>";
    $showform = TRUE;
    }
   
    if(!$_POST['mail']){
    $fejl = "<p>Du mangler at udfylde din mailadresse.</p>";
    $showform = TRUE;
    }
   
    if(!$_POST['emne']){
    $fejl = "<p>Du mangler at udfylde et emne.</p>";
    $showform = TRUE;
    }
   
    if(!$_POST['besked']){
    $fejl = "<p>Du mangler at skrive en besked.</p>";
    $showform = TRUE;
    }
   
    if(!$fejl){
       
    mail("mail@minmail.dk", $_POST['navn'], $_POST['mail'], $_POST['emne'], $_POST['besked'] );   
       
    $showform = FALSE;
    } else {
        echo $fejl;   
    }
   
    if($showform)
   
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <table width="61" border="0">
        <tr>
          <td width="55"><p>Navn</p>
            <p>
                  <input type="text" name="navn" />
          </p></td>
        </tr>
        <tr>
          <td><p>Email</p>
            <p>
              <input type="text" name="mail" />
              </p>
          </td>
        </tr>
        <tr>
          <td><p>Emne</p>
            <p>
              <input type="text" name="emne" />
            </p>
          </td>
        </tr>
        <tr>
          <td valign="top">Besked
            <textarea name="besked" cols="50" rows="10"></textarea></td>
        </tr>
        <tr>
          <td>
              <input type="submit" name="send" value="Send" />
          </td>

        </tr>
    </table>
    </form>
   
    <?php
   
    }

   
    ?>
Avatar billede webweaver Praktikant
12. januar 2011 - 13:14 #7
Grunden til at du får fejlen med det samme, er fordi at der mangler en tuborgklamme i koden, samt at du har inventeret if sætningen ved at sætte et ! ind i den.

Hvis du ændrer showform til TRUE hele vejen ned igennem, vil felterne også forblive synlige. Men hvis de skal vises hele tiden, er det bedre at fjerne showform helt. Så er der ingen grund til at spilde resourcer på det.

Det kan sagtens laves, så du får en border omkring ved fejl. Det er dog ofte smart at skrive hvad fejlen er også. Ved et tomt felt, er det ikke så svært at regne ud, men hvis det er mere komplekse fejl, så fx at der ikke må bruges bestemte tegn og så videre, kan det være svært at regne ud.

Med hensyn til at få din kode indrammet, så kan du læse mere omkring tags på eksperten her, http://www.eksperten.dk/guide/1325

Og så til koden. Med ovenstående ændringer, kommer den til at se således ud,

<?php

if (isset($_POST['send'])) {

$fejl = FALSE;

if (!$_POST['navn']) {

$fejl = TRUE;

}

if (!$_POST['mail']) {

$fejl = TRUE;

}

if (!$_POST['emne']) {

$fejl = TRUE;

}

if (!$_POST['besked']) {

$fejl = TRUE;

}

if (!$fejl) {

mail("mail@minmail.dk", $_POST['navn'], $_POST['mail'], $_POST['emne'], $_POST['besked']);   

echo "Mailen blev sendt.";

}

}

?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table width="61" border="0">
<tr>
<?php

if (isset($_POST['send'])) {

if (!$_POST['navn']) {

echo '<td width="55"><p>Du skal huske at udfylde dit navn!</p><p>';

echo '<input style="border: 1px solid red" type="text" name="navn" />';

echo '</p></td>';

} else {

echo '<td width="55"><p>Navn</p><p>';

echo '<input type="text" name="navn" />';

echo '</p></td>';

}

} else {

echo '<td width="55"><p>Navn</p><p>';

echo '<input type="text" name="navn" />';

echo '</p></td>';

}
       
?>

</tr>
<tr>
<td><p>Email</p>
<p>
<input type="text" name="mail" />
</p>
</td>
</tr>
<tr>
<td><p>Emne</p>
<p>
<input type="text" name="emne" />
</p>
</td>
</tr>
<tr>
<td valign="top">Besked
<textarea name="besked" cols="50" rows="10"></textarea></td>
</tr>
<tr>
<td>
<input type="submit" name="send" value="Send" />
</td>

</tr>
</table>
</form>


Jeg har kun vist hvordan du får en rød border ved fejl på det første felt. Så burde du kunne lave det selv på resten. Det er samme fremgangsmetode, hvor navnet i variablen bare skal rettes til.
Avatar billede nph12 Nybegynder
13. januar 2011 - 19:12 #8
Super. Nu begynder det at ligne noget:-)Lige hvad jeg havde tænkt mig!

Jeg bliver lige nød til at prøve, at indramme koden


echo '<td width="55"><p>Navn</p><p>';

echo '<input type="text" name="navn" />';

echo '</p></td>';



Vil man ikke kunne skrive koden på en anden måde, da vi jo skrive ovenstående to gange?
Avatar billede webweaver Praktikant
13. januar 2011 - 19:53 #9
Jo, det kan du sagtens. Du kan lave if sætningen inde i dit input tag, så fylder det meget mindre. Ville være mere praktisk.

<?php

if (isset($_POST['send'])) {

$fejl = FALSE;

if (!$_POST['navn']) {

$fejl = TRUE;

}

if (!$_POST['mail']) {

$fejl = TRUE;

}

if (!$_POST['emne']) {

$fejl = TRUE;

}

if (!$_POST['besked']) {

$fejl = TRUE;

}

if (!$fejl) {

mail("mail@minmail.dk", $_POST['navn'], $_POST['mail'], $_POST['emne'], $_POST['besked']);   

echo "Mailen blev sendt.";

}

}

?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table width="61" border="0">
<tr>

<td width="55"><p>Navn</p><p>

<input <?php (isset($_POST['send']) AND !$_POST['navn']) {  echo 'style="border: 1px solid red"'; } ?> type="text" name="navn" />

</p></td>
       
</tr>
<tr>
<td><p>Email</p>
<p>
<input type="text" name="mail" />
</p>
</td>
</tr>
<tr>
<td><p>Emne</p>
<p>
<input type="text" name="emne" />
</p>
</td>
</tr>
<tr>
<td valign="top">Besked
<textarea name="besked" cols="50" rows="10"></textarea></td>
</tr>
<tr>
<td>
<input type="submit" name="send" value="Send" />
</td>

</tr>
</table>
</form>
Avatar billede nph12 Nybegynder
17. januar 2011 - 11:32 #10
Hmmm, jeg kan ikke får formularen til at virke.

Parse error: syntax error, unexpected '{' in C:\AppServ\www\kontakt\test4.php on line 49

Det er denne linie den brokker sig over:
<input <?php (isset($_POST['send']) AND !$_POST['navn']) {  echo 'style="border: 1px solid red"'; } ?> type="text" name="navn" />

Jeg har prøvet at se, om jeg selv kunne rette fejlen, men kan ikke finde fejlen som skal rettes.
Avatar billede webweaver Praktikant
17. januar 2011 - 14:42 #11
Jamen det kan jeg. Det har vidst gået lidt for stærkt fra min side af, og der mangler en riiimelig vigtig del :D Det kaldes if.

Den rigtige linie skal se således ud,

<input <?php if (isset($_POST['send']) AND !$_POST['navn']) { echo 'style="border: 1px solid red"'; } ?> type="text" name="navn" />
Avatar billede nph12 Nybegynder
19. januar 2011 - 10:08 #12
Jeg har tilpasset de andre felter.

Hvordan gemmer have oplysninger i formularen sådan at hvis IE crasher, at man ikke mister det indtastede? Er det sesssion vi skal bruge til dette?
Avatar billede webweaver Praktikant
19. januar 2011 - 13:00 #13
Nej. Du kan ikke bruge sessions. De determineres, når du lukker browser vinduet. Så det ville måske være noget med at gemme en cookie for hvert felt. Det vil ikke være særlig hensigtsmæssigt, hvis man skal have 5 af dem liggende fx.

Jeg synes personligt ikke at det er særlig smart at du vil lave en funktion som den. Det er vidst sjældent browseren crasher bare sådan lige. Og så er det en lillebitte form, så der er jo ikke meget at huske. Det kunne man nok godt lige overkomme at taste ind igen. En anden ulempe kan også være, at hvis du bruger cookies, så gemmer den det også selvom der ikke er noget der crasher. Og så vil den gamle mail komme frem, så længe man har cookien liggende. Det er nok mere irriterende, hvis man gerne vil skrive en ny mail. Så skal man rydde felterne. Og man kan nemt komme til at trykke enter eller noget, hvor den så sender den gamle mail afsted igen.

Og sidst men ikke mindst, så vil funktionen til at gemme mailen i cookies, først blive aktiveret ved tryk på submit. Så hvis man allerede har skrevet mailen, og den crasher før man trykker afsend, så gemmes det ikke. Hvis man trykker afsend og den ikke finder noget i den anden ende, men bare laver en timeout, gemmes det heller ikke, da den aldrig kommer frem til PHP koden der udfører det.

Nææh, det du hellere skulle gøre, er så at lave en funktion, så den gemmer de indtastede data, hvis formen ikke validerer. Sådan som det er nu, vil den slette alt i felterne, hvis du ikke udfylder alle de felter du skal, og den får en rød border. Det ville jo være meget rart, hvis den huskede det man havde skrevet i dem som ér udfyldt.

Det er vældig simpelt :)

<input type="text" name="emne" value="<?php echo $_POST["emne"]; ?> />
Avatar billede nph12 Nybegynder
20. januar 2011 - 11:45 #14
Mange tak for en fyldestgørende forklaring om, hvordan man bedst laver den omtalte funktion.

Jeg har prøvet at lave funktionen på feltet emne, men synes ikke helt at det virker som det skal. Det indtastede forsvinder, hvis det har været rød ramme om et af de andre felter.


<tr>
<td width="55"><p>Emne</p><p>
<input <?php if (isset($_POST['send']) AND !$_POST['Emne']) { echo 'style="border: 1px solid red"'; } ?> type="text" name="emne" value="<?php echo $_POST['emne'];?>" />
</p></td>
</tr>
Avatar billede webweaver Praktikant
20. januar 2011 - 13:39 #15
Altså, når du taster emne ind fx, men ikke navn, og så trykker send .. Så kommer der en rød border omkring inputfeltet ved Navn, men teksten i emne du har udfyldt forsvinder? Bør den slet ikke gøre. Det forstår jeg ikke meget af.

Har du prøvet at skrive $_POST["emne"]; både med ", med ' og uden noget overhovedet, for at se om det gør en forskel? Prøv også at lave mellemrum igen mellem ; og ?> ...

Du skal selvfølgelig også lave det på de andre felter, for at den husker dets værdi der.
Avatar billede nph12 Nybegynder
20. januar 2011 - 17:39 #16
Jeg prøver lige her i aften eller i morgen og ser, om jeg selv kan finde ud af, hvorfor det driller. Jeg vender tilbage, når jeg lige selv har prøvet.
Avatar billede nph12 Nybegynder
21. januar 2011 - 09:54 #17
Nu virker det i hvert fald:-) Jeg laver lige det for resten af felterne.

Jeg er i bund og grund rigtigt glæd for kontaktformularen som den er nu, men synes du, at der mangler noget på  kontaktformularen eller noget vi kan lave bedre?
Avatar billede nph12 Nybegynder
21. januar 2011 - 09:59 #18
Jeg var vist lige lidt for hurtig. Godt nok husker kontaktformularen nu det indtastet, men desværre viser den rød ramme om feltet selvom der står noget i feltet og man har opdateret formularen ved at trykke på send
Avatar billede webweaver Praktikant
21. januar 2011 - 12:00 #19
<?php if (isset($_POST['send']) AND !$_POST['Emne']) { echo 'style="border: 1px solid red"'; } ?>

Emne står med stort e. Prøv at rette det til småt. Det gør garanteret en forskel :-)
Avatar billede nph12 Nybegynder
22. januar 2011 - 11:09 #20
Ja, det var grunden til at det ikke virkede. Nu kører det som det skal - laver det lige for de andre felter.


Synes du, at der mangler noget på kontaktformularen eller noget vi kan lave bedre?
Avatar billede webweaver Praktikant
22. januar 2011 - 17:11 #21
Har du et link til den, så jeg lige kan se/teste lidt på den?
Avatar billede nph12 Nybegynder
22. januar 2011 - 20:44 #22
Jeg har ikke fået oprettet/købt et webhotel endnu. Kender du et godt sted, hvor jeg hurtigt kan uploade kontaktformularen for test?

Jeg kan lægge hele koden op i denne tråd, når jeg har fået rette de sidste felter (har ikke lige fået kigget på det endnu).
Avatar billede webweaver Praktikant
22. januar 2011 - 20:56 #23
Okay. Nej, jeg kender ikke noget til gratis webhoteller længere. Benytter mig udelukkende at betalingstjenester.

De behøver ikke lægge koden op. Nu har du validering på din form og den kan sende mails går jeg ud fra. Det er begrænset hvor meget man kan lave med en mailform jo. Du skriver ikke hvad fejlen er, hvis du ikke har udfyldt et felt.. Det kan være en ulempe. Men hvis det bare er fordi feltet er tomt, så kan det godt gå an.
Avatar billede nph12 Nybegynder
23. januar 2011 - 09:10 #24
Hvordan får jeg udskrevet selve fejlen til brugeren?
Avatar billede webweaver Praktikant
23. januar 2011 - 14:23 #25
Det kan du se i indlæg #3 i starten af scriptet.
Du skal faktisk bare bruge den samme if sætning, som du bruger til at lave den røde border. Den kopierer du bare derhen, hvor du vil vise fejlen, og så istedet for at den udfører noget CSS, skal du bare lave en tekst i stedet.
Avatar billede nph12 Nybegynder
26. januar 2011 - 15:33 #26
Hvorfor forsvinder teksten på denne textarea? Når jeg kigger i kilde under IE, så husker den det indtastet, men viser det ikke.


<tr>
<td width="55"><p>Besked</p><p>
<textarea <?php if (isset($_POST['send']) AND !$_POST['besked']) { echo 'style="border: 1px solid red"'; } ?> type="text" name="besked" cols="50" rows="10" value="<?php echo $_POST['besked'];?>"></textarea>
</p></td>
</tr>
Avatar billede webweaver Praktikant
26. januar 2011 - 16:42 #27
Fordi at der ikke er en attribut i <textarea> der hedder value. Det kan du selvfølgelig ikke vide, men din kode skal se således ud,

<tr>
<td width="55"><p>Besked</p><p>
<textarea <?php if (isset($_POST['send']) AND !$_POST['besked']) { echo 'style="border: 1px solid red"'; } ?> type="text" name="besked" cols="50" rows="10"><?php echo $_POST['besked']; ?></textarea>
</p></td>
</tr>
Avatar billede nph12 Nybegynder
26. januar 2011 - 19:58 #28
Nu virker også textarea feltet. Hvordan får jeg kontaktformularen til at slette felterne, når mailen er sendt?
Avatar billede webweaver Praktikant
26. januar 2011 - 20:59 #29
Prøv med funktionen unset();

unset($_POST["navn"], $_POST["emne"], $_POST["besked"]);

Det skal sættes ind ved mail funktionen.

...

if (!$fejl) {

mail("mail@minmail.dk", $_POST['navn'], $_POST['mail'], $_POST['emne'], $_POST['besked']);   

echo "Mailen blev sendt.";

unset($_POST["navn"], $_POST["emne"], $_POST["besked"]);

}

...
Avatar billede nph12 Nybegynder
27. januar 2011 - 15:36 #30
Nu virker det også:-) Jeg kom ikke så langt med fejlmeddelelserne - for at være ærlig, så fik jeg ikke kigget på det - , men tænkte om det ikke var en idé, at lave fejlmeddelelsen ud ad det felt, hvor fejlen er. Hvordan laver man dette?

Skal man starte med at kalde jer fejl ved navn (altså "navn" feltet får variablen $navn; osv.)?

Så tjekker man til sidst alle felterne for fejl. Er det den måde man skal lave det på? 

Jeg synes ikke, at vi skal tjekker 117 ting, men måske var det en idé også at tjekke om der er skrevet en korrekt mailadresse, så på mail feltet vil der være to fejlmeddelelser (tomt og ikke en korrekt mailadresse).
Avatar billede webweaver Praktikant
27. januar 2011 - 16:14 #31
Hvor du vil vise fejlen, kan du faktisk helt selv styre mere eller mindre.

Du skal bare sætte fx dette ind, hvor den enkelte fejl skal vises,

<?php

if ($navn_error) {

echo $navn_error;

}

?>


Selve variablen sættes oppe i den if sætning, som allerede er i scriptet. Det samme gælder for de andre fejl du ønsker at checke for.

if (!$_POST['navn']) {

$fejl = TRUE;

}


rettes til

if (!$_POST['navn']) {

$navn_error = "Du har ikke udfyldt dit navn.";
$fejl = TRUE;

}


Hvis du gerne vil checke om en mail er gyldig, kan det betale sig at vi går over i Regular Expressions (Regex).

Og så skal du ændre

if (!$_POST['mail']) {

$fejl = TRUE;

}


til

define("PATTERN_EMAIL", "/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/");

if (!$_POST['mail']) {

$mail_error = "Mail er ikke udfyldt.";
$fejl = TRUE;

} else if (!preg_match(PATTERN_EMAIL, $_POST['mail'])) {

$mail_error = "Din mail er ikke gyldig!";
$fejl = TRUE;

}


Igen som ved navn, så der hvor du skal vise mail fejlen, indsætter du,

<?php

if ($mail_error) {

echo $mail_error;

}

?>
Avatar billede nph12 Nybegynder
27. januar 2011 - 20:21 #32
Er er vi efterhånden i mål:-) Det virker super fedt.

Dog har jeg en lille ting, som jeg godt vil lave om. Når man har sendt en mail, så skriver kontaktformularen "Mailen blev sendt", hvilket er fint nok, når man lige har sendt mailen, men kan man ikke få den til at forsvinde efter noget tid?

Eller skal man lave en side, hvor man skriver noget mere end bare "Mailen blev sendt", og så først reloade kontaktformularen næste gang brugeren kommer ind på siden kontakt.

Må jeg spørge dig om, hvordan du er blevet så god til php?
Avatar billede nph12 Nybegynder
27. januar 2011 - 20:28 #33
Er er vi efterhånden i mål:-) = Vi er efterhånden i mål:-)
Avatar billede webweaver Praktikant
28. januar 2011 - 16:53 #34
Du kan sagtens lave et redirect, hvis det er det du vil. Vi kan jo lave det i PHP, når vi nu arbejder med dette. Der er dog nogle "krav" for at denne funktion kan virke, og det er, at funktionen skal afvikles, inden der outputtes til browseren.

Med andre ord, så skal din PHP kode rykkes op i toppen af din fil, før <html> <head> og så videre ...

Din kode vil nu se ud som noget ala,

<?php

if (isset($_POST['send'])) {

$fejl = FALSE;

if (!$_POST['navn']) {

$navn_error = "Du har ikke udfyldt dit navn.";
$fejl = TRUE;

}

define("PATTERN_EMAIL", "/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/");

if (!$_POST['mail']) {

$mail_error = "Mail er ikke udfyldt.";
$fejl = TRUE;

} else if (!preg_match(PATTERN_EMAIL, $_POST['mail'])) {

$mail_error = "Din mail er ikke gyldig!";
$fejl = TRUE;

}

if (!$_POST['emne']) {

$fejl = TRUE;

}

if (!$_POST['besked']) {

$fejl = TRUE;

}

if (!$fejl) {

mail("mail@minmail.dk", $_POST['navn'], $_POST['mail'], $_POST['emne'], $_POST['besked']);   

unset($_POST["navn"], $_POST["emne"], $_POST["besked"]);
header( "refresh:5;url=minSide.php" ); // 5 er antal sekunder før redirect

}

}

?>

<DOCTYPE ...>

<html>

<head>...</head>

<body>

...

<?php if (!$fejl) { echo "Din mail blev sendt."; } ?>

...


Ja, det må du da gerne spørge om :) Det handler bare om træning, træning og træning. At arbejde med det og have en interesse/passion for det. Jeg sidder med det stort set hver dag. Så skal det nok også komme. Det tager sin tid, men det kommer for de fleste. Når man først forstår logikken og måden PHP arbejder på, så bliver det hele meget nemmere. Men der er altid noget nyt at lære inden for programmering. Også for mig. :)
Avatar billede nph12 Nybegynder
31. januar 2011 - 18:31 #35
Jeg har besluttet mig for, at jeg vil lære at programmere hjemmesider, men er også godt klar over at det kræver en del træning. Jeg vil fremover bruge noget tid hver aften for at blive bedre.

Er der andre ting, man skal tage højde for ved en kontaktformular? Kan man lave kontaktformularen mere enkelt? Her tænker jeg på, om man kan lave nogle funktioner som f.eks. tjek om emailadressen er skrevet rigtigt.

Hvad med tegnsæt? Understøtter kontaktformularen æ,ø og å?
Avatar billede webweaver Praktikant
01. februar 2011 - 00:16 #36
Det lyder fornuftigt, hvis det er noget du gerne vil udvikle dig inden for :)

Det er begrænset hvad man laver på en mailform. (kontaktformular). Du har allerede validering på om en mailadresse er korrekt udfyldt (du kan "ikke" checke om mailen bogstaveligttalt findes). Det lavede vi tidligere i tråden.

Hvis du har tegnsæt sat til UTF-8, din fil er gemt i dette format og serveren er sat op til det (hvilket den som regel er), så ja, så vil du ikke have nogle problemer med det.

Men det er jo bare at teste, når du får lagt det op :)
Avatar billede nph12 Nybegynder
01. februar 2011 - 10:58 #37
OK. Jeg tager lige en kopi af vores kontaktformular og leger lidt med det selv her de næste par dage. Jeg vil bare prøve at skrive koden lidt mere efter min logik og stil (koden står lidt overskuelig nu). Jeg vender tilbage, hvis jeg støder ind i problemer.

Kontaktformularen kan helt klart det, som det skal kunne nu:-)
Avatar billede webweaver Praktikant
01. februar 2011 - 15:59 #38
Hvis kontaktformularen er som den skal være, så smider jeg et svar :)
Avatar billede nph12 Nybegynder
01. februar 2011 - 19:39 #39
Tusind tak for hjælpen. Du har været en stor hjælp:-)
Avatar billede webweaver Praktikant
01. februar 2011 - 19:41 #40
Det var så lidt :-)
Avatar billede nph12 Nybegynder
03. marts 2011 - 21:16 #41
Kom lige i tænke om noget:-) Jeg har tænkt mig at lave en hovedside, og så inkludere mine undersider vha. include, så bliver det noget svært at lave en redirect, da denne skal afvikles head'en.

Hvordan kan jeg både lave includes af mine undersider samt lave redirects? Vil en redirect funktion være en løsning?
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