PHP Formulier komt soms niet goed op de mail...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wouter Snijders

Wouter Snijders

27/07/2011 12:15:32
Quote Anchor link
Hallo Mensen , ik zit hier met een nogal vaag probleem en ik kan de oorzaak niet echt vinden in mijn script , misschien dat jullie het wel zien >

Het is een prijsaanvraagformulier waar men verschillende vakjes invult en dan komt het vervolgens aan in onze mailbox op het bedrijf.

Alleen soms krijgen we de mail dubbel binnen en in het gekste geval krijgen we het formulier binnen met het antwoord van 1 vakje maar dan in alle vakjes van het formulier terwijl daar dus eigenlijk wat anders hoort te staan... , dus dat klopt helemaal niet. (hopelijk snappen jullie wat ik bedoel X_x)

Hier is het script >

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
118
119
120
<?php
session_start(); // zorg ervoor dat session_start ALTIJD bovenaan ALLES van je pagina staat, anders werkt het niet!

// E-mailadres van de ontvanger

$mail_ontv = '[email protected]'  ; // <<<----- voer jouw e-mailadres hier in!

// Speciale checks voor naam en e-mailadres

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // naam controle
    if (!preg_match('/[ a-zA-Z-]$/', $_POST['naam']))
        $naam_fout = 1;
    // e-mail controle
    if (function_exists('filter_var') && !filter_var($_POST['mail'], FILTER_VALIDATE_EMAIL))
            $email_fout = 1;
    }


// Kijk of alle velden zijn ingevuld - naam mag alleen uit letters bestaan en het e-mailadres moet juist zijn
if (($_SERVER['REQUEST_METHOD'] == 'POST' && ( empty($_POST['naam']) || !empty($naam_fout) || empty($_POST['mail']) || !empty($email_fout) || empty($_POST['bericht5']) || empty($_POST['bericht4']) || empty($_POST['bericht3']) || empty($_POST['bericht1']) || empty($_POST['bericht2']))) || $_SERVER['REQUEST_METHOD'] == 'GET')
{

    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {

        if (!empty($naam_fout))
            echo '<p>Uw naam mag alleen letters bevatten.</p>';
        elseif (!empty($email_fout))
            echo '<p>Uw e-mailadres is niet juist.</p>';
        else
            echo '<p>U bent uw naam, e-mailadres of telefoonnummer vergeten in te vullen.</p>';
    }

        
  // HTML e-mail formlier
  echo '<form method="post" action="' . $_SERVER['REQUEST_URI'] . '" />
  <p>
      
      <label for="naam">Naam :</label><br />
      <input type="text" id="naam" name="naam" value="'
. htmlspecialchars($_POST['naam']) . '" /><br />
      
      <label for="mail">E-mailadres :</label><br />
      <input type="text" id="mail" name="mail" value="'
. htmlspecialchars($_POST['mail']) . '" /><br />
      
      <label for="naam">Telefoonnummer :</label><br />
      <input type="text" id="telefoonnummer" name="telefoonnummer" value="'
. htmlspecialchars($_POST['telefoonnummer']) . '" /><br />
      
      <label for="onderwerp">Van Land/Postcode :</label><br />
      <textarea id="text" name="bericht1" rows="1" style="width: 400px;">'
. htmlspecialchars($_POST['bericht']) . '</textarea><br
/>
        
      <label for="onderwerp">Naar Land/Postcode :</label><br />
      <textarea id="text" name="bericht2" rows="1" style="width: 400px;">'
. htmlspecialchars($_POST['bericht']) . '</textarea><br
/>
      
      <label for="onderwerp">Aantal/Type Pallets / Laadmeter :</label><br />
      <textarea id="text" name="bericht3" rows="1" style="width: 400px;">'
. htmlspecialchars($_POST['bericht']) . '</textarea><br
/>
      
      <label for="onderwerp">Gewicht / Afmetingen :</label><br />
      <textarea id="text" name="bericht4" rows="1" style="width: 400px;">'
. htmlspecialchars($_POST['bericht']) . '</textarea><br
/>

      <label for="onderwerp">Gewenste Ophaal en Afleverdatum :</label><br />
      <textarea id="text" name="bericht5" rows="3" style="width: 400px;">'
. htmlspecialchars($_POST['bericht']) . '</textarea><br />

      <label for="bericht">Extra Informatie :</label><br />
      <textarea id="bericht" name="bericht" rows="7" style="width: 400px;">'
. htmlspecialchars($_POST['bericht']) . '</textarea><br />    
            
      <input type="submit" name="submit" value=" Versturen " />
  </p>
  </form>'
;
}

