fout met insert database
Ik heb een vraagje, ik heb zelf al van alles geprobeerd. Maar ik kom er maar niet uit. Het is een fout met het inserten van de database.
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
<?php
$sql = mysql_query("INSERT INTO leden (gebruikersnaam, emailadress, wachtwoord, voornaam, achternaam, adres, postcode, plaats)VALUES (
".$_POST[md5('user')].",
".$_POST[md5('email')].",
".$_POST[md5(md5('pass'))].",
".$_POST[md5('voornaam')].",
".$_POST[md5('achternaam')].",
".$_POST[md5('postcode')].",
".$_POST[md5('huisnr')].",
".$_POST[md5('straat')].",
".$_POST[md5('woonplaats')].")");
?>
$sql = mysql_query("INSERT INTO leden (gebruikersnaam, emailadress, wachtwoord, voornaam, achternaam, adres, postcode, plaats)VALUES (
".$_POST[md5('user')].",
".$_POST[md5('email')].",
".$_POST[md5(md5('pass'))].",
".$_POST[md5('voornaam')].",
".$_POST[md5('achternaam')].",
".$_POST[md5('postcode')].",
".$_POST[md5('huisnr')].",
".$_POST[md5('straat')].",
".$_POST[md5('woonplaats')].")");
?>
Gewijzigd op 01/01/1970 01:00:00 door Rick Donderwinkel
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
<?PHP
$sql = mysql_query('INSERT INTO leden (gebruikersnaam, emailadress, wachtwoord, voornaam, achternaam, adres, postcode, plaats) VALUES (
\''.mysql_escape_string($_POST['user']).'\',
\''.mysql_escape_string($_POST['email']).'\',
\''.mysql_escape_string(md5($_POST['pass'])).'\',
\''.mysql_escape_string($_POST['voornaam']).'\',
\''.mysql_escape_string($_POST['acternaam']).'\',
\''.mysql_escape_string($_POST['postcode']).'\',
\''.mysql_escape_string($_POST['huisnr']).'\',
\''.mysql_escape_string($_POST['straat']).'\',
\''.mysql_escape_string($_POST['woonplaats']).'\')');
?>
$sql = mysql_query('INSERT INTO leden (gebruikersnaam, emailadress, wachtwoord, voornaam, achternaam, adres, postcode, plaats) VALUES (
\''.mysql_escape_string($_POST['user']).'\',
\''.mysql_escape_string($_POST['email']).'\',
\''.mysql_escape_string(md5($_POST['pass'])).'\',
\''.mysql_escape_string($_POST['voornaam']).'\',
\''.mysql_escape_string($_POST['acternaam']).'\',
\''.mysql_escape_string($_POST['postcode']).'\',
\''.mysql_escape_string($_POST['huisnr']).'\',
\''.mysql_escape_string($_POST['straat']).'\',
\''.mysql_escape_string($_POST['woonplaats']).'\')');
?>
Want je bent ook je beveiliging vergeten.....
en je mist er een paar bij je veld namen...
Mijn SQL ziet er zo uitL
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
CREATE TABLE IF NOT EXISTS `leden` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`gebruikersnaam` varchar(255) NOT NULL,
`emailadress` varchar(255) NOT NULL,
`wachtwoord` varchar(255) NOT NULL,
`voornaam` varchar(255) NOT NULL,
`achternaam` varchar(255) NOT NULL,
`adres` varchar(255) NOT NULL,
`postcode` varchar(7) NOT NULL,
`plaats` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
?>
CREATE TABLE IF NOT EXISTS `leden` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`gebruikersnaam` varchar(255) NOT NULL,
`emailadress` varchar(255) NOT NULL,
`wachtwoord` varchar(255) NOT NULL,
`voornaam` varchar(255) NOT NULL,
`achternaam` varchar(255) NOT NULL,
`adres` varchar(255) NOT NULL,
`postcode` varchar(7) NOT NULL,
`plaats` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
?>
want deze moeten gelijk zijn in aantal..
Welke foutmelding(en) krijg je ?
Gewijzigd op 01/01/1970 01:00:00 door Marco PHPJunky
PS: ik zie het al, ik was huisnummer vergeten
Gewijzigd op 01/01/1970 01:00:00 door Rick Donderwinkel
Daar heb je er bij de veld namen 8 staan... en bij de value 9 staan....
zet er anders even: or die ('kan niet omdat ==> ' . mysql_error());
achter ...
En wat krijg je allemaal voor foutmeldingen ?
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
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
<?PHP
$sql =
"
INSERT INTO
leden
(
gebruikersnaam,
emailadress,
wachtwoord,
voornaam,
achternaam,
adres,
postcode,
plaats
)
VALUES
(
'".mysql_escape_string($_POST['user'])."',
'".mysql_escape_string($_POST['email'])."',
'".mysql_escape_string(md5($_POST['pass']))."',
'".mysql_escape_string($_POST['voornaam'])."',
'".mysql_escape_string($_POST['acternaam'])."',
'".mysql_escape_string($_POST['postcode'])."',
'".mysql_escape_string($_POST['huisnr'])."',
'".mysql_escape_string($_POST['straat'])."',
'".mysql_escape_string($_POST['woonplaats'])."'
)
";
?>
$sql =
"
INSERT INTO
leden
(
gebruikersnaam,
emailadress,
wachtwoord,
voornaam,
achternaam,
adres,
postcode,
plaats
)
VALUES
(
'".mysql_escape_string($_POST['user'])."',
'".mysql_escape_string($_POST['email'])."',
'".mysql_escape_string(md5($_POST['pass']))."',
'".mysql_escape_string($_POST['voornaam'])."',
'".mysql_escape_string($_POST['acternaam'])."',
'".mysql_escape_string($_POST['postcode'])."',
'".mysql_escape_string($_POST['huisnr'])."',
'".mysql_escape_string($_POST['straat'])."',
'".mysql_escape_string($_POST['woonplaats'])."'
)
";
?>
Notice: Use of undefined constant mysql_num_rows - assumed 'mysql_num_rows' in C:\Program Files\xampplite\htdocs\test\include_files\registreer.php on line 13
Of hoe ziet je script er nu uit...
Hier ga ik kijken of de gebruikersnaam al reeds in gebruik is
en hoe doe je dat dan ?
if(mysql_num_rows($sql) == 0) {
Maak daar van
$result = mysql_query($sql);
if(mysql_num_rows($result) == 0) {
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
if($_CONFIG['database_active'] == '1') {
if(isset($_POST['subm'])) {
// controleren van velden account gegevens
if($_POST['user'] != "" AND $_POST['email'] != "" AND $_POST['pass'] != "") {
$sql = mysql_query("SELECT gebruikersnaam FROM leden WHERE gebruikersnaam='".$_POST['user']."'");
if(mysql_num_rows($sql) == 0) {
if(preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,6}$/i", $_POST['email'])) {
$account = 'oke';
}else{
$fout .= '<small>Het opgegeven emailadres is niet geldig</strong></small><br>';
}
}else{
$fout .= '<small>De opgegeven gebruikersnaam is reeds in gebruik</strong></small><br>';
}
}else{
$fout .= '<small>U bent een of meerdere velden vergeten in te voeren bij <strong>Account gegevens</strong></small><br>';
}
// controleren van velden persoonlijke gegevens
if($_POST['voornaam'] != "" AND $_POST['achternaam'] != "" AND $_POST['postcode'] != "" AND $_POST['huisnr'] != "" AND $_POST['straat'] != "" AND $_POST['woonplaats'] != "") {
$persoonlijk = 'oke';
}else{
$fout .= '<small>U bent een of meerdere velden vergeten in te voeren bij <strong>Persoonlijke gegevens</strong></small><br>';
}
// als alles correct is afgehandeld
if($account == 'oke' && $persoonlijk == 'oke') {
$sql =
"
INSERT INTO
leden
(
gebruikersnaam,
emailadress,
wachtwoord,
voornaam,
achternaam,
adres,
postcode,
straat,
plaats
)
VALUES
(
'".mysql_escape_string($_POST['user'])."',
'".mysql_escape_string($_POST['email'])."',
'".mysql_escape_string(md5($_POST['pass']))."',
'".mysql_escape_string($_POST['voornaam'])."',
'".mysql_escape_string($_POST['acternaam'])."',
'".mysql_escape_string($_POST['postcode'])."',
'".mysql_escape_string($_POST['huisnr'])."',
'".mysql_escape_string($_POST['straat'])."',
'".mysql_escape_string($_POST['woonplaats'])."'
)
";
if($sql == true) {
echo 'goed';
}
}
// fouten weergeven
if(isset($fout)) {
echo '<small><strong>Fouten:</strong></small><br>';
echo $fout;
}
}
if(isset($invoer)) {
echo '<small><strong>Registratie geslaagd:</strong></small><br>';
}
?>
if($_CONFIG['database_active'] == '1') {
if(isset($_POST['subm'])) {
// controleren van velden account gegevens
if($_POST['user'] != "" AND $_POST['email'] != "" AND $_POST['pass'] != "") {
$sql = mysql_query("SELECT gebruikersnaam FROM leden WHERE gebruikersnaam='".$_POST['user']."'");
if(mysql_num_rows($sql) == 0) {
if(preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,6}$/i", $_POST['email'])) {
$account = 'oke';
}else{
$fout .= '<small>Het opgegeven emailadres is niet geldig</strong></small><br>';
}
}else{
$fout .= '<small>De opgegeven gebruikersnaam is reeds in gebruik</strong></small><br>';
}
}else{
$fout .= '<small>U bent een of meerdere velden vergeten in te voeren bij <strong>Account gegevens</strong></small><br>';
}
// controleren van velden persoonlijke gegevens
if($_POST['voornaam'] != "" AND $_POST['achternaam'] != "" AND $_POST['postcode'] != "" AND $_POST['huisnr'] != "" AND $_POST['straat'] != "" AND $_POST['woonplaats'] != "") {
$persoonlijk = 'oke';
}else{
$fout .= '<small>U bent een of meerdere velden vergeten in te voeren bij <strong>Persoonlijke gegevens</strong></small><br>';
}
// als alles correct is afgehandeld
if($account == 'oke' && $persoonlijk == 'oke') {
$sql =
"
INSERT INTO
leden
(
gebruikersnaam,
emailadress,
wachtwoord,
voornaam,
achternaam,
adres,
postcode,
straat,
plaats
)
VALUES
(
'".mysql_escape_string($_POST['user'])."',
'".mysql_escape_string($_POST['email'])."',
'".mysql_escape_string(md5($_POST['pass']))."',
'".mysql_escape_string($_POST['voornaam'])."',
'".mysql_escape_string($_POST['acternaam'])."',
'".mysql_escape_string($_POST['postcode'])."',
'".mysql_escape_string($_POST['huisnr'])."',
'".mysql_escape_string($_POST['straat'])."',
'".mysql_escape_string($_POST['woonplaats'])."'
)
";
if($sql == true) {
echo 'goed';
}
}
// fouten weergeven
if(isset($fout)) {
echo '<small><strong>Fouten:</strong></small><br>';
echo $fout;
}
}
if(isset($invoer)) {
echo '<small><strong>Registratie geslaagd:</strong></small><br>';
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Rick Donderwinkel
Controleren op variabele leegte doen we zo:
Foutafhandeling queries ontbreekt. Doe dit zo:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$query = "jequery";
if(!$result = mysql_query($query)){
trigger_error(mysql_error());
}
else {
//rest code
}
?>
$query = "jequery";
if(!$result = mysql_query($query)){
trigger_error(mysql_error());
}
else {
//rest code
}
?>
Gebruik ook in je eerste query mysql_real_escape_string.
Een md5 bevat nooit gekke tekens die je database kunnen "hacken", dus mysql_real_escape_string(md5(...)) is overbodig. Gebruik alleen md5(blabla) .
MD5 word trouwens tegenwoordig gezien als "onveilig". Gebruik 1 van de vele andere algoritmes van hash() , óf gebruik in ieder geval een SALT.
Je kan trouwens ook:
herschrijven naar:
In je eerste regel zou ik als ik jou was gebruik maken van true of false, en niet de STRING '1'. Dus
Code (php)
1
2
3
4
2
3
4
<?php
// === betekent gelijk EN hetzelfde type
if($_CONFIG['database_active'] === true) {
?>
// === betekent gelijk EN hetzelfde type
if($_CONFIG['database_active'] === true) {
?>
in plaats van:
Rewrite van je code:
{KOMT IN EDIT}
Gewijzigd op 01/01/1970 01:00:00 door Afra ca
Heb je misschien een voorbeeldje hoe je een goed beveiligd wachtwoord maakt?
Kan je bijvoorbeeld ook een md5 en een hash samen doen? Of zal dat niet veel uitmaken kwa sterkte?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
/*encryption functie*/
function custom_hash($pass, $username) {
/*Pepper ophalen uit bestand */
$pepperfile = "pepper.txt";
$fh = fopen($pepperfile, 'r');
$pepper = fread($fh, filesize($pepperfile));
fclose($fh);
/*salt ophalen uit database*/
$query = "SELECT Salt FROM salt WHERE Gebruikersnaam = '".$username."'";
$result = mysql_query($query);
$rij = mysql_fetch_assoc($result);
$salt = $rij['Salt'];
/*password generaten*/
return hash('ripemd160', $pepper.$pass.$salt);
}
?>
/*encryption functie*/
function custom_hash($pass, $username) {
/*Pepper ophalen uit bestand */
$pepperfile = "pepper.txt";
$fh = fopen($pepperfile, 'r');
$pepper = fread($fh, filesize($pepperfile));
fclose($fh);
/*salt ophalen uit database*/
$query = "SELECT Salt FROM salt WHERE Gebruikersnaam = '".$username."'";
$result = mysql_query($query);
$rij = mysql_fetch_assoc($result);
$salt = $rij['Salt'];
/*password generaten*/
return hash('ripemd160', $pepper.$pass.$salt);
}
?>
Natuurlijk zet je pepper file buiten webserver.
Interessant, want een md5() heeft altijd precies varchar(32) nodig.
Dus die met 7 gaat helemaal fout.
waarom zal dat fout moeten gaan, de varchar(7) is voor de postcode. Deze mag niet langer zijn dan 7 karakters.
Dan maakt het niet meer uit of je waarde nou 2, 5, 7 of 12 tekens heeft, de hash waarde (md5) wordt altijd een combinatie van 32 tekens, wat niet gaat passen in een varchar veld met een maximale lengte van 7.
Het gaat hier om mysql, dus een fout zou je daar niet voor terug krijgen enkel dat niet alles wordt opgeslagen 8-)