If statement werkt niet
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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);
?>
$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);
?>
oplossing:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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);
}
?>
$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.
Gewijzigd op 30/10/2013 18:02:43 door nick kuijpers
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()
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!!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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);
}
?>
$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:
Word aan gewerkt, het is nog een beta versie ;)
Héél erg bedankt allemaal!!
- 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()
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!!
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?
- 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()
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?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?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
}
?>
// 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
}
?>
<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>