Notice: Undefined index in mailform??

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mrhocoma

mrhocoma

23/08/2006 21:08:00
Quote Anchor link
Wat gaat hier fout. Ik krijg nu bij includen van een mailform allemaal foutmeldingen.

Raar want ik gebruik dit formulier ok op een andere site en daar gaat alles goed.

de meldingen:

kijkzelf maar http://www.pizzajolly.nl/?actie=contact

en dit is een stukje van de eerste regel 19:
// als er niet op submit is gedrukt, of als er wel op is gedrukt maar niet alles ingevoerd is
if (!$_POST['submit'] || $_POST['submit'] && (!$_POST['naam'] || !$_POST['mail'] || !checkmail($_POST['mail']) || !$_POST['msggs'] || !$_POST['onderwerp']))

Heeft dit met server instellingen te maken? Zo ja wat moet daar dan anders. Of is in de code iets verkeerd? Wie helpt
 
PHP hulp

PHP hulp

29/04/2024 03:04:01
 
Frank -

Frank -

23/08/2006 21:12:00
Quote Anchor link
De code is niet compleet. Jij gaat er van uit dat een variabele bestaat, ook al is daar geen enkele reden voor. Controleer dus met isset() of empty() of een variabele bestaat (en inhoud heeft) voordat je hier wat mee gaat doen.

Controleren of er een formulier is verstuurd, kun je beter doen met de volgende code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
  // verwerk formulier
}
?>

Dan kan de bezoeker ook de enter gebruiken om het formulier te verzenden. Niet iedere browser stuurt namelijk de inhoud van de submit mee bij het gebruik van enter.
 
Mrhocoma

mrhocoma

23/08/2006 21:15:00
Quote Anchor link
Bij deze de hele script dan nog maar even:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?
// geef e-mail adres op van ontvanger
$mail_ontv = "[email protected]";

// is niet 100% !!!
function checkmail($mail)
{

    $email_host = explode("@", $mail);
    $email_host = $email_host['1'];
    $email_resolved = gethostbyname($email_host);

    if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
        $valid = 1;

    return $valid;
}


// als er niet op submit is gedrukt, of als er wel op is gedrukt maar niet alles ingevoerd is
if (!$_POST['submit'] || $_POST['submit'] && (!$_POST['naam'] || !$_POST['mail'] || !checkmail($_POST['mail']) || !$_POST['msggs'] || !$_POST['onderwerp']))
{

    if ($_POST['submit'] && (!$_POST['naam'] || !$_POST['mail'] || !checkmail($_POST['mail']) || !$_POST['msggs'] || !$_POST['onderwerp']))  
    {

        echo "U bent uw naam, e-mail adres, onderwerp of bericht vergeten in te vullen.
        Ook kan het zijn "
;
        echo "dat u een verkeerd e-mail adres hebt ingevuld.<p>";
    }

      
    // form + tabel
    echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
    echo "<form method=\"POST\" ACTION=\"" . $_SERVER['PHP_SELF'] . "?actie=contact\">";
      
    // naam
    echo "<tr><td>Naam:</td></tr>";
    echo "<tr><td><input type=\"text\" name=\"naam\" value=\"" . $_POST['naam'] . "\"></td></tr>";
      
    // space
    echo "<tr><td>&nbsp;</td></tr>";
      
    // mail
    echo "<tr><td>E-mail adres:</td></tr>";
    echo "<tr><td><input type=\"text\" name=\"mail\" value=\"" . $_POST['mail'] . "\"></td></tr>";
      
    // space
    echo "<tr><td>&nbsp;</td></tr>";
      
    // mail
    echo "<tr><td>Onderwerp:</td></tr>";
    echo "<tr><td><input type=\"text\" name=\"onderwerp\" value=\"" . $_POST['onderwerp'] . "\"></td></tr>";
      
    // space
    echo "<tr><td>&nbsp;</td></tr>";
      
    // mail
    echo "<tr><td>Bericht:</td></tr>";
    echo "<tr><td><TEXTAREA name=\"msggs\" ROWS=\"6\" COLS=\"40\">" . htmlentities($_POST['msggs']) . "</TEXTAREA></td></tr>";
      
    // space
    echo "<tr><td>&nbsp;</td></tr>";
      
    // button
    echo "<tr><td>&nbsp;</td></tr>";
    echo "<tr><td><input type=\"submit\" name=\"submit\" value=\"Versturen\"></td></tr>";
      
    // sluit form + tabel
    echo "</form>";
    echo "</table>";
}

