form database fout
Ik probeer een pagina te maken waarop de admin alle accounts kan beheren.
Echter, ik slaag er niet in om deze werkend te krijgen. Als ik de gegevens verkeerd invul, bijvoorbeeld pass != pass2 of in het emailadres zitten geen '@' en '.', dan worden deze toch opgeslagen in de database.
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
define('INCLUDE_CHECK',true);
require 'inc/connect.php';
session_name('Login');
session_set_cookie_params(2*7*24*60*60);
session_start();
if(isset($_GET['logoff']))
{
$_SESSION = array();
session_destroy();
header("Location: index.php");
exit;
}
include "inc/header.php";
require "inc/check.php";
include "inc/menu.php";
?>
define('INCLUDE_CHECK',true);
require 'inc/connect.php';
session_name('Login');
session_set_cookie_params(2*7*24*60*60);
session_start();
if(isset($_GET['logoff']))
{
$_SESSION = array();
session_destroy();
header("Location: index.php");
exit;
}
include "inc/header.php";
require "inc/check.php";
include "inc/menu.php";
?>
Code (php)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<form action="" method="post">
<strong>Accountnaam: *</strong> <input type="text" name="usr"/><br/>
<strong>Wachtwoord: *</strong> <input type="text" name="pass"/><br/>
<strong>Wachtwoord controle: *</strong> <input type="text" name="pass2"/><br/>
<strong>Voornaam: *</strong> <input type="text" name="voornaam"/><br/>
<strong>Achternaam: *</strong> <input type="text" name="achternaam"/><br/>
<strong>Huistelefoonnummer:</strong> <input type="text" name="huistelnummer"/><br/>
<strong>Mobielnummer:</strong> <input type="text" name="mobielnummer"/><br/>
<strong>Email: *</strong> <input type="text" name="email"/><br/>
<p>* Benodigde velden</p>
<input type="submit" name="submit" value="Submit">
</form>
<strong>Accountnaam: *</strong> <input type="text" name="usr"/><br/>
<strong>Wachtwoord: *</strong> <input type="text" name="pass"/><br/>
<strong>Wachtwoord controle: *</strong> <input type="text" name="pass2"/><br/>
<strong>Voornaam: *</strong> <input type="text" name="voornaam"/><br/>
<strong>Achternaam: *</strong> <input type="text" name="achternaam"/><br/>
<strong>Huistelefoonnummer:</strong> <input type="text" name="huistelnummer"/><br/>
<strong>Mobielnummer:</strong> <input type="text" name="mobielnummer"/><br/>
<strong>Email: *</strong> <input type="text" name="email"/><br/>
<p>* Benodigde velden</p>
<input type="submit" name="submit" value="Submit">
</form>
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
50
51
52
53
54
55
56
57
58
59
60
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
50
51
52
53
54
55
56
57
58
59
60
<?php
}
// Check of de form als is gesubmit.
if (isset($_POST['submit']))
{
// kijken of de data geldig is
$usr = mysql_real_escape_string(htmlspecialchars($_POST['usr']));
$pass= mysql_real_escape_string(htmlspecialchars($_POST['pass']));
$pass2= mysql_real_escape_string(htmlspecialchars($_POST['pass2']));
$voornaam = mysql_real_escape_string(htmlspecialchars($_POST['voornaam']));
$achternaam = mysql_real_escape_string(htmlspecialchars($_POST['achternaam']));
$huistelnummer = mysql_real_escape_string(htmlspecialchars($_POST['huistelnummer']));
$mobielnummer = mysql_real_escape_string(htmlspecialchars($_POST['mobielnummer']));
$email = mysql_real_escape_string(htmlspecialchars($_POST['email']));
// controleer lengte wachtwoord
if ( strlen($pass) < 6 ){
$error = 'ERROR: Wachtwoord moet minimaal 6 tekens bevatten.';
renderForm($usr, $pass, $pass2, $voornaam, $achternaam, $huistelnummer, $mobielnummer, $email, $error);
}
if ( $pass <> $pass2 ){
$error = 'ERROR: Het wachtwoord is niet hetzelfde als het controle wachtwoord!';
renderForm($usr, $pass, $pass2, $voornaam, $achternaam, $huistelnummer, $mobielnummer, $email, $error);
}
$pass = md5($pass);
$pass2 = md5($pass2);
// controleer email
if ( !stristr($email,"@") || !stristr($email,".")) {
$error = 'Het ingevoerde email-adres is niet juist.';
renderForm($usr, $pass, $pass2, $voornaam, $achternaam, $huistelnummer, $mobielnummer, $email, $error);
}
// check of de velden met * zijn ingevuld
if ($usr == '' || $pass == '' || $pass2 == '' || $voornaam == '' || $achternaam == '' || $email == '')
{
// genereer error bericht
$error = 'ERROR: Vul alle velden in met een *!';
// Als velden leeg zijn laat dan form weer zien
renderForm($usr, $pass, $pass2, $voornaam, $achternaam, $huistelnummer, $mobielnummer, $email, $error);
}
else
{
// sla data op in de database
mysql_query("INSERT members SET usr='$usr', pass='$pass', voornaam='$voornaam', achternaam='$achternaam', huistelnummer='$huistelnummer', mobielnummer='$mobielnummer', email='$email'")
or die(mysql_error());
echo "Nieuw account is aangemaakt. <a href=accounts.php>Klik hier</a> om terug te gaan naar het account overzicht.";
}
}
else
// Als form niet is gesubmit laat dan form weer zien
{
renderForm('','','','','','','','','');
}
?>
}
// Check of de form als is gesubmit.
if (isset($_POST['submit']))
{
// kijken of de data geldig is
$usr = mysql_real_escape_string(htmlspecialchars($_POST['usr']));
$pass= mysql_real_escape_string(htmlspecialchars($_POST['pass']));
$pass2= mysql_real_escape_string(htmlspecialchars($_POST['pass2']));
$voornaam = mysql_real_escape_string(htmlspecialchars($_POST['voornaam']));
$achternaam = mysql_real_escape_string(htmlspecialchars($_POST['achternaam']));
$huistelnummer = mysql_real_escape_string(htmlspecialchars($_POST['huistelnummer']));
$mobielnummer = mysql_real_escape_string(htmlspecialchars($_POST['mobielnummer']));
$email = mysql_real_escape_string(htmlspecialchars($_POST['email']));
// controleer lengte wachtwoord
if ( strlen($pass) < 6 ){
$error = 'ERROR: Wachtwoord moet minimaal 6 tekens bevatten.';
renderForm($usr, $pass, $pass2, $voornaam, $achternaam, $huistelnummer, $mobielnummer, $email, $error);
}
if ( $pass <> $pass2 ){
$error = 'ERROR: Het wachtwoord is niet hetzelfde als het controle wachtwoord!';
renderForm($usr, $pass, $pass2, $voornaam, $achternaam, $huistelnummer, $mobielnummer, $email, $error);
}
$pass = md5($pass);
$pass2 = md5($pass2);
// controleer email
if ( !stristr($email,"@") || !stristr($email,".")) {
$error = 'Het ingevoerde email-adres is niet juist.';
renderForm($usr, $pass, $pass2, $voornaam, $achternaam, $huistelnummer, $mobielnummer, $email, $error);
}
// check of de velden met * zijn ingevuld
if ($usr == '' || $pass == '' || $pass2 == '' || $voornaam == '' || $achternaam == '' || $email == '')
{
// genereer error bericht
$error = 'ERROR: Vul alle velden in met een *!';
// Als velden leeg zijn laat dan form weer zien
renderForm($usr, $pass, $pass2, $voornaam, $achternaam, $huistelnummer, $mobielnummer, $email, $error);
}
else
{
// sla data op in de database
mysql_query("INSERT members SET usr='$usr', pass='$pass', voornaam='$voornaam', achternaam='$achternaam', huistelnummer='$huistelnummer', mobielnummer='$mobielnummer', email='$email'")
or die(mysql_error());
echo "Nieuw account is aangemaakt. <a href=accounts.php>Klik hier</a> om terug te gaan naar het account overzicht.";
}
}
else
// Als form niet is gesubmit laat dan form weer zien
{
renderForm('','','','','','','','','');
}
?>
Weten jullie misschien waar de fout kan zitten?
Alvast bedankt!
Gewijzigd op 05/01/2013 15:59:37 door Davey Mat
En dan je probleem. Je insert in de database staat na de if statements voor de checks. Als die checks niet kloppen, wordt je insert dus alsnog gewoon uitgevoerd.
Toevoeging op 05/01/2013 13:40:35:
Voor de html, geen [.quote.] gebruiken, maar [.code.] (zonder de punten uiteraard)
Dus ik kan zeggen dat ik altijd bij een invoer in de database 'mysql_real_escape_string' gebruik ter preventie van een sql injection en bij het uitlezen van de data gebruik ik altijd 'htmlspecialchars'?
Ik kan er alleen nog niet uit komen waarom de insert buiten de if statements staat. Ik gebruik toch gewoon
Quote:
if { code }
else { code }
else { code }
of waar kijk ik overheen?
Ga consequent inspringen, dan kom je er vanzelf achter. Zonder inspringen is het inderdaad niet te zien en dat merk je nu.
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
define('INCLUDE_CHECK',true);
require 'inc/connect.php';
session_name('Login');
session_set_cookie_params(2*7*24*60*60);
session_start();
if(isset($_GET['logoff']))
{
$_SESSION = array();
session_destroy();
header("Location: index.php");
exit;
}
include "inc/header.php";
require "inc/check.php";
include "inc/menu.php";
?>
define('INCLUDE_CHECK',true);
require 'inc/connect.php';
session_name('Login');
session_set_cookie_params(2*7*24*60*60);
session_start();
if(isset($_GET['logoff']))
{
$_SESSION = array();
session_destroy();
header("Location: index.php");
exit;
}
include "inc/header.php";
require "inc/check.php";
include "inc/menu.php";
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<div class="container">
<form action="" method="post">
<strong>Accountnaam: *</strong> <input type="text" name="usr"/><br/>
<strong>Wachtwoord: *</strong> <input type="text" name="pass"/><br/>
<strong>Wachtwoord controle: *</strong> <input type="text" name="pass2"/><br/>
<strong>Voornaam: *</strong> <input type="text" name="voornaam"/><br/>
<strong>Achternaam: *</strong> <input type="text" name="achternaam"/><br/>
<strong>Huistelefoonnummer:</strong> <input type="text" name="huistelnummer"/><br/>
<strong>Mobielnummer:</strong> <input type="text" name="mobielnummer"/><br/>
<strong>Email: *</strong> <input type="text" name="email"/><br/>
<p>* Benodigde velden</p>
<input type="submit" name="submit" value="Submit">
</form>
<form action="" method="post">
<strong>Accountnaam: *</strong> <input type="text" name="usr"/><br/>
<strong>Wachtwoord: *</strong> <input type="text" name="pass"/><br/>
<strong>Wachtwoord controle: *</strong> <input type="text" name="pass2"/><br/>
<strong>Voornaam: *</strong> <input type="text" name="voornaam"/><br/>
<strong>Achternaam: *</strong> <input type="text" name="achternaam"/><br/>
<strong>Huistelefoonnummer:</strong> <input type="text" name="huistelnummer"/><br/>
<strong>Mobielnummer:</strong> <input type="text" name="mobielnummer"/><br/>
<strong>Email: *</strong> <input type="text" name="email"/><br/>
<p>* Benodigde velden</p>
<input type="submit" name="submit" value="Submit">
</form>
Quote:
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
50
51
52
53
54
55
56
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
50
51
52
53
54
55
56
<?php
// Check of de form al is gesubmit.
if (isset($_POST['submit']))
{
// kijken of de data geldig is
$usr = mysql_real_escape_string($_POST['usr']);
$pass= mysql_real_escape_string($_POST['pass']);
$pass2= mysql_real_escape_string($_POST['pass2']);
$voornaam = mysql_real_escape_string($_POST['voornaam']);
$achternaam = mysql_real_escape_string($_POST['achternaam']);
$huistelnummer = mysql_real_escape_string($_POST['huistelnummer']);
$mobielnummer = mysql_real_escape_string($_POST['mobielnummer']);
$email = mysql_real_escape_string($_POST['email']);
$errors = array();
// check of de velden met * zijn ingevuld
if ($usr == '' || $pass == '' || $pass2 == '' || $voornaam == '' || $achternaam == '' || $email == '')
{
// genereer error bericht
array_push($errors, "ERROR: Vul alle velden in met een *!");
}
// controleer lengte wachtwoord
if ( strlen($pass) < 6 )
{
array_push($errors, "ERROR: Wachtwoord moet minimaal 6 tekens bevatten.");
}
if ( $pass <> $pass2 )
{
array_push($errors, "ERROR: Het wachtwoord is niet hetzelfde als het controle wachtwoord!");
}
$pass = md5($pass);
$pass2 = md5($pass2);
// controleer email
if ( !stristr($email,"@") || !stristr($email,"."))
{
array_push($errors, "Het ingevoerde email-adres is niet juist.");
}
//kijken of er een bericht is ingevuld, zo nee onderbreek het proces, anders ga verder
if(count($errors) >0){
foreach($errors as $error){
echo $error;
}
}
else
{
// sla data op in de database
mysql_query("INSERT members SET usr='$usr', pass='$pass', voornaam='$voornaam', achternaam='$achternaam', huistelnummer='$huistelnummer', mobielnummer='$mobielnummer', email='$email'")
or die(mysql_error());
echo "Nieuw account is aangemaakt. <a href=accounts.php>Klik hier</a> om terug te gaan naar het account overzicht.";
}
}
?>
// Check of de form al is gesubmit.
if (isset($_POST['submit']))
{
// kijken of de data geldig is
$usr = mysql_real_escape_string($_POST['usr']);
$pass= mysql_real_escape_string($_POST['pass']);
$pass2= mysql_real_escape_string($_POST['pass2']);
$voornaam = mysql_real_escape_string($_POST['voornaam']);
$achternaam = mysql_real_escape_string($_POST['achternaam']);
$huistelnummer = mysql_real_escape_string($_POST['huistelnummer']);
$mobielnummer = mysql_real_escape_string($_POST['mobielnummer']);
$email = mysql_real_escape_string($_POST['email']);
$errors = array();
// check of de velden met * zijn ingevuld
if ($usr == '' || $pass == '' || $pass2 == '' || $voornaam == '' || $achternaam == '' || $email == '')
{
// genereer error bericht
array_push($errors, "ERROR: Vul alle velden in met een *!");
}
// controleer lengte wachtwoord
if ( strlen($pass) < 6 )
{
array_push($errors, "ERROR: Wachtwoord moet minimaal 6 tekens bevatten.");
}
if ( $pass <> $pass2 )
{
array_push($errors, "ERROR: Het wachtwoord is niet hetzelfde als het controle wachtwoord!");
}
$pass = md5($pass);
$pass2 = md5($pass2);
// controleer email
if ( !stristr($email,"@") || !stristr($email,"."))
{
array_push($errors, "Het ingevoerde email-adres is niet juist.");
}
//kijken of er een bericht is ingevuld, zo nee onderbreek het proces, anders ga verder
if(count($errors) >0){
foreach($errors as $error){
echo $error;
}
}
else
{
// sla data op in de database
mysql_query("INSERT members SET usr='$usr', pass='$pass', voornaam='$voornaam', achternaam='$achternaam', huistelnummer='$huistelnummer', mobielnummer='$mobielnummer', email='$email'")
or die(mysql_error());
echo "Nieuw account is aangemaakt. <a href=accounts.php>Klik hier</a> om terug te gaan naar het account overzicht.";
}
}
?>
Als ik nu de velden invul en op submit klik dan heb ik een probleempje.
Het formulier blijft staan. Moet ik dit met een else oplossen? Dus 'else' {en dan mijn form}?
Gewijzigd op 05/01/2013 19:53:22 door Davey Mat
Wat je beter kunt doen is eerst alle php logica afhandelen en dan pas je output naar het scherm sturen. Dus nog geen <html> tag versturen als je nog niet alles in php hebt gedaan. Zo kun je heel makkelijk aan het einde bepalen welke pagina de gebruiker voor zijn snuffert krijgt.
Rest mij nog 1 vraag.
Quote:
Wat je beter kunt doen is eerst alle php logica afhandelen en dan pas je output naar het scherm sturen. Dus nog geen <html> tag versturen als je nog niet alles in php hebt gedaan. Zo kun je heel makkelijk aan het einde bepalen welke pagina de gebruiker voor zijn snuffert krijgt.
Waarom is het op de manier die ik had lastiger?
Gewijzigd op 06/01/2013 21:17:30 door Davey Mat