Beste,

Onderaan vinden jullie een script.
Dit script moet een aantal stappen doorlopen om te kijken of het goed is.
Maar ergens gaat het fout en krijg ik de melding dat: "U bent uw naam, e-mailadres, adres of stickerkeuze vergeten in te vullen."

Ik heb het script met mijn verstand een aantal keren nagelopen.... Ik kan het probleem echt niet vinden.
Waar gaat het fout?

Ik hoor graag van jullie wat ik anders moet doen....

Alvast hartelijk dank voor het bekijken van het script.

Groet en wellicht voor sommige zo, slaap lekker.


<style type="text/css">
.letop {
	color: #F00;
}
</style>
<?php
//session_start(); // zorg ervoor dat session_start ALTIJD bovenaan ALLES van je pagina staat, anders werkt het niet!
 
/*******************************
*        CONTACT FORMULIER                     *
*        contactformulier.php             *
*                                                             *
*        Author: Miranda Verburg         *
*        Datum: 10 september 2010     *
*                                                             *
*        Pas het e-mail adres aan     *
*        bij $mail_ontv en upload   *
*        het naar je webserver..         *
********************************/

// E-mailadres van de ontvanger
$mail_ontv = '[email protected]' . ','; // <<<----- voer jouw e-mailadres hier in!
$mail_ontv2 = ($_POST['email']); // <<<----- Dit is het emailadres van de bestellende!

// Speciale checks voor naam en e-mailadres
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // naam controle
    if (empty($_POST['naam']))
        $naam_fout = 1;
    // e-mail controle
    if (function_exists('filter_var') && !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
            $email_fout = 1;
    // antiflood controle
    if (!empty($_SESSION['antiflood']))
    {
        $seconde = 120; // 120 seconden voordat dezelfde persoon nog een keer een e-mail mag versturen
        $tijd = time() - $_SESSION['antiflood'];
        if($tijd < $seconde)
            $antiflood =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($antiflood) || empty($_POST['naam']) || !empty($naam_fout) || empty($_POST['email']) || empty($_POST['stickerkeus']) || !empty($email_fout) || empty($_POST['telefoon']) || empty($_POST['adres']))) || $_SERVER['REQUEST_METHOD'] == 'GET')
{
    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        if (!empty($naam_fout))
            echo '<p>Uw naam is niet ingevuld.</p>';
        elseif (!empty($email_fout))
            echo '<p>Uw e-mailadres is niet juist.</p>';
        elseif (!empty($antiflood))
            echo '<p>U mag slechts &eacute;&eacute;n bericht per ' . $seconde . ' seconde versturen.</p>';
        else
            echo '<p>U bent uw naam, e-mailadres, adres of stickerkeuze vergeten in te vullen.</p>';
    }

  // HTML e-mail formlier
  
    echo '  
Prijzen zijn exclusief verzend kosten van een postzegel!  ';


  echo '<form method="post" action="' . $_SERVER['REQUEST_URI'] . '" />
<p>

