Formulierinvoer controleren

Status
Niet open voor verdere reacties.

jeanmi

Gebruiker
Lid geworden
24 aug 2001
Berichten
262
In DW cs3 werkt het controleren van de formulierinvoer niet meer.
Ik heb op mijn site een contactformulier staan "mail.php" wanneer op de knop verzenden wordt geklikt wordt het formulier afgehandeld met FormulierAfhandeling.php. Ziehier de code:
PHP:
<?
// Eventueel is de informatie ook in een database op te slaan
$VoorNaam = $_POST['VoorNaam'];
$AchterNaam = $_POST['AchterNaam'];
$EmailAdres = $_POST['EmailAdres'];
$BeRicht = $_POST['BeRicht'];

$formsent = mail('info@mijn domein.be',
		'Gegevens afkomstig van formuliertje.htm',
		"Naam: $VoorNaam $AchterNaam\r\n
		Bericht: $BeRicht",
		"From: $EmailAdres\r\nBounce-to: info@mijn domein.be");
if ($formsent) {
	echo "<p>Hallo $VoorNaam,<br><br> We hebben je bericht ontvangen.
	We zullen je indien nodig zo spoedig mogelijk een antwoord sturen.</p>";
	} else {
	echo "<p>Sorry, maar er is iets misgegaan met het formulier, probeer
	het later nog eens.</p>";
	}
?>

Nu vond ik dus op het forum onderstaande. Ik denk dat dit prima zou werken. Maar waar plaats ik dit in het geheel? Ik ben zou geen primus in PHP daarom graag jullie hulp

PHP:
<?

if($_POST['naam'] == '')
{
echo 'Je bent vergeten een naam in te vullen! <br />';
}
elseif($_POST['email'] == '')
{
echo 'Je bent vergeten een email adres in te vullen! <br />';
}
elseif($_POST['woonplaats'] == '')
{
echo 'Je bent vergeten een woonplaats in te vullen! <br />';
}
elseif($_POST['bericht'] == '')
{
echo 'Je bent vergeten een bericht in te vullen! <br />';
}
else
{
// Query
} 

?>
Welke Query wordt er hier bedoeld, ik ken redelijk wat access, maar heb geen enkele ervaring met Query in PHP
Alvast bedankt voor iedere reactie.
Mvg
 
Laatst bewerkt:
Wat ik wel eens gebruik is het volgende:
PHP:
<?php

// Eerst even alle velden die verstuurd kunnen worden EN verplicht zijn aanmaken
// zodat we ze allemaal kunnen controleren dat ze aanwezig zijn.
$controlevelden = array("voornaam","achternaam","email");
// Hierin zullen we de missende velden opsommen
$emtpy = "";
for($i = 0;$i < count($controlevelden);$i++) {
  // trim zorgt ervoor dat er geen begin en eind spaties
  // zijn zodat ze niet alleen spaties invullen.
  $_POST[$controlevelden[$i]] = trim($_POST[$controlevelden[$i]]);
  if(empty($_POST[$controlevelden[$i])) {
    // als het veld leeg is zetten we m in de $empty met ", "
    $empty .= $controlevelden[$i].", ";
  }
  // hier zou je eventueel kunnen controleren op
  // reguliere expressies voor het e-mail adres dat het een goed geformuleerde is.
}
if(!empty($empty)) {
  // De substr gebruik ik om de laatste ", " weg te halen want die is altijd te veel.
  echo "U bent de volgende velden vergeten in te vullen: ".substr($controlevelden,0,strlen($controlevelden)-2);
} else {
  // mail functie hier
}

?>
 
Ik zou het in het geheel niet plaatsen. Want het gaat waarschijnlijk niet werken zoals je wil met je mail.php script.

Dit is een link van de PHP manual:
http://www.php.net/manual/en/
Nee, ik begrijp dat woonplaats niet in het mailformulier voorkomt.
Dat kan ik eventueel aanpassen. Mijn vraag is echter kan ik die controlecode gebruiken in mijn mailafhandeling, en zo ja, waar plaats ik dit juist. Kan er iemand mij dit neerschrijven a.u.b. Bedankt voor de link van de PHP handleiding, is echter volledig in 't Engels. (zoals zovvel) Ik heb al niet veel verstand van PHP, laat staan een uitleg in het Engels.
Nu hopelijk krijg ik hierop nog een reactie.
Mvg
 
Laatst bewerkt door een moderator:
Indien je jouw code bekijkt, is het makkelijkst om het na je definieren van je variabelen te controleren aan de hand van de functie empty(). Voorbeeld:

PHP:
<?
// Eventueel is de informatie ook in een database op te slaan
$VoorNaam = $_POST['VoorNaam'];
$AchterNaam = $_POST['AchterNaam'];
$EmailAdres = $_POST['EmailAdres'];
$BeRicht = $_POST['BeRicht'];

/* toevoeging functie om te checken of de variabele een waarde heeft */
if(!empty($VoorNaam))
{
   //code indien $VoorNaam een waarde bevat.
   
}

/* einde toevoeging */

$formsent = mail('info@mijn domein.be',
        'Gegevens afkomstig van formuliertje.htm',
        "Naam: $VoorNaam $AchterNaam\r\n
        Bericht: $BeRicht",
        "From: $EmailAdres\r\nBounce-to: info@mijn domein.be");
if ($formsent) {
    echo "<p>Hallo $VoorNaam,<br><br> We hebben je bericht ontvangen.
    We zullen je indien nodig zo spoedig mogelijk een antwoord sturen.</p>";
    } else {
    echo "<p>Sorry, maar er is iets misgegaan met het formulier, probeer
    het later nog eens.</p>";
    }
?>

De methode die T-J gebruikt met alle respect voor jou T-J is echter prima en wellicht zeker beter om in de toekomst te gebruiken, maar wellicht te ingewikkeld om als beginnend PHP-er te begrijpen.
De functie empty() http://php.net/manual/en/function.empty.php is er om een variabele te controleren of deze leeg is.

Voorbeeld zoals jouw document eruit kan zien met commentaar:

PHP:
<?
// Eventueel is de informatie ook in een database op te slaan
$VoorNaam = $_POST['VoorNaam'];
$AchterNaam = $_POST['AchterNaam'];
$EmailAdres = $_POST['EmailAdres'];
$BeRicht = $_POST['BeRicht'];

/* functie om te checken of de variabele een waarde heeft */
if(!empty($VoorNaam) || !empty($AchterNaam) || !empty($EmailAdres) || !empty($BeRicht))
{ //LET OP HIER OPEN IK DEZE CLAUSULE

   /*code indien $VoorNaam zowel als $AchterNaam, $EmailAdres 
en $BeRicht een waarde bevat.
*/

   


/* einde toevoeging */

$formsent = mail('info@mijn domein.be',
        'Gegevens afkomstig van formuliertje.htm',
        "Naam: $VoorNaam $AchterNaam\r\n
        Bericht: $BeRicht",
        "From: $EmailAdres\r\nBounce-to: info@mijn domein.be");
if ($formsent) {
    echo "<p>Hallo $VoorNaam,<br><br> We hebben je bericht ontvangen.
    We zullen je indien nodig zo spoedig mogelijk een antwoord sturen.</p>";
    } else {
    echo "<p>Sorry, maar er is iets misgegaan met het formulier, probeer
    het later nog eens.</p>";
    }
}//EN HIER SLUIT IK DE CLAUSULE
/*Dit vanwege dat deze code tussen deze haken pas uitgevoerd mag worden indien 
er voldaan wordt aan de conditie dat er een waarde aanwezig moet zijn.
*/

else
{
   /*Hier de code die eruit komt indien deze niet aan de conditie voldoet. 
In dit geval indien er 1 van de variabele als waarde leeg heeft, 
komt de code hier terecht en kun je hier een notificatie maken of iets dergelijks. 
Nu heb ik alle condities op een rij gezet, maar je kan ze ook onafhankelijk van elkaar in statements zetten.
*/
echo 'Er is een verplicht veld niet ingevuld!';
}
?>

Om de functie empty() om te draaien en wil weten of er juist wel een waarde in zit, zet er dan een uitroepteken voor: !empty($Waarde). Alles wat je dan tussen de blokhaken zet van het if statement wordt pas uitgevoerd indien deze variabele een waarde heeft, indien deze leeg is zal deze overspringen naar het else statement indien aanwezig en anders doet deze niks.

Als er vragen zijn of er is je iets niet helemaal duidelijk hoor ik het graag!
 
Om de functie empty() om te draaien en wil weten of er juist wel een waarde in zit, zet er dan een uitroepteken voor: !empty($Waarde). Alles wat je dan tussen de blokhaken zet van het if statement wordt pas uitgevoerd indien deze variabele een waarde heeft, indien deze leeg is zal deze overspringen naar het else statement indien aanwezig en anders doet deze niks.
Ha, dat is duidelijk, ga hiermee dadelijk aan de slag.
Bedankt
Mvg
 
De functie empty() http://php.net/manual/en/function.empty.php is er om een variabele te controleren of deze leeg is.

Nee, dat is dus niet waar, zoals te lezen is op diezelfde link. Een correcte manier om te checken of iets leeg is, is deze:

PHP:
if(trim($var) == ''){

// Leeg.

}

empty() doet heel andere dingen:

The following things are considered to be empty:
"" (an empty string)
0 (0 as an integer)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)
 
Beste SvU,

Prima dat je het toe goed toelicht,vindt het erg royaal maar ik probeer ook de logica er verder bij te houden, Empty is vrij vertaald van het engels leeg en daarbij makkelijk om aan te leren terwijl deze de uitkomst in deze kwestie niet beinvloed, indien men later meer PHP beheerst zal men de functie trim en empty beter tot hun recht laten toebedelen en zelf bepalen wat en hoe ze dit gebruiken, zodoende snap ik zeker het verschil maar koos ik ervoor om dit zo toe te lichten om het makkelijker te maken en begrijpelijker. Zodoende is dit discutabel . Dus heb aub respect voor elkanders werkwijze en zo ook op de manier van uitleggen. Ik snap dat je het goed bedoeld, maar probeer je ook in de persoon in te leven en de logica ervan te snappen. Ik snap jouw punt ook, maar moet je dan perse zodoende de puntjes op de i zetten zodanig dat iemand het net begint te snappen kun je nu dus verwarring snappen. Volgens mij was de bedoeling dat we elkander helpen en niet verder in verwarring brengen.
Zodoende hebben we allen een persoonlijke werkwijze en een andere manier van uitleggen en toelichten vraag ik hierom uw respect.

Zodoende geef ik je gelijk in dat je gelijk hebt, maar ik hoop dat ik nu mijn punt ook duidelijk aan jou kan maken. Er leiden meerde wegen naar Rome, en zo gaat een ieder anders. Zodoende komen we op een ander traject uit dat niet in deze topic hoort. Gelieve dit te laten en open te staan om hulp te bieden.
Zodoende graag uw respect!
 
Een correcte manier om te checken of iets leeg is, is deze:

PHP:
if(trim($var) == ''){

// Leeg.

}
Vervang ik dus alle ! empty door trim. Dit moet dan zoiets geven of heb ik nog een fout gemaakt?
PHP:
/* functie om te checken of de variabele een waarde heeft */
if(trim($VoorNaam) || trim($AchterNaam) || trim($EmailAdres) || trim($BeRicht))
{ //LET OP HIER OPEN IK DEZE CLAUSULE
 
   /*code indien $VoorNaam zowel als $AchterNaam, $EmailAdres 
en $BeRicht een waarde bevat.
*/

 
/* einde toevoeging */
 
Laatst bewerkt:
Je hebt een if statement gezet, voor al die trim dingen. Echter vergelijk je niets. Je doet met trim alleen spaties, tabs en andere weghalen van de bepaalde variabele. Wat je moet doen, is kijken of de trim($variabele) leeg is, ofwel
PHP:
if (trim($variabele) == '') { 
    //blabla
}

Zoals voorheen aangegeven werd. Echter, zou ik vooralsnog gebruik maken van empty(). Dit om niet meteen in het diepe gegooid te worden met het ontdekken van al die TIG verschillende standaard PHP functies. Hier heel wat naslagwerk over de trimfunctie; http://php.net/manual/en/function.trim.php
 
Je hebt een if statement gezet, voor al die trim dingen. Echter vergelijk je niets. Je doet met trim alleen spaties, tabs en andere weghalen van de bepaalde variabele. Wat je moet doen, is kijken of de trim($variabele) leeg is, ofwel
PHP:
if (trim($variabele) == '') { 
    //blabla
}

Zoals voorheen aangegeven werd. Echter, zou ik vooralsnog gebruik maken van empty(). Dit om niet meteen in het diepe gegooid te worden met het ontdekken van al die TIG verschillende standaard PHP functies. Hier heel wat naslagwerk over de trimfunctie; http://php.net/manual/en/function.trim.php

Ik vind al de reacties formidabel, maar als jullie zelf het niet over eens bent wat nu gebruikt moet worden trim of empty. Hoe willen jullie dan dat een leek in PHP zoals ik eruit geraak.
Kan iemand mij het volledige juiste script van begin tot einde hier neerzetten a.u.b.
Goed bedoeld de links naar PHP uitleg, maar sorry ik begrijp er geen snars van.
Mvg
 
Ik ben bezig met een kleine update, met betrekking tot het script eerder gepost. Ik denk dat het een tamelijk leuk systeem is, als het echt helemaal af is. Misschien dat anderen er ook naar kunnen kijken, als ik het min or meer af heb, en dat het dan ook nog een keer verbeterd kan worden (ik leer namelijk steeds meer en meer, en kan niet uitgeleerd raken ;)).
 
Even kijken of hier iemand wat mee kan, en eventuele verbeteringen aan kan brengen ;)

PHP:
<?php
$host = "leukewebsite.nl";
function isset_or(&$check, $alternate = NULL) {
    return (isset($check)) ? $check : $alternate;
}
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    $allevelden = array("bedrijf","naam","email","telefoonnummer","bericht", "gevondenanders", "gevonden");
    $controlevelden = array("bedrijf","naam","email","telefoonnummer","bericht", "gevonden");
    $empty = array();
    for($i = 0;$i < count($controlevelden);$i++) {
        // Als deze überhaupt gepost is (stel, je zet hem in de array en hij zit niet in de form)
        if(isset($_POST[$controlevelden[$i]])) {
            // trim zorgt ervoor dat er geen waardes met enkel spaties als waarde gezien worden
            // dus als de getrimde waarde gelijk is aan '', zet hem in de array van lege/ vergeten waardes
            if(trim($_POST[$controlevelden[$i]]) == '') {
                // als het veld leeg is pushen we hem in de array
                array_push($empty, $controlevelden[$i]);
            }
        }
        // event. reguliere expressies
    }
    for($i = 0;$i < count($allevelden);$i++) {
        // Als deze überhaupt gepost is (stel, je zet hem in de array en hij zit niet in de form)
        if(isset($_POST[$allevelden[$i]])) {
            // Als de waarde spaties bevat, deze even eruit halen, en als dan de waarde NIET overeenkomt met leeg (''), vastzette
            if (trim($_POST[$allevelden[$i]]) != '') {
                $veld[$allevelden[$i]] = $_POST[$allevelden[$i]];
            }
        }
    }
    if(!empty($empty)) {
        // Melding lege velden, gescheiden met een komma
        $berichtje = "U bent de volgende velden vergeten in te vullen: ".implode(', ', $empty);
        // Inputveld anders enkel behouden bij de keuze 'Anders..'
        if (isset_or($veld['gevonden']) != "Anders..") {
            unset($veld['gevondenanders']);
        }
    }
    elseif (!isset($_POST['akkoord'])) {
        echo 'De checkbox akkoord is niet aangevinkt! Doe dit om het bericht te versturen.';
    }
    else {
        // subject
        $subject = $host . ' bericht van contactformulier';
        // message
        $message = '
<html>
    <head>
      <title>Bericht achtergelaten via ' .$host. '</title>
    </head>
            <body>
                    <p>Het achtergelaten bericht: ' .isset_or($_POST['bericht']). '</p>
            </body>
</html>
';
        // To send HTML mail, the Content-type header must be set
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        // Additional headers
        $headers .= 'From:' . $host . "\r\n" .
                'Reply-To:' . $host . "\r\n" .
                'X-Mailer: PHP/' . phpversion();
        // Mail it
        mail($email, $subject, $message, $headers);
        // Het weghalen van alle ingevulde velden, gezien het bericht verstuurd is
        unset($veld);
        $berichtje = "De mail is verstuurd. Bedankt!";
    }
}
if (!empty($veld)) {
    print_r($veld);
} ?>
<h1>Contact</h1>
<?php echo isset_or($berichtje); ?>
<form action="" method="POST" name="contact">
    <table>
        <tr>
            <td>Bedrijf</td>
            <td><input type="text" name="bedrijf" value="<?php echo isset_or($veld['bedrijf']); ?>" /></td>
        </tr>
        <tr>
            <td>Naam</td>
            <td><input type="text" name="naam" value="<?php echo isset_or($veld['naam']); ?>" /></td>
        </tr>
        <tr>
            <td>E-mailadres</td>
            <td><input type="text" name="email" value="<?php echo isset_or($veld['email']); ?>" /></td>
        </tr>
        <tr>
            <td>Telefoonnummer</td>
            <td><input type="text" name="telefoonnummer" value="<?php echo isset_or($veld['telefoonnummer']); ?>" /></td>
        </tr>
        <tr>
            <td>Bericht</td>
            <td><textarea cols="50" rows="6" name="bericht" ><?php echo isset_or($veld['bericht']); ?></textarea></td>
        </tr>
        <tr>
            <td></td>
            <td colspan="2">Ik heb <?php echo $host; ?> gevonden via:*<br/>
                <input type="radio" value="<?php $gevonden = "Een zoekmachine";
                       echo $gevonden; ?>" name="gevonden" <?php if (isset_or($veld['gevonden']) == $gevonden) {
                           echo 'CHECKED';
                       } ?>/>Een zoekmachine<br/>
                <input type="radio" value="<?php $gevonden = "Een advertentie";
                       echo $gevonden; ?>" name="gevonden" <?php if (isset_or($veld['gevonden']) == $gevonden) {
                           echo 'CHECKED';
                       } ?>/>Een advertentie in een blad of catalogus<br/>
                <input type="radio" value="<?php $gevonden = "Mond-tot-mond reclame";
                       echo $gevonden; ?>" name="gevonden" <?php if (isset_or($veld['gevonden']) == $gevonden) {
                           echo 'CHECKED';
                       } ?>/>Mond tot mond reclame<br/>
                <input type="radio" value="<?php $gevonden = "Anders..";
                       echo $gevonden; ?>" name="gevonden" <?php if (isset_or($veld['gevonden']) == $gevonden) {
                           echo 'CHECKED';
                       } ?>/>Anders, nl. <input type="text" name="gevondenanders" value="<?php echo isset_or($veld['gevondenanders']); ?>" />
            </td>
        </tr>
        <tr>
            <td></td>
            <td><input type="checkbox" name="akkoord" />Akkoord (vink aan en klik op 'Verstuur')</td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="verstuur" /></td>
        </tr>
    </table>
</form>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan