Voor een simpel html5 formulier kan de gebruiker meerdere keuzes d.m.v checkboxes invoeren.
Echter bij het uitlezen komt elke keer maar 1 willekeurige waarde naar voren:
Ik weet niet goed of ik ook en hoe de verschillende valeu's aangeroepen moeten worden zodat meerdere opties zichtbaar zijn bij het uitlezen van de checkboxes.
>> Overigens had je dit in 1 minuut googlen ook kunnen vinden ...
Dat geldt natuurlijk voor heel veel dingen ... maar dan moet je wel weten waarnaar je moet Googlen. Iemand vraagt niet voor niets om hulp. Dit soort opmerkingen voegt mijns inziens niet zoveel toe.
[/offtopic]
?
Onbekende gebruiker
09-08-2016 09:28
gewijzigd op 09-08-2016 09:49
Ben gisteren ook behoorlijk op het internet aan het speuren geweest maar ik heb helaas niet de nodige php kennis om dit zonder wat hulp op te lossen. Ik ben er bijna volgens mij, echter staat er al een foreach (); in het script:
Zet om te beginnen, zoals SanThe zei, vierkante haken in de name van de checkboxes:
<input type="checkbox" name="diensten[]" ...>
Dit geeft je in de array $_POST een tweede array die je met de volgende logica kunt afhandelen:
<?php
if (
$_SERVER['REQUEST_METHOD'] == 'POST' // Is het formulier gepost
&& array_key_exists('diensten', $_POST) // en bevatten de geposte data 'diensten'
&& is_array($_POST['diensten']) // en zijn die 'diensten' een array?
) {
// Dan hebben we een array met diensten:
$diensten = $_POST['diensten'];
foreach ($diensten as $dienst) {
// Doe iets met elke afzonderlijke dienst.
// <...>
}
}
?>
?
Onbekende gebruiker
09-08-2016 10:56
Thanks Ward maar wanneer ik de haakjes plaats krijg ik de volgende foutmelding bij het versturen in de header:
Warning: trim() expects parameter 1 to be string, array given in /public_html/form-mokum/classes/contactcheck.php on line 21
Bij het uitlezen voor de checkboxes krijg ik nu enkel een Array toegestuurd.
$postValues = array();
foreach ( $_POST as $name => $value ) {
$postValues[$name] = trim( $value );
}
extract( $postValues );
if (
$_SERVER['REQUEST_METHOD'] == 'POST' // Is het formulier gepost
&& array_key_exists('diensten', $_POST) // en bevatten de geposte data 'diensten'
&& is_array($_POST['diensten']) // en zijn die 'diensten' een array?
) {
// Dan hebben we een array met diensten:
$diensten = $_POST['diensten'];
foreach ($diensten as $dienst) {
// Doe iets met elke afzonderlijke dienst.
// <...>
}
}
Je hebt op regels 1 / 5 een stukje magie staan dat poogt om alle geposte waarden te ontdoen van spaties aan begin of einde.
Om vervolgens naar een soort PHP 4 situatie te gaan met de introductie van variabelen als
$aap = $_POST['aap'];
(dat is wat jouw foreach + extract() doen)
Leuke magie, maar enerzijds zinloos en ondoorzichtig en anderzijds vrij bot omdat je niet checkt of je met een scalar (string) of met een array te maken hebt.
Korte oplossing:
tussen regel 2 en 3:
if(!is_array($value))
Maar liever zou ik aanraden om die hele routine te skippen en per verwachte invoer te controleren.
Paar regels extra, maar dan kun je ook gelijk kijken of de naam niet leeg is, mailadres op een mailadres lijkt en of de geboortedatum een datum is.
?
Onbekende gebruiker
09-08-2016 11:23
gewijzigd op 09-08-2016 11:37
Volgens mij is het php script zelf versie 5. Ik stuur even de gehele php code mee. Bij het uitlezen blijft de Array namelijk nog steeds staan. De rest van de waarden is wel prima uit te lezen:
<?php if (!isset($_SESSION)) session_start();
if(!$_POST) exit();
if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");
// Configuration option.
// Enter the $email $address that you want to emails to be sent to.
// Example $address = "[email protected]";
$address = "";
///////////////////////////////////////////////////////////////////////////
//
//
//
///////////////////////////////////////////////////////////////////////////
$postValues = array();
foreach ( $_POST as $name => $value ) {
if(!is_array($value))
$postValues[$name] = trim( $value );
}
extract( $postValues );
if (
$_SERVER['REQUEST_METHOD'] == 'POST' // Is het formulier gepost
&& array_key_exists('diensten', $_POST) // en bevatten de geposte data 'diensten'
&& is_array($_POST['diensten']) // en zijn die 'diensten' een array?
) {
// Dan hebben we een array met diensten:
$diensten = $_POST['diensten'];
foreach ($diensten as $dienst) {
// Doe iets met elke afzonderlijke dienst.
// <...>
}
}
// Important Variables
$posted_verify = isset( $postValues['verify'] ) ? md5( $postValues['verify'] ) : '';
$session_verify = !empty($_SESSION['jigowatt']['html5-contact-form']['verify']) ? $_SESSION['jigowatt']['html5-contact-form']['verify'] : '';
$error = '';
///////////////////////////////////////////////////////////////////////////
//
// Begin verification process
//
// You may add or edit lines in here.
//
// To make a field not required, simply delete the entire if statement for that field.
// You will also have to remove required="required" from the input field, on index.html.
//
///////////////////////////////////////////////////////////////////////////
////////////////////////
// Name field is required
if(empty($name)) {
$error = 'Voer uw naam in';
}
////////////////////////
////////////////////////
// achternaam field is required
if(empty($achternaam)) {
$error = 'Voer uw achternaam in';
}
////////////////////////
////////////////////////
// Email field is required
if(empty($email)) {
$error = 'Voer een geldig e-mailadres in';
} else if(!isEmail($email)) {
$error = 'U heeft een incorrect e-mailadres ingevoerd, probeer het nogmaals';
}
////////////////////////
////////////////////////
// diensten field is required
if(empty($diensten)) {
$error = 'Klik minimaal één schoonmaak dienst aan';
}
////////////////////////
// diensten field is required
if(empty($diensten)) {
$error = 'Klik minimaal één schoonmaak dienst aan';
}
////////////////////////
////////////////////////
// Phone field is required
if(empty($phone)) {
$error = 'Voer een geldig telefoonnummer in';
}
////////////////////////
////////////////////////
// Comments field is required
if(empty($comments)) {
$error = 'Voer uw aanvraag in';
}
////////////////////////
////////////////////////
// Verification field is required
if(empty($posted_verify)) {
$error = 'Voer de correcte verificatie code in';
} else if($session_verify != $posted_verify) {
$error = 'De verificatie code is niet correct, probeer het nogmaals';
}
////////////////////////
// End verification.
///////////////////////////////////////////////////////////////////////////
if (!empty($error)) {
echo '<div class="error_message">' . $error . '</div>';
exit;
}
// Configuration option.
// i.e. The standard $subject will appear as, "You've been contacted by John Doe."
// Example, $e_subject = $name . ' has contacted you via Your Website.';
$e_subject = "Offerteaanvraag via Mokumschoonmaak";
// Configuration option.
// You can change $this if you feel that you need to.
// Developers, you may wish to add more fields to the form, in which case you must be sure to add them here.
$e_body = "Er is een offerteaanvraag ingedient door: $name $achternaam
Het bericht of de opmerking is:" . PHP_EOL . PHP_EOL;
$e_content = $comments . PHP_EOL . PHP_EOL;
$e_reply = "Contact opnemen met: $name $achternaam kan via het e-mailadres: $email.";
$e_reply = "Er is via de offerte aanvraag gekozen voor het onderwerp: $diensten.";
if (!empty($phone)) $e_reply .= " Het ingevoerde telefoonnummer is $phone.";
$msg = wordwrap($e_body . $e_content . $e_reply, 70);
$headers = "From: $email" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;
if(mail($address, $e_subject, $msg, $headers)) {
// Email has sent successfully, echo a success page.
echo "<fieldset>";
echo "<div id='success_page'>";
echo "<h1>Uw aanvraag is succesvol verzonden.</h1>";
echo "<p>Geachte <strong>$name $achternaam</strong> bedankt voor uw aanvraag. Wij nemen binnen 2 werkdagen contact met u op.</p>";
echo "</div>";
echo "</fieldset>";
} else {
echo 'Deze website / server ondersteund niet de juiste php versie. ';
}
function isEmail($email) { // Email address verification, do not edit.
return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email));
} ?>
regel 5
sinds PHP 5.0.2 aanwezig, em daarmaast nevat deze ook wel \r of \n
regel 11
dol op spam? liever weghalen
regel 28: zie regel 3
regel 33 en 34
wat is er mis met
foreach($_POST['diensten'] ASS $dienst) {
regel 41/41
Wat doe je hier nu?
vanaf regel 60:
hier zijn de magisch ontstane vars zoals $name.
als je daar gewoon $_POST['name'] etc gebruikt, is duidelijk waar de vars vandaan komen. Ansder zit je 3000 regels later over 3 jaar je hoofd hierover te breken.
regel 93 zie regel 87: dubbel
regel 1914
PPH kent al een tijdje filter_var of filter_input
daarmee gebruik je een ingebouwde check op het formaat van het mailadres.
Dat is namelijk veel uitgebreider dan jouw ene regel
?
Onbekende gebruiker
09-08-2016 11:36
Bouke Star op 09/08/2016 11:23:07
Volgens mij is het php script zelf versie 5. Ik stuur even de gehele php code mee. Bij het uitlezen blijft de Array namelijk nog steeds staan. De rest van de waarden is wel prima uit te lezen:
<?php if (!isset($_SESSION)) session_start();
if(!$_POST) exit();
if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");
// Configuration option.
// Enter the $email $address that you want to emails to be sent to.
// Example $address = "[email protected]";
$address = "";
///////////////////////////////////////////////////////////////////////////
//
//
//
///////////////////////////////////////////////////////////////////////////
$postValues = array();
foreach ( $_POST as $name => $value ) {
if(!is_array($value))
$postValues[$name] = trim( $value );
}
extract( $postValues );
if (
$_SERVER['REQUEST_METHOD'] == 'POST' // Is het formulier gepost
&& array_key_exists('diensten', $_POST) // en bevatten de geposte data 'diensten'
&& is_array($_POST['diensten']) // en zijn die 'diensten' een array?
) {
// Dan hebben we een array met diensten:
$diensten = $_POST['diensten'];
foreach ($diensten as $dienst) {
// Doe iets met elke afzonderlijke dienst.
// <...>
}
}
// Important Variables
$posted_verify = isset( $postValues['verify'] ) ? md5( $postValues['verify'] ) : '';
$session_verify = !empty($_SESSION['jigowatt']['html5-contact-form']['verify']) ? $_SESSION['jigowatt']['html5-contact-form']['verify'] : '';
$error = '';
///////////////////////////////////////////////////////////////////////////
//
// Begin verification process
//
// You may add or edit lines in here.
//
// To make a field not required, simply delete the entire if statement for that field.
// You will also have to remove required="required" from the input field, on index.html.
//
///////////////////////////////////////////////////////////////////////////
////////////////////////
// Name field is required
if(empty($name)) {
$error = 'Voer uw naam in';
}
////////////////////////
////////////////////////
// achternaam field is required
if(empty($achternaam)) {
$error = 'Voer uw achternaam in';
}
////////////////////////
////////////////////////
// Email field is required
if(empty($email)) {
$error = 'Voer een geldig e-mailadres in';
} else if(!isEmail($email)) {
$error = 'U heeft een incorrect e-mailadres ingevoerd, probeer het nogmaals';
}
////////////////////////
////////////////////////
// diensten field is required
if(empty($diensten)) {
$error = 'Klik minimaal één schoonmaak dienst aan';
}
////////////////////////
// diensten field is required
if(empty($diensten)) {
$error = 'Klik minimaal één schoonmaak dienst aan';
}
////////////////////////
////////////////////////
// Phone field is required
if(empty($phone)) {
$error = 'Voer een geldig telefoonnummer in';
}
////////////////////////
////////////////////////
// Comments field is required
if(empty($comments)) {
$error = 'Voer uw aanvraag in';
}
////////////////////////
////////////////////////
// Verification field is required
if(empty($posted_verify)) {
$error = 'Voer de correcte verificatie code in';
} else if($session_verify != $posted_verify) {
$error = 'De verificatie code is niet correct, probeer het nogmaals';
}
////////////////////////
// End verification.
///////////////////////////////////////////////////////////////////////////
if (!empty($error)) {
echo '<div class="error_message">' . $error . '</div>';
exit;
}
// Configuration option.
// i.e. The standard $subject will appear as, "You've been contacted by John Doe."
// Example, $e_subject = $name . ' has contacted you via Your Website.';
$e_subject = "Offerteaanvraag via Mokumschoonmaak";
// Configuration option.
// You can change $this if you feel that you need to.
// Developers, you may wish to add more fields to the form, in which case you must be sure to add them here.
$e_body = "Er is een offerteaanvraag ingedient door: $name $achternaam
Het bericht of de opmerking is:" . PHP_EOL . PHP_EOL;
$e_content = $comments . PHP_EOL . PHP_EOL;
$e_reply = "Contact opnemen met: $name $achternaam kan via het e-mailadres: $email.";
$e_reply = "Er is via de offerte aanvraag gekozen voor het onderwerp: $diensten.";
if (!empty($phone)) $e_reply .= " Het ingevoerde telefoonnummer is $phone.";
$msg = wordwrap($e_body . $e_content . $e_reply, 70);
$headers = "From: $email" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;
if(mail($address, $e_subject, $msg, $headers)) {
// Email has sent successfully, echo a success page.
echo "<fieldset>";
echo "<div id='success_page'>";
echo "<h1>Uw aanvraag is succesvol verzonden.</h1>";
echo "<p>Geachte <strong>$name $achternaam</strong> bedankt voor uw aanvraag. Wij nemen binnen 2 werkdagen contact met u op.</p>";
echo "</div>";
echo "</fieldset>";
} else {
echo 'Deze website / server ondersteund niet de juiste php versie. ';
}
function isEmail($email) { // Email address verification, do not edit.
return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email));
} ?>