Ik heb een PHP file, met hierin een validatie van het invoerveld onderwerp (in formuier) en nu heb ik er een pull-down list van gemaakt en wil ik graag dat als men geen keuze maakt dat hij dan een validatie melding geeft.

Nu staat er "Kies uw onderwerp..." in de eerste regel en daaronder de onderwerpen, zou het graag zo willen hebben dat wanneer men niets kiest en de regel "Kies uw onderwerp..." laat staan hij dezelfde foutmelding geeft als bij een invoerveld dat leeg is en wel ingevuld moet worden.

Weet iemand hoe ik in onderstaand gedeelte het $onderwerpPattern laat kijken of er het woord "Kies" in voorkomt en zo ja hij dan de foutmelding laat zien zoals hieronder en als men wel een onderwerp kiest (dus als het woord "Kies" er niet in voorkomt) hij gewoon door loopt zonder melding (nu loopt hij gewoon door omdat er standaard iets in onderwerp staat? Ik wil "Kies uw onderwerp..." er graag in laten staan.

/** Validate onderwerp */
$onderwerpPattern = '~^[a-z .\'-]+$~Di';
if ( !isset( $_POST['onderwerp'] ) or !preg_match( $onderwerpPattern, $_POST['onderwerp'] ) )
{
echo "Het onderwerp is niet geldig!<br> \n";
}

Dus graag hetzelfde script, maar dan iets in $onderwerpPattern wat kijkt of het woord "Kies" niet voorkomt.

Hoor het graag.

Groet,
Richard
Waarom zo omslachtig?
Je kunt toch controleren of $_POST['onderwerp'] == 'kies uw onderwerp'?
Top, maar ben een leek en hoe moet ik dit dan in code aanpassen, zie onder? Zou u dit willen laten zien? Alvast bedankt. Gr. Richard

/** Validate onderwerp */
$onderwerpPattern = '~^[a-z .\'-]+$~Di';
if ( !isset( $_POST['onderwerp'] ) or !preg_match( $onderwerpPattern, $_POST['onderwerp'] ) )
{
echo "Het onderwerp is niet geldig!<br> \n";
}

Zo:
<?php
if (!isset( $_POST['onderwerp'] ) OR $_POST['onderwerp'] == 'Kies een onderwerp' )
{
echo "Het onderwerp is niet geldig!<br> \n";
}
?>

Zo kan het ook... al is bovenstaande beter.
<?php
if(!isset($_POST['onderwerp'] OR substr_count($_POST['onderwerp'], 'kies') > 1)
{
}
?>
Dit is beter:
<?php
if (!isset($_POST['onderwerp']) OR (false !== strpos(strtolower($_POST['onderwerp']), 'kies'))) {
// onderwerp is niet geldig
}
Sorry, maar beiden geprobeerd en als ik Kies etc laat staan en alle andere verplichte velden invul verzend hij het toch en zie ik geen foutmelding....
Sorry, maar toch is het zo, @Wouter J, ik ben een leek en van je link snap ik helemaal niet, sorry, maar heb een script gemaakt en alleen dit punt mis ik nog, hieronder het script totaal, wellicht is dit iets duidelijker:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml">;
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>send4</title>
</head>

<body
style="font-family: 'Franklin Gothic Book'; font-size: 16px; font: normal; background-color: #E7E0D2; ">


<?php
$mailsupport= "[email protected]";
$titel= "www.mijndomeijnnaam.nl - " .
$_POST['onderwerp'];

// set datum
$datum = date("d.m.Y H:i");

// set ip
$ip = $_SERVER['REMOTE_ADDR'];

if (isset ($_POST['kaartleggen']))
{
$kaartleggen="Ja, wel informatie";
}
else
{
$kaartleggen="Nee, geen informatie";
}

if (isset ($_POST['orakel']))
{
$orakel="Ja, wel informatie";
}
else
{
$orakel="Nee, geen informatie";
}

if (isset ($_POST['tenen']))
{
$tenen="Ja, wel informatie";
}
else
{
$tenen="Nee, geen informatie";
}

if (isset ($_POST['coaching']))
{
$coaching="Ja, wel informatie";
}
else
{
$coaching="Nee, geen informatie";
}


if (isset ($_POST['individueel']))
{
$individueel="Ja, wel informatie";
}
else
{
$individueel="Nee, geen informatie";
}

// Bericht
$mssg .= "Ingevuld Contact Formulier \n\n";
$mssg .= "Voornaam: " .$_POST['naam1'] . "\n";
$mssg .= "Achternaam: " .$_POST['naam2'] . "\n";
$mssg .= "Telefoon: " .$_POST['telefoon'] . "\n";
$mssg .= "E-mailadres: " .$_POST['mail'] . "\n";
$mssg .= "Onderwerp: " .$_POST['onderwerp'] . "\n";
$mssg .= "Wilt u mij bellen over: \n";
$mssg .= "*Informatie Tarot Kaartleggen: " .$kaartleggen . "\n";
$mssg .= "*Informatie Orakel Snuffelen: " .$orakel . "\n";
$mssg .= "*Tenen lezen Online: " .$tenen . "\n";
$mssg .= "*Coaching: " .$coaching . "\n";
$mssg .= "*Individuele Workshop: " .$individueel . "\n";
$mssg .= "Voorkeur voor tijdstip: " .$tijdstip . "\n";
$mssg .= "Bericht:" . "\n";
$mssg .= $_POST['bericht'] . "\n" . "\n";
$mssg .= "Dit bericht is verstuurd op $datum van het ip adres " . $ip . ".";

//Afzender
$headers = "From: " . $_POST['naam1'] . $_POST['naam2'] . " <" . $_POST['mail'] . ">";
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
if (empty($_POST['naam1']) or empty($_POST['naam2']) or empty($_POST['mail']) or empty($_POST['onderwerp']) or empty($_POST['bericht'])) {

//Validatie

/** Validate naam1 */
$naam1Pattern = '~^[a-z .\'-]+$~Di';
if ( !isset( $_POST['naam1'] ) or !preg_match( $naam1Pattern, $_POST['naam1'] ) )
{
echo "De voornaam is niet geldig!<br> \n";
}

/** Validate naam2 */
$naam2Pattern = '~^[a-z .\'-]+$~Di';
if ( !isset( $_POST['naam2'] ) or !preg_match( $naam2Pattern, $_POST['naam2'] ) )
{
echo "De achternaam is niet geldig!<br> \n";
}

/** Validate e-mail address */
$mailPattern = '~^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$~Di';
if ( !isset( $_POST['mail'] ) or !preg_match( $mailPattern, $_POST['mail'] ) )
{
echo "Het e-mailadres is niet geldig!<br> \n";
}

/** Validate onderwerp */
if ( !isset($_POST['onderwerp'] ) or (false !== strpos(strtolower($_POST['onderwerp']), 'kies')))
{
echo "Het onderwerp is niet geldig!<br> \n";
}

/** Validate bericht */
if ( !isset( $_POST['bericht'] ) or strlen( trim( $_POST['bericht'] ) ) < 5 )
{
echo "Het bericht moet minimaal 5 tekens lang zijn!<br><br> \n\n";
}

echo "Sorry, maar helaas ben u iets vergeten, of heeft u iets verkeerd ingevuld!!<br><br>\n";
echo '<button type="button" onclick="history.go(-1);">Terug naar formulier</button>';
} else {
mail ($mailsupport, $titel, $mssg, $headers);
header ("Refresh: 0; URL=verzonden.php");
}
}
?>
</body>
</html>
Op die link die ik gaf zie je onder input de code die ik je gaf (plus een array met 4 onderwerpen om te testen). Onder output zie je dan het resultaat, welke titels hij niet goed heeft gekeurd. Zoals je ziet heeft hij gewoon de juiste eruit gefilterd.
Beste Wouter, sorry maar als gezegd ben ik een leek en nog niet zo ver, dus snap het niet, werkt in mijn script niet, nogmaals sorry, maar bedankt voor de input. Gr. Richard
Je mailfunctie mist de nodige (basis)gegevens. Hierdoor kan mail niet aankomen of als spam worden beschouwd. Gebruik juiste headers of, liever nog, phpmailer of swiftmailer.

Wees consequent in het gebruik van " en ' in php (echo). Gebruik ' (en " voor html).

De inhoud van je mailbericht is onbeveiligd.

Voor de logica: zet je validatiegedeelte boven aan een script ipv midden in.

Zet op regel 104 eens
<?php
echo strtolower($_POST['onderwerp'])
?>
Wat komt er dan te staan als je niets selecteert?

Hoe ziet je formulier er uit?

Reageren