<table width="600" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td width="200"><label for="naam">Naam:</label></td>
    <td width="200"><input type="text" id="naam" name="naam" value="' . (isset($_POST['naam']) ? htmlspecialchars($_POST['naam']) : '') . '" /></td>
    <td width="200">&nbsp;</td>
  </tr>
  <tr>
    <td><label for="adres">Adres:<label></td>
    <td><input type="text" id="adres" name="adres" value="' . (isset($_POST['adres']) ? htmlspecialchars($_POST['adres']) : '') . '"/></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><label for="postcode">Postcode:</label></td>
    <td><input type="text" id="postcode" name="postcode" value="' . (isset($_POST['postcode']) ? htmlspecialchars($_POST['postcode']) : '') . '"/></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><label for="woonplaats">Woonplaats:</label></td>
    <td><input type="text" id="woonplaats" name="woonplaats" value="' . (isset($_POST['woonplaats']) ? htmlspecialchars($_POST['woonplaats']) : '') . '"/></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><label for="email">E-mail:</label></td>
    <td><input type="text" id="email" name="email" value="' . (isset($_POST['email']) ? htmlspecialchars($_POST['email']) : '') . '" /></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><label for="telefoon">Telefoon:</label></td>
    <td><input type="text" id="telefoon" name="telefoon" value="' . (isset($_POST['telefoon']) ? htmlspecialchars($_POST['telefoon']) : '') . '" /></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><div align="center">MEET MY BIKE</div></td>
    <td><div align="center">
      <p>MEET MY BIKE <br />
        SINCE  2014 </p>
    </div></td>
    <td><div align="center">MEET MY BIKE<br />
    JOIN OUR RIDE-OUTS</div></td>
  </tr>
  <tr>
    <td><div align="center"><img src="http://meetmybike.nl/wp-content/uploads/2016/01/Meet-My-Bike-Logo-Sticker-Clean.jpg" alt="" width="126" height="105" /></div></td>
    <td><div align="center"><img src="http://meetmybike.nl/wp-content/uploads/2016/01/Meet-My-Bike-Logo-Sticker-Since.jpg" alt="" width="126" height="105" /></div></td>
    <td><div align="center"><img src="http://meetmybike.nl/wp-content/uploads/2016/01/Meet-My-Bike-Logo-Sticker-01-16.jpg" alt="" width="126" height="105" /></div></td>
  </tr>
  <tr>
    <td><div align="center">5cm</div></td>
    <td><div align="center">5cm</div></td>
    <td><div align="center">5cm</div></td>
  </tr>
  <tr>
    <td><div align="center">
      <select name="aantal5c">
        <option selected="selected" value=" ">Selecteer aantal</option>
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="meer dan 5">5+</option>
      </select>
    </div></td>
    <td><div align="center">
      <select name="aantal5s">
        <option selected="selected"value=" ">Selecteer aantal</option>
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="meer dan 5">5+</option>
      </select>
    </div></td>
    <td><div align="center">
      <select name="aantal5joro">
        <option selected="selected" value=" ">Selecteer aantal</option>
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="meer dan 5">5+</option>
      </select>
    </div></td>
  </tr>
  <tr>
    <td><div align="center">10cm</div></td>
    <td><div align="center">10cm</div></td>
    <td><div align="center">10cm</div></td>
  </tr>
  <tr>
    <td><div align="center">
      <select name="aantal10c">
        <option selected="selected" value=" ">Selecteer aantal</option>
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="meer dan 5">5+</option>
      </select>
    </div></td>
    <td><div align="center">
      <select name="aantal10s">
        <option selected="selected"value=" ">Selecteer aantal</option>
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="meer dan 5">5+</option>
      </select>
    </div></td>
    <td><div align="center">
      <select name="aantal10joro">
        <option selected="selected" value=" ">Selecteer aantal</option>
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="meer dan 5">5+</option>
      </select>
    </div></td>
  </tr>
  <tr>
    <td><div align="center">15cm</div></td>
    <td><div align="center">15cm</div></td>
    <td><div align="center">15cm</div></td>
  </tr>
  <tr>
    <td><div align="center">
      <select name="aantal15c">
        <option selected="selected" value=" ">Selecteer aantal</option>
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="meer dan 5">5+</option>
      </select>
    </div></td>
    <td><div align="center">
      <select name="aantal15s">
        <option selected="selected"value=" ">Selecteer aantal</option>
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="meer dan 5">5+</option>
      </select>
    </div></td>
    <td><div align="center">
      <select name="aantal15joro">
        <option selected="selected" value=" ">Selecteer aantal</option>
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="meer dan 5">5+</option>
      </select>
    </div></td>
  </tr>