// versturen naar
else
{      
    // set datum
    $datum = date("d.m.Y H:i");
      
    // set ip
    $ip = $_SERVER['REMOTE_ADDR'];
      
    $inhoud_mail = "===================================================\n";
    $inhoud_mail .= "Ingevuld formulier van PIZZAJOLLY.nl\n";
    $inhoud_mail .= "===================================================\n\n";
      
    $inhoud_mail .= "Naam: " . $_POST['naam'] . "\n";
    $inhoud_mail .= "E-mail adres: " . $_POST['mail'] . "\n";
    $inhoud_mail .= "Bericht:\n";
    $inhoud_mail .= $_POST['msggs'] . "\n\n";
      
    $inhoud_mail .= "Verstuurd op $datum via het ip " . $ip . "\n\n";
      
    $inhoud_mail .= "===================================================\n\n";
    
    // --------------------
    // spambot protectie
    // ------
    // van de tutorial: http://www.phphulp.nl/php/tutorials/10/340/
    // ------

    
    $headers = "From: " . $_POST['naam'] . " <" . $_POST['mail'] . ">";
    
    $headers = stripslashes($headers);
    $headers = str_replace("\n", "", $headers); // Verwijder \n
    $headers = str_replace("\r", "", $headers); // Verwijder \r
    $headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
    
    $_POST['onderwerp'] = str_replace("\n", "", $_POST['onderwerp']); // Verwijder \n
    $_POST['onderwerp'] = str_replace("\r", "", $_POST['onderwerp']); // Verwijder \r
    $_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes
    
    mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers);
    
    echo "Uw bericht is verstuurd.";
    
    echo "Bedankt voor uw bestelling / aanvraag.";
    // echo "krijgen indien dit nodig is.</p>";
    
    //echo "<p>We nemen alles serieus en zullen vertrouwelijk omgaan met de informatie ";
    //echo "die we binnen krijgen. Je e-mail adres zal nooit aan derden worden verstrekt.</p>";

}
?>
 
Frank -

Frank -

23/08/2006 21:23:00
Quote Anchor link
Nog een keertje:
if (!$_POST['submit'] || $_POST['submit'] && (!$_POST['naam'] || !$_POST['mail'] || !checkmail($_POST['mail']) || !$_POST['msggs'] || !$_POST['onderwerp']))

Wie zegt dat $_POST['submit'] bestaat? Deze kan alleen bestaan wanneer het formulier is verstuurd. Is er (nog) niets verstuurd, dan zal deze variabele dus niet bestaan. Dit resulteert in een keurige notice.
if(!empty($_POST['submit'])){
doet al wonderen.

Maar zoals ik al eerder zei, controlere of $_POST['submit'] is niet de beste manier om te checken of de server een formulier heeft ontvangen. Zie mijn vorige reactie.
 
Bo az

Bo az

23/08/2006 21:37:00
Quote Anchor link
Een ! maakt van true -> false en van false -> true, een constructie als:
$_POST['submit'] && (!$_POST['naam'] || !$_POST['mail'] || !checkmail($_POST['mail']) || !$_POST['msggs'] || !$_POST['onderwerp'])
Levert misschien wel het gewenste resultaat maar erg netjes is het niet.

Als je alleen wil weten of een variabele bestaat, gebruik dan:
isset($_POST['mail'], $_POST['msggs'], $_POST['etc']);

Als je wil weten of een variabele inhoud heeft, gebruik dan:
empty($_POST['mail]) || empty($_POST['etc'])

Edit:
Links:
http://php.net/empty
http://php.net/isset
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Mrhocoma

mrhocoma

23/08/2006 23:21:00
Quote Anchor link
Ok bedankt,

Ga er mee stoeien. Hoop dat het lukt het is me nog niet erg duidelijk zo.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.