// versturen naar
else
{      
  // set datum
  $datum = date('d/m/Y H:i:s');
    
  $inhoud_mail = "===================================================\n";
  $inhoud_mail .= "Prijsaanvraag via Website " . $_SERVER['HTTP_HOST'] . "\n\n";
  
  $inhoud_mail .= "Verstuurd op " . $datum . " via het IP adres " . $_SERVER['REMOTE_ADDR'] . "\n\n";
  
  $inhoud_mail .= "Naam : " . htmlspecialchars($_POST['naam']) . "\n\n";
  $inhoud_mail .= "E-mail adres : " . htmlspecialchars($_POST['mail']) . "\n\n";
  $inhoud_mail .= "Telefoonnummer : " . htmlspecialchars($_POST['telefoonnummer']) . "\n\n";
  $inhoud_mail .= "Van Land/Postcode : " . htmlspecialchars($_POST['bericht1']) . "\n\n";
  $inhoud_mail .= "Naar Land/Postcode : " . htmlspecialchars($_POST['bericht2']) . "\n\n";
  $inhoud_mail .= "Aantal/Type Pallets / Laadmeter : " . htmlspecialchars($_POST['bericht3']) . "\n\n";
  $inhoud_mail .= "Gewicht / Afmetingen : " . htmlspecialchars($_POST['bericht4']) . "\n\n";
  $inhoud_mail .= "Gewenste Ophaal en Afleverdatum : " . htmlspecialchars($_POST['bericht5']) . "\n\n";
  
  $inhoud_mail .= "Extra Informatie :\n";
  $inhoud_mail .= htmlspecialchars($_POST['bericht']) . "\n\n";  
    
  $inhoud_mail .= "===================================================\n\n";
  
  // --------------------
  // spambot protectie
  // ------

  
  $headers = 'From: ' . htmlspecialchars($_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
  
if (mail($mail_ontv, 'Prijsaanvraag via XXXX.nl', $inhoud_mail, $headers))
{

      
      echo '<h1>Uw Prijsaanvraag is verzonden</h1>
      
      <p>Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk uw Prijsaanvraag in behandeling nemen!.</p>'
;
  }

  else
  {
      echo '<h1>Uw Prijsaanvraag is niet verzonden, er is iets mis gegaan.</h1>
      
      <p><b>Onze excuses.</b> Uw Prijsaanvraag kon niet verzonden worden, er is iets mis gegaan.</p>'
;
  }
}

?>
Gewijzigd op 27/07/2011 12:17:25 door Wouter Snijders
 
PHP hulp

PHP hulp

25/11/2024 01:43:28
 
Bas IJzelendoorn

Bas IJzelendoorn

27/07/2011 13:35:07
Quote Anchor link
Het is een niet echt betrouwbaar script.

Je gebruikt sowieso niet de goede mail headers, waardoor hij in de spambox kan komen.

Als ik zou vrij mag zijn santhe?
http://phpwiki.santhe.nl/index.php/De_juiste_mailheaders

Tevens snap ik niet waarom er 2x (regel 19 + 21):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (($_SERVER['REQUEST_METHOD'] == 'POST'


Je gebruikt ook:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$_POST['bericht']

dit verwijst naar de 'name' in je input veld. die zijn daar gedefinieerd als : bericht1, bericht2, bericht3, bericht4

Als je dus de 1e keer iets fout invult dan krijg je in alle velden bericht te zien ipv bericht3 die het had moeten zijn.

Waar haal jij: $naam_fout vandaan (en meerdere vergelijkbare variablen)? Deze vind ik niet eerder gedefinieerd.

Dit is geen goede fout afhandeling:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
if (!empty($naam_fout))
            echo '<p>Uw naam mag alleen letters bevatten.</p>';

Vertaald: Als $naam_fout niet leeg is dan geef je een error? een uitroepteken doet het tegenovergestelde.
Gewijzigd op 27/07/2011 13:35:59 door Bas IJzelendoorn
 
Wouter Snijders

Wouter Snijders

27/07/2011 13:39:31
Quote Anchor link
Eigenlijk kan ik op alles heel kort zijn , ik ben nogal slecht in PHP , sommige dingen snap ik wel wat het is maar het meeste niet , dus al jou vragen kan ik niet echt antwoord op geven.

Ik heb dit script van iemand overgenomen die het ook gebruikt , en het werkt ook 8 van de 10 keer goed , alleen soms dus niet , vandaar dat ik mijn vraag hier neerzette zodat iemand de fouten er voor mij uit kan halen en een verbeterde versie kan geven.

BTW , het is nog nooit in de spambox gekomen dus dat werkt wel goed.
Gewijzigd op 27/07/2011 13:40:07 door Wouter Snijders
 
Bas IJzelendoorn

Bas IJzelendoorn

27/07/2011 13:54:05
Quote Anchor link
8 van de 10 keer is natuurlijk niet voldoende. Ik lees iets over een bedrijf en vermoed dat het om een soort bestel formulier gaat dan betekend het dat je van bijvoorbeeld 100 bezoekers op je website 10 klanten binnen haalt, waarvan er 2 blijkbaar geen bestelling kunnen plaatsen en het bericht verdwenen is. Dat kan natuurlijk niet ;) Ik denk dat dit niet echt betrouwbaar formulier is en je beter naar iets anders zou kunnen gaan kijken.

Ik wil best tegen betaling/vergoeding (op factuur mogelijk) een formulier bouwen met anti-spam beveiliging, goede mail headers en goede fout afhandeling. Mocht je interesse hebben kan je me een PM sturen.
 
Wouter Snijders

Wouter Snijders

27/07/2011 13:57:06
Quote Anchor link
@Bas

Bedankt voor je reactie, ik zal het in gedachten houden! , alleen ik denk niet dat mijn baas zit te wachten op een ander formulier waarvoor betaald moeten worden...maar ik zal het aan hem voorleggen.

8 van de 10 is zeker niet goed genoeg , dus ik hoop dat iemand de fouten er uit kan halen en een goede versie kan plaatsen voor ons.
 
- SanThe -

- SanThe -

27/07/2011 14:32:35
Quote Anchor link
Je opzet is gewoon niet goed.

Deze regel bijvoorbeeld, heb je maar één keer nodig:
if ($_SERVER['REQUEST_METHOD'] == 'POST')
Verder heeft Bas al diverse dingen aangegeven.
Mag het niks kosten? Begin dan opnieuw en doe het beter.

Dat iets niet in de spambox komt bij jou is geen garantie. Zoals reeds gezegd, de mailheaders zijn niet correct. Het kan zelfs zijn dat sommige servers de mail niet eens aanpakken.
 
Wouter Snijders

Wouter Snijders

27/07/2011 14:35:59
Quote Anchor link
Ik heb geprobeerd die regel weg te halen maar dan krijg ik overal syntaxfouten en werkt helemaal niet meer... , dus ik ben nu aan het uitzoeken hoe ik die regel er veilig uit te krijgen zonder dat er verder iets kapot gaat in het script.

PS Nog even wat anders , misschien bedoel je met mailheader dat [email protected] , dat heb ik natuurlijk even verzonnen , dus dat klopt.
Gewijzigd op 27/07/2011 14:40:55 door Wouter Snijders
 
- SanThe -

- SanThe -

27/07/2011 14:46:57
Quote Anchor link
Wouter Snijders op 27/07/2011 14:35:59:
Nog even wat anders , misschien bedoel je met mailheader dat [email protected] , dat heb ik natuurlijk even verzonnen , dus dat klopt.


Nee, de inhoud van From is al fout.
Zie die link:
Bas IJzelendoorn op 27/07/2011 13:35:07:
 
Wouter Snijders

Wouter Snijders

27/07/2011 14:50:32
Quote Anchor link
Ja die link had ik gezien , alleen ik ben nog aan het uitvogelen hoe dat allemaal werkt en waar ik dat moet neerzetten en wat er weg moet etc etc... , ik vind PHP erg lastig in vergelijking met HTML.

Toevoeging op 27/07/2011 15:15:12:

@SanThe of Bas

Ik heb net die mailheaders gebruikt , maar nu krijg ik een Internal Server Error ,

Wat moet ik wel en niet gebruiken van dit script? , en het gedeelte van Afzender is toch niet nodig? , want dat vullen de klanten in het formulier in.

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
<?php
// Geef GELDIGE adressen op
// Een korte benaming voor jouw website

$website_naam = 'XXXX';
// Jouw eigen geldige emailadres
$eigen_emailadres = '[email protected]';
// Een geldig emailadres voor errors
$error_emailadres = '[email protected]';
// De naam van de verzender
$naam_verzender = '?';
// Het geldige emailadres van de afzender
$email_verzender = '???';
// Een geldig emailadres of helemaal leeg laten
$bcc_emailadres = '???';
// HTML mail? True/False
$html = true;

// De headers samenstellen
$headers     = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . PHP_EOL;
$headers    .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . PHP_EOL;
$headers    .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . PHP_EOL;
$headers    .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . PHP_EOL : '';
$headers    .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
$headers    .= 'X-Priority: Normal' . PHP_EOL;
$headers    .= ($html) ? 'MIME-Version: 1.0' . PHP_EOL : '';
$headers    .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . PHP_EOL : '';
?>
 



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.