beste iedereen,

Mijn if statement werkt niet, als ik het formulier wil verzenden en het niet aan de gestelde criteria voldoet krijg ik deze melding:
De gekozen nickname bevat geen 7 karakters De gekozen tip bevat geen 10 karakters U bent nu geregistreerd
en toch zet hij het in de database!
wat te doen?

Script:
<?php
$con=mysqli_connect("***","***","***","***");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="INSERT INTO Tips (nickname, tip)
VALUES
('$_POST[nickname]','$_POST[tip]')";


if(!preg_match("/(?=.*[a-zA-Z]).{7}/", $_POST['nickname'])) {
echo 'De gekozen nickname bevat geen 7 karakters ';
}

if(!preg_match("/(?=.*[a-zA-Z]).{10}/", $_POST['tip'])) {
echo 'De gekozen tip bevat geen 10 karakters ';
}

if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo 'U bent nu geregistreerd';

mysqli_close($con);
?>
Je maakt geen "fatale error" oftewel die if statement word voldaan maar hij gaat door met het script omdat je geen else hebt,
oplossing:
<?php
$con=mysqli_connect("***","***","***","***");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="INSERT INTO Tips (nickname, tip)
VALUES
('$_POST[nickname]','$_POST[tip]')";


if(!preg_match("/(?=.*[a-zA-Z]).{7}/", $_POST['nickname'])) {
echo 'De gekozen nickname bevat geen 7 karakters ';
}

elseif(!preg_match("/(?=.*[a-zA-Z]).{10}/", $_POST['tip'])) {
echo 'De gekozen tip bevat geen 10 karakters ';
}
else{

if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo 'U bent nu geregistreerd';

mysqli_close($con);
}
?>
de ene if veranderen naar een elseif en een else toevoegen en ook sluiten.
variabelen horen buiten quotes op lijn 9
verder is er SQL injection mogelijk. Dus gebruik mysqli_real_escape_string()
- Aar - op 30/10/2013 19:24:07

variabelen horen buiten quotes op lijn 9
verder is er SQL injection mogelijk. Dus gebruik mysqli_real_escape_string()

Word aan gewerkt, het is nog een beta versie ;)


Héél erg bedankt allemaal!!

Ik geef de voorkeur aan eerst alle fouten opsommen dan kijken of er geen zijn en inloggen of de fouten tonen
<?php
$con=mysqli_connect("***","***","***","***");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="INSERT INTO Tips (nickname, tip)
VALUES
('$_POST[nickname]','$_POST[tip]')";

$fout='';
if(!preg_match("/(?=.*[a-zA-Z]).{7}/", $_POST['nickname'])) {
$fout.= '<br>De gekozen nickname bevat geen 7 karakters ';
}

if(!preg_match("/(?=.*[a-zA-Z]).{10}/", $_POST['tip'])) {
$fout.= '<br>De gekozen tip bevat geen 10 karakters ';
}

if ($fout==''){
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo 'U bent nu geregistreerd';
}else{
echo $fout;
}
mysqli_close($con);
}
?>


Jan
Tom Stock op 30/10/2013 21:28:00

[quote="- Aar - op 30/10/2013 19:24:07"]
variabelen horen buiten quotes op lijn 9
verder is er SQL injection mogelijk. Dus gebruik mysqli_real_escape_string()

Word aan gewerkt, het is nog een beta versie ;)


Héél erg bedankt allemaal!!


[/quote]
FOUT! Begin gelijk goed met programmeren. Variabelen buiten quotes moet je gelijk doen en niet toestaan in een beta versie. Veiligheid gewoon gelijk eraan toevoegen. Naderhand vergeet je dit heel makkelijk omdat je dan zoveel input hebt die je allemaal moet gaan checken. Jij gaat alles weer herschrijven zodra het klaar is?
@Jan R opsommen doe je met een list (ol/li) en niet met een br. En als ik jou was zou ik er dan een array van maken.


<?php
	$errors = array();

	if (FORM_FOUT) {
		$errors[] = 'De gekozen nickname bevat geen 7 karakters';
	}

	if (count($errors) == 0) {
		// Database
	} else {
		echo sprintf('<ul><li>%s</li></ul>', implode('</li><li>', $errors));
	}
?>
- Aar - op 30/10/2013 19:24:07

variabelen horen buiten quotes op lijn 9
verder is er SQL injection mogelijk. Dus gebruik mysqli_real_escape_string()

Ik heb de variabelen buiten quotes gezet.
Maar met de mysqli_real_escape_string() wil het nog niet echt lukken, hoe moet ik het doen?
ik zou het zo doen:
<?php


// controleer of alle velden ingevuld zijn
if (empty($_POST)=== false){
$required_fields = array('number','postcode');//hier kun je makkelijk de verplichte velden beheren door toe te voegen of verwijderen
$errors = array();
//echo '<pre>',print_r($_POST,true),'</pre>';
foreach ($_POST as $key=>$value){
if(empty($value) && in_array($key, $required_fields) === true){
$errors[] = "alle velden zijn verplicht ";
break 1;
}
}
}


// als alle velden ingevuld zijn gaan we controleren op juiste invoer
if(empty($errors) === true){
if(PostcodeCheck(sanitize($_POST['postcode'])) === false){
$errors[] = "foute invoer postcode ";
}
if(strlen(sanitize($_POST['postcode'])) !== 7 ){
$errors[] = "postcode dient anders ingevoerd te worden!"."<br>"."Gebruik een spatie tussen de cijfers en letters :1234 KK ";
}
}

// nu gaan we de formuliergegevens verwerken zodra er op de bevestigingsknop is gedrukt

if(isset($_POST["calculate"]) === true){
if (empty($_POST) === false && empty($errors) === false){
echo output_errors($errors);
}else{
//formuliergegevens opslaan in db tabel
}
}


if (isset($_POST['annuleren']) === true){
// doe iets
}







?><form action="" method="post"><ul>
<li>
Postcode:*<br>
<input type="text" name="postcode" value="" size="25">
</li>
<li>
Huisnummer en toevoegsel:*<br>
<input type="text" name="number" value="" size="25">
</li>
<br>
<input type="submit" name="calculate" value="Verzenden">
<input type="submit" name="annuleren" value="Annuleer">
</ul>
</form>
<?php
?>

Reageren