</table>
      <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 .= "BAM!!! " . htmlspecialchars($_POST['naam']) ." wilt Stickers bestellen! \n" /*. $_SERVER['HTTP_HOST'] . ""*/;
  $inhoud_mail .= "===================================================\n\n";
  
  $inhoud_mail .= "Naam: " . htmlspecialchars($_POST['naam']) . "\n";
  $inhoud_mail .= "Adres: " . htmlspecialchars($_POST['adres']) . "\n";
  $inhoud_mail .= "Postcode:" .htmlspecialchars($_POST['postcode']) ."\n";
  $inhoud_mail .= "Woonplaats:" .htmlspecialchars($_POST['woonplaat']) ."\n";
  $inhoud_mail .= "Mail: " . htmlspecialchars($_POST['email']) . "\n";
  $inhoud_mail .= "Telefoon: " . htmlspecialchars($_POST['telefoon']) . "\n";
  
  $inhoud_mail .= "Stickers: " .htmlspecialchars($_POST['']) . "\n";
    
  $inhoud_mail .= "Verstuurd op " . $datum . " \n\n";
    
  $inhoud_mail .= "===================================================\n\n";
  
  // -------------------- via het IP adres " . $_SERVER['REMOTE_ADDR'] . "
  // spambot protectie
  // ------
  // van de tutorial: http://www.phphulp.nl/php/tutorial/beveiliging/spam-vrije-contact-formulieren/340/
  // ------
  
  $headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['email'] . '>';
  
  $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
  
  if (mail($mail_ontv, 'Bestelling Stickers', $inhoud_mail, $headers))
  
  
    $datum = date('d/m/Y H:i:s');
    
  $inhoud_mail2 = "===================================================\n";
  $inhoud_mail2 .= "De bestelling is geplaatst! \n" /*. $_SERVER['HTTP_HOST'] . ""*/;
  $inhoud_mail2 .= "===================================================\n\n";
  
  $inhoud_mail2 .= "Beste " . htmlspecialchars($_POST['naam']) .",\n";
  $inhoud_mail2 .= "Hartelijk bedankt voor de bestelling.\n"; 
  $inhoud_mail2 .= "Graag vragen we om onderstaande informatie even te controleren.\n";
  $inhoud_mail2 .= "Mochten er fouten in zitten kun je contact opnemen met [email protected].\n\n";
  
  $inhoud_mail2 .= "Naam: " . htmlspecialchars($_POST['naam']) . "\n";
  $inhoud_mail2 .= "E-mail adres: " . htmlspecialchars($_POST['email']) . "\n";
  $inhoud_mail2 .= "Telefoonnummer: " . htmlspecialchars($_POST['telefoonnummer']) . "\n";
  $inhoud_mail2 .= "Adres: " . htmlspecialchars($_POST['adres']) . "\n";
  $inhoud_mail2 .= "Stickers: " .htmlspecialchars($_POST['']) . "\n";

  
  $inhoud_mail2 .= "Kloppen alle gegevens? Dan mag je op volgend rekeningnummer het bedrag van € 40,95 overmaken:\n";
  $inhoud_mail2 .= "  tnv   Almere ovv Hoodie en je naam.\n\n";  
  $inhoud_mail2 .= "Met vriendelijke groet,\n";
  $inhoud_mail2 .= " \n";
  $inhoud_mail2 .= "Meet My Bike\n\n";
  
    $inhoud_mail2 .= "Verstuurd op " . $datum . " \n\n";

    
  $inhoud_mail2 .= "===================================================\n\n";
  
  // -------------------- via het IP adres " . $_SERVER['REMOTE_ADDR'] . "
  // spambot protectie
  // ------
  // van de tutorial: http://www.phphulp.nl/php/tutorial/beveiliging/spam-vrije-contact-formulieren/340/
  // ------
  
  $headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['email'] . '>';
  
  $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
  
  if (mail($mail_ontv2, 'Bestelling Hoodie', $inhoud_mail2, $headers))
 
{
      // zorg ervoor dat dezelfde persoon niet kan spammen
      $_SESSION['antiflood'] = time();
      
      echo '<h1>Je bestelling is verzonden</h1>
      
      <p>Bedankt voor het bestellen van je Stickers!! We zullen zo spoedig mogelijk contact met je opnemen.</p>';
  }
  else
  {
      echo '<h1>Helaas, je bestelling is niet verzonden</h1>
      
      <p><b>Onze excuses.</b> Je bestelling kon om technische redenen niet verzonden worden.</p>';
  }
}
?>
Zo te zien heb je geen veld genaamd "stickerkeus".
Ben van Velzen op 01/02/2016 00:23:37

Zo te zien heb je geen veld genaamd "stickerkeus".


Wauw.... Soms is het te makkelijk..... Zit er al te lang aan denk ik.....

Dat was inderdaad de fout. Deze controle er maar uitgehaald.

Nu er nog voor zorgen dat de keuzes ook daadwerkelijk doorkomen.

Hartelijk dank voor de snelle reactie!!!
De stappen die ik gevolgd heb, voor als je geinteresseerd bent:
1. Kijk wat de melding oplevert
2. Volg variabelen die niet direct extern zijn tot externe variabelen
3. Vergelijk de externe variabelen met het formulier dat binnen komt

Als je niet even de HTML kunt vergelijken kun je ook altijd print_r of var_dump op $_POST doen.
Dat is ook opzich wel de meest logische manier.
En zelf dacht ik dat ik het ook zo gedaan had en ook die stickerkeuze erin had.
Maar nog niet verder gekoppeld blijkbaar.....
Correct, een simpele ctrl+f op "stickerkeus" gaf maar 1 resultaat, en dat maakt het dan al vrij snel duidelijk. :)
Hahaha dat zeg ik xD Het is echt bedtijd haha.....
Denk dat ik later nog wel een ander topic ga openen om mn keuzes door te krijgen.
Want dat, dat gaat denk ik mij een stapje te ver. Maar hopelijk ook niet.

Fijne avond! En dank je wel voor de uitleg en de oplossing uiteraard!
vragen (los van je probleem)

op regel 7 staat session-start. Je hebt door dat je inmiddels iets erboven hebt staan?

regel 23: je gebruikt $_POST, maar pas later staat een if($_SERVER['REQUEST_METHOD'] == 'POST') (meermaals)
Je zou hier dus een warning moeten krijgen als je dit aanroept met GET.

Je controleert nergens of dit veld een mailadres (eentje) bevat. Maar je stuurt er wel een mail heen.
Dat betekent dus dat iemand daar ook 2 of 100 adressen in kan zetten. Of enters opneemt en dan fijn zijn eigen headers kan toevoegen, subject overrulen en fijn spam gaat versturen op jouw rekening.

regel 292: mist daar niet een { ?


Wat levert de actie rond regel 337 op?
Je past daar $_POST['onderwerp'] aan, mi. bad-practice want dat zou puur de invoer moeten bevatten, maar dat wordt nergens meer gebruikt.

En de anti-flood in session:
Als je dit wilt misbruiken, dan stuur je uiteraard geen session-cookies mee, want dat run je dan niet vanaf de webpagina in een browser, maar direct vanaf de commandline.
Ivo P op 01/02/2016 11:15:20

vragen (los van je probleem)

op regel 7 staat session-start. Je hebt door dat je inmiddels iets erboven hebt staan?

regel 23: je gebruikt $_POST, maar pas later staat een if($_SERVER['REQUEST_METHOD'] == 'POST') (meermaals)
Je zou hier dus een warning moeten krijgen als je dit aanroept met GET.

Je controleert nergens of dit veld een mailadres (eentje) bevat. Maar je stuurt er wel een mail heen.
Dat betekent dus dat iemand daar ook 2 of 100 adressen in kan zetten. Of enters opneemt en dan fijn zijn eigen headers kan toevoegen, subject overrulen en fijn spam gaat versturen op jouw rekening.

regel 292: mist daar niet een { ?


Wat levert de actie rond regel 337 op?
Je past daar $_POST['onderwerp'] aan, mi. bad-practice want dat zou puur de invoer moeten bevatten, maar dat wordt nergens meer gebruikt.

En de anti-flood in session:
Als je dit wilt misbruiken, dan stuur je uiteraard geen session-cookies mee, want dat run je dan niet vanaf de webpagina in een browser, maar direct vanaf de commandline.


Ivo,

Als jij :
<style type="text/css">
.letop {
	color: #F00;
}
</style>


Bedoeld, dit kwam van een ander script. En is alleen maar een CSS wat in mijn inziens geen kwaad kan dat die daarboven staat.
In het huidige script wel weg gehaald, heeft geen toegevoegde waarde (thanks).

Op al je ander vragen..... Ik gebruik dit formulier al een langere tijd en kan niet de inhoud overal plaatsen wat er staat.
Ik kan het redelijk aanpassen (en geef toe) maar heb geen flauw idee wat het allemaal doet.
Het enige dat ik weet, is dat het steeds werkt en ik er nog geen spam op heb gehad.
Mocht je een manier weten om deze spam eruit te filteren en hem in mijn code kan zetten, dan ben ik je daar dankbaar voor.

Ook verwijs je naar regel 337:
  $_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


daarboven (regel 331) gebeurd hetzelfde alleen dan anders. Dit klopt dan wel?
  $headers = str_replace('\n', '', $headers); // Verwijder \n
  $headers = str_replace('\r', '', $headers); // Verwijder \r
  $headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes


Je hebt het ook over het misbruiken van de anti-flood in session. De site is te klein om maar ook een beetje op te vallen en niet aantrekkelijk voor een enkele misbruik van.
Wellicht heb je een punt maar voor het gebruik van de site vindt ik dit te verwaarlozen.

Ik hoop nog wat van je te horen!

Steven
Als er CSS, HTML of andere vorm van output (zelfs een spatie of een enter) voor een session_start() staat, zal dat betekenen dat je sessies niet uitgevoerd kunnen worden. Altijd gaan er headers aan een request van een pagina vooraf, deze beschrijven de pagina en plaatsen bijv. cookies.

Bij het initialiseren van de sessions met session_start(); wordt er namelijk een PHPSESSID-cookie aangemaakt. Daar kan geen HTML aan vooraf gaan. Net als wij mensen elkaar bij kennismaking eerst begroeten en vervolgens een hand geven. Daarna volgt een gesprek.
Dat is een duidelijk verhaal.
Wanneer ik alleen de // voor session weg haal, struikelt mn pagina over de volgende meldingen:


Warning: session_start(): Cannot send session cookie – headers already sent by (output started at ..snip../admin-init.php:30) in ..snip../order-stickers.php on line 2



Warning: session_start(): Cannot send session cache limiter – headers already sent (output started at ..snip../admin-init.php:30) in ..snip../order-stickers.php on line 2


Volgens mij was het daarom een reden dat ik het uit had gezet. De blokkade (antiflood) werkt echter wel.
Met //session....

Reageren