SQL gegevens uitlezen & SESSION
Ik wil met een sql query gegevens uit mijn database uitlezen, en deze in een session variabele stoppen.
Twee problemen:
- Iemand logt in, is correct. Voordat hij wordt doorgestuurd naar zijn profiel, wil ik uit de query het 'id' halen wat bij de username hoort. Dit is net zoals username en password enz een kolom in de database.
Query:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$sql = mysql_query (
"SELECT id
FROM user
WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'
AND password = '" . mysql_real_escape_string($_POST['password']) . "'
" );
"SELECT id
FROM user
WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'
AND password = '" . mysql_real_escape_string($_POST['password']) . "'
" );
- Iemand is daarna ingelogd, en is op zijn profiel gekomen. De eerste keer dat hij inlogt, moet hij een lijst met kenmerken invullen. Deze staan op een aparte pagina. Ik wil met behulp van zijn id (zie eerste probleem) in de database kijken of een bepaald veld leeg is of niet, en als dat veld leeg is stuur ik hem door naar die pagina.
Script/query:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
session_start();
$con = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());
mysql_select_db("datingsite", $con) or die('Could not find database: ' . mysql_error());
// Kijk of lijst 1 ingevuld is, zo niet stuur door naar lijst 1
$sql=" SELECT Provincie
FROM user
WHERE id = '" . ($_SESSION['id']) . "' "
IF ($sql(provincie) IS NULL)
{ header('Location: insert-kenmerk1.php'); }
// Kijk of lijst 2 ingevuld is, zo niet stuur door naar lijst 2
$sql=" SELECT Provincie
FROM partner
WHERE id = '" . ($_SESSION['id']) . "' "
IF ($sql(provincie) IS NULL)
{ header('Location: insert-kenmerk2.php'); }
?>
session_start();
$con = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());
mysql_select_db("datingsite", $con) or die('Could not find database: ' . mysql_error());
// Kijk of lijst 1 ingevuld is, zo niet stuur door naar lijst 1
$sql=" SELECT Provincie
FROM user
WHERE id = '" . ($_SESSION['id']) . "' "
IF ($sql(provincie) IS NULL)
{ header('Location: insert-kenmerk1.php'); }
// Kijk of lijst 2 ingevuld is, zo niet stuur door naar lijst 2
$sql=" SELECT Provincie
FROM partner
WHERE id = '" . ($_SESSION['id']) . "' "
IF ($sql(provincie) IS NULL)
{ header('Location: insert-kenmerk2.php'); }
?>
Dit klopt vast en zeker niet, vooral de eerste niet.
Vertel graag even wat er fout is, en hoe het wel moet.
Alvast bedankt!
Gewijzigd op 16/11/2012 21:34:26 door Kevin Zegikniet
Er zitten gewoon foutmeldingen in het script. Haal die er eerst eens ZELF uit.
Dan zal ik eens kijken.
Toevoeging op 16/11/2012 21:36:49:
Ben weer in een veel te goede bui volgens mij:
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
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
<?php
session_start();
$con = mysql_connect("localhost", "root", "") or die('Could not connect: ' . mysql_error());
mysql_select_db("datingsite", $con) or die('Could not find database: ' . mysql_error());
// Kijk of lijst 1 ingevuld is, zo niet stuur door naar lijst 1
$sql = " SELECT Provincie
FROM user
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id";
$res = mysql_query($sql);
if($res == false)
{
echo 'Er is een fout op regel ' . __LINE__;
}
else
{
$information = mysql_fetch_row($res);
if($information[0] == '')
{
header('Location: insert-kenmerk1.php');
}
}
// Kijk of lijst 2 ingevuld is, zo niet stuur door naar lijst 2
// Kijk of lijst 1 ingevuld is, zo niet stuur door naar lijst 1
$sql = " SELECT Provincie
FROM partner
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id";
$res = mysql_query($sql);
if($res == false)
{
echo 'Er is een fout op regel ' . __LINE__;
}
else
{
$information = mysql_fetch_row($res);
if($information[0] == '')
{
header('Location: insert-kenmerk2.php');
}
}
?>
session_start();
$con = mysql_connect("localhost", "root", "") or die('Could not connect: ' . mysql_error());
mysql_select_db("datingsite", $con) or die('Could not find database: ' . mysql_error());
// Kijk of lijst 1 ingevuld is, zo niet stuur door naar lijst 1
$sql = " SELECT Provincie
FROM user
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id";
$res = mysql_query($sql);
if($res == false)
{
echo 'Er is een fout op regel ' . __LINE__;
}
else
{
$information = mysql_fetch_row($res);
if($information[0] == '')
{
header('Location: insert-kenmerk1.php');
}
}
// Kijk of lijst 2 ingevuld is, zo niet stuur door naar lijst 2
// Kijk of lijst 1 ingevuld is, zo niet stuur door naar lijst 1
$sql = " SELECT Provincie
FROM partner
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id";
$res = mysql_query($sql);
if($res == false)
{
echo 'Er is een fout op regel ' . __LINE__;
}
else
{
$information = mysql_fetch_row($res);
if($information[0] == '')
{
header('Location: insert-kenmerk2.php');
}
}
?>
En wat zie ik... sla je op 2 plekken dezelfde gegevens op?
Heb je voor de gebruiker een tabel en voor de 'partner' een andere tabel met exact dezelfde opzet?
En wat moet ik verstaan onder partner? Echtgenoot? Vriendje? Of speelmaatje in een computerspel?
Mocht het zo zijn dat je gegevens 2 keer opslaat: niet doen!
Ik moet voor Informatica een site maken, een database opzetten en een verbinding daartussen.
Je moet kunnen registreren (gegevens wegschrijven), kunnen inloggen (gegevens uitlezen), en weer kenmerken invullen (weer wegschrijven, maar nu op een precieze plek waar het id al vaststaat (wat trouwens ook auto-increment is) ).
Wij schrijven dus gegevens weg over wat de gebruiker zelf is (huidskleur, opleiding, provincie waar 'ie woont, etc) en over wat de gebruiker in een (potentiele) partner zoekt (heeft in principe zelfde kenmerken, met als verschil dat een aantal gegevens anders worden opgeslagen )
Gegevens twee keer opslaan is dus hetgene wat ik wil voorkomen. Ik kijk in het script zelf eerst al of alles goed ingevuld is, en pas als dat zo is, schrijf ik de gegevens weg.
Ik krijg nu een error "unexpecting '}' ", op de plek waar die juist moet staan. En Notepad + + geeft ook aan dat de } een voorafgaande { heeft, en alles wat daarbinnen gebeurt ook. Dit is dus bij de error_reporting(E_ALL); lijn.
Ik heb nu bij profiel bovenstaande eens geprobeerd.
Bij de regel waar staat
echo 'Er is een fout op regel ' . __LINE__;
(rgl 15)
Vind het script een fout, die verwijst naar, raad eens?
Juist. regel 15.
ik upload het hele script wel even, ik kom er ook niet meer uit.
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
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
<?php
session_unset();
session_start();
mysql_connect("localhost", "root", "") or die("Kan niet verbinden met de database: " . mysql_error());
mysql_select_db("datingsite") or die("Kan de database niet vinden: ". mysql_error());
$sql = mysql_query (
"SELECT id
FROM user
WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'
AND password = '" . mysql_real_escape_string($_POST['password']) . "'
" );
IF($sql === false)
{ echo 'Error: ' . mysql_error(); }
else {
// Kijk of lijst 1 ingevuld is, zo niet stuur door naar lijst 1
$sql=" SELECT Provincie
FROM user
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id";
if ((mysql_query($sql)) == false)
{ echo"Er is een fout op regel " . __LINE__; }
else { $info = mysql_fetch_row(mysql_query($sql));
if ($info[0] == '')
{ header('Location: insert-kenmerk1.php'); }
else {// Kijk of lijst 2 ingevuld is, zo niet stuur door naar lijst 2
$sql=" SELECT Provincie
FROM partner
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id";
if ((mysql_query($sql)) == false)
{ echo"Er is een fout op regel " . __LINE__ ; }
else { $info = mysql_fetch_row(mysql_query($sql));
if ($info[0] == '')
{ header('Location: insert-kenmerk2.php'); }
else { //Ga naar profiel
if(mysql_num_rows($sql) == 1)
{ $_SESSION['username']=$_POST[username];
$_POST[controle]="FALSE";
$_SESSION['id']=$sql;
header('Location: profiel.php'); }
else
{ $_SESSION['error_inlog']="Verkeerde combinatie ingevuld!";
header('Location: index.html'); }
}
}
}
}
}
?>
session_unset();
session_start();
mysql_connect("localhost", "root", "") or die("Kan niet verbinden met de database: " . mysql_error());
mysql_select_db("datingsite") or die("Kan de database niet vinden: ". mysql_error());
$sql = mysql_query (
"SELECT id
FROM user
WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'
AND password = '" . mysql_real_escape_string($_POST['password']) . "'
" );
IF($sql === false)
{ echo 'Error: ' . mysql_error(); }
else {
// Kijk of lijst 1 ingevuld is, zo niet stuur door naar lijst 1
$sql=" SELECT Provincie
FROM user
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id";
if ((mysql_query($sql)) == false)
{ echo"Er is een fout op regel " . __LINE__; }
else { $info = mysql_fetch_row(mysql_query($sql));
if ($info[0] == '')
{ header('Location: insert-kenmerk1.php'); }
else {// Kijk of lijst 2 ingevuld is, zo niet stuur door naar lijst 2
$sql=" SELECT Provincie
FROM partner
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id";
if ((mysql_query($sql)) == false)
{ echo"Er is een fout op regel " . __LINE__ ; }
else { $info = mysql_fetch_row(mysql_query($sql));
if ($info[0] == '')
{ header('Location: insert-kenmerk2.php'); }
else { //Ga naar profiel
if(mysql_num_rows($sql) == 1)
{ $_SESSION['username']=$_POST[username];
$_POST[controle]="FALSE";
$_SESSION['id']=$sql;
header('Location: profiel.php'); }
else
{ $_SESSION['error_inlog']="Verkeerde combinatie ingevuld!";
header('Location: index.html'); }
}
}
}
}
}
?>
Hiermee krijg ik dus de error:
"Er is een fout op regel 24"
Dit is de eerste __LINE__
Gewijzigd op 16/11/2012 22:33:54 door Kevin Zegikniet
Gewijzigd op 16/11/2012 22:53:44 door John D
Dafuq?
Ik had het eerst zo ontworpen:
- tabel voor wat de user is
- tabel voor wat de user zoekt
Als ik dan de tabel user vergelijk met de tabel partner van een ander, kijk ik of het een 70% match is (ik zeg maar wat, daar ben ik nog niet aan toe).
Als het een 70% match is, kijk ik of de tabel user van de ander ook overeenkomt met de tabel partner van de eerste persoon. is dit ook een 70% match, dan zijn ze aan elkaar gematchd.
Misschien moet ik daar idd nog een tabel voor maken, de match-tabel.
Ik denk dan aan de volgende kolomen:
ID-1 | voornaam-1 | achternaam-1 | matchpercentage | ID-2 | voornaam-2 | achternaam-2
Maar zoals ik al zei, daar ben ik nog lang niet aan toe.
Gewijzigd op 16/11/2012 23:11:55 door John D
ik heb de database nog eens bekeken, en daar zat nog een oude tabel in, waar de kolom Provincie nog niet instond. FF illegaal erbij gezet (niet nieuwe script geload maar via phpmyadmin erbij gezet) en nu werkt ie.
Sorry jongens!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
session_start();
$_POST['username']="admin";
$md5_pass=(md5("root"));
$con = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());
mysql_select_db("datingsite", $con) or die('Could not find database: ' . mysql_error());
$sql_inlog = mysql_query (
"SELECT id
FROM user
WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'
AND password = '" . ($md5_pass) . "'
" );
echo $_SESSION['id'];
$_SESSION['id']=mysql_fetch_row($sql_inlog);
?>
session_start();
$_POST['username']="admin";
$md5_pass=(md5("root"));
$con = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());
mysql_select_db("datingsite", $con) or die('Could not find database: ' . mysql_error());
$sql_inlog = mysql_query (
"SELECT id
FROM user
WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'
AND password = '" . ($md5_pass) . "'
" );
echo $_SESSION['id'];
$_SESSION['id']=mysql_fetch_row($sql_inlog);
?>
Geeft de uitkomst:
"Array"
Wat nu?
Ik wil graag de uitkomst "30" (heeft id 30 in de database)
Gewijzigd op 16/11/2012 23:46:48 door Kevin Zegikniet
- Niet onnodig variabele aanmaken als dat niet nodig is!
- Vergeet a.u.b. zo snel mogelijk de functie or die die had al lang uit PHP verbannen moeten worden!
(kijk een naar de goede en vele malen nettere manier try/catch Linkje)
- Het gebruik van MySQL is echt uit het Stene tijdperk en zwaar afgeraden (zelfs door PHP zelf Rode Vlak om te beginnen) kijk eens naar mysqli of pdo!
- check de invoer van de gebruikers en kijk of de gebruiker wel bestaat in je database.
- waarom heb je line 3 nodig ?
- Gebruik GEEN md5 ook die is zwaar achterhaald, gebruik een hash!(bv. sha512() )
- kijk eens naar SQL limit en input controlles.
als je wilt kijken wat er in de array zit dan kan je dat zo doen:
en misschien heb je hier ook wat aan:
SQL Handleiding
PHP Handleiding
Fouten tegengaan
Greets.
Gewijzigd op 17/11/2012 01:19:40 door Marco PHPJunky
- ik vind em wel handig
- het gebruik van MySQL is verplicht door onze leraar
- Doe ik toch ook? Volgens mij haal ik alle rijen uit de database waar de combinatie van het ingevulde username en wachtwoord instaat, en als dit geen 1 is (dus als er meer mensen zijn of als er geen mensen zijn) wordt 'ie niet binnengelaten
- Ik kan ook de gegevens doorsturen vanaf de vorige pagina, maar dit komt op hetzelfde neer en dit is korter (dit gebruik ik dus NIET op de site, maar dit is een verkorte versie voor hierop)
- Okido, zal eens even rondkijken. Dat werkt hetzelfde als md5 voor het script? (md5 is "md5($variabele)")
Thnx voor de functie!
Hij is niet netjes in het weergeven van een foutmelding hij stopt direct die uitvoer van de overige scripts in plaats van een nette foutmelding weer te geven waar een gebruiker wat aan heeft.
Verplicht door je leraar ?! Dan zou ik hem toch eens heel snel ervan overtuigen dat hij jullie dingen aan leert die totaal niet meer gebruikt mogen worden en uit het jaar 1700 komen ( of zo snel mogelijk een betere leraar zoeken die wel weet wat normaal en wat de afgelopen 10 jaar veranderd is)!!
een simpele hash ziet er bijvoorbeeld zo uit:
md5 word afgeraden omdat het al heeeeeeeel erg oud is en er 1000 en 1 :P md5 rainbow tables bestaan waar bijna elke denkbaar wachtwoord in staat in md5 en daardoor vrij eenvoudig gekraakt kan worden!
Ik weet niet of je dat doet want ik zie geen recent overzicht van de huidige code maar het ziet er in je laatste stukje niet echt goed/netjes uit en ook dat je het niet checked!
Ik zit nog op de middelbare school he? En we hebben maar 1 informaticaleraar, maar bij hem is het vak heilig. Kom je aan zijn vak, dan kom je aan hem. Verder is het heen hele leuke man.
Ik zal eens kijken.
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
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
<?php
session_unset();
session_start();
mysql_connect("localhost", "root", "") or die("Kan niet verbinden met de database: " . mysql_error());
mysql_select_db("datingsite") or die("Kan de database niet vinden: ". mysql_error());
$sha512_pass=(hash('sha512', $sha512_pass, $_POST['password']));
$sql_inlog = mysql_query (
"SELECT id
FROM user
WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'
AND password = '" . mysql_real_escape_string($sha512_pass) . "'
" );
$_SESSION['id']="<pre><var_dump($sql_inlog)></pre>";
IF($sql_inlog === false)
{ echo 'Error: ' . mysql_error(); }
else {
// Kijk of lijst 1 ingevuld is, zo niet stuur door naar lijst 1
$sql_l1 = mysql_query (
"SELECT provincie
FROM user
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id") ;
if ($sql_l1 === false)
{ echo 'Error: ' . mysql_error(); }
else { $info = mysql_fetch_row($sql_l1);
if ($info[0] == '')
{ header('Location: lijst1.php'); }
else {// Kijk of lijst 2 ingevuld is, zo niet stuur door naar lijst 2
$sql_l2=mysql_query(
"SELECT Provincie
FROM partner
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id");
if ($sql_l2===false)
{ echo"Er is een fout op regel " . __LINE__ ; }
else { $info = mysql_fetch_row($sql_l2);
if ($info[0] == '')
{ header('Location: lijst2.php'); }
else { //Ga naar profiel
if(mysql_num_rows($sql_inlog) == 1)
{ $_SESSION['username']=$_POST[username];
$_POST[controle]="FALSE";
$_SESSION['id']=$sql_inlog;
header('Location: profiel.php'); }
else
{ $_SESSION['error_inlog']="Verkeerde combinatie ingevuld!";
header('Location: index.html'); }
}
}
}
}
}
?>
session_unset();
session_start();
mysql_connect("localhost", "root", "") or die("Kan niet verbinden met de database: " . mysql_error());
mysql_select_db("datingsite") or die("Kan de database niet vinden: ". mysql_error());
$sha512_pass=(hash('sha512', $sha512_pass, $_POST['password']));
$sql_inlog = mysql_query (
"SELECT id
FROM user
WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'
AND password = '" . mysql_real_escape_string($sha512_pass) . "'
" );
$_SESSION['id']="<pre><var_dump($sql_inlog)></pre>";
IF($sql_inlog === false)
{ echo 'Error: ' . mysql_error(); }
else {
// Kijk of lijst 1 ingevuld is, zo niet stuur door naar lijst 1
$sql_l1 = mysql_query (
"SELECT provincie
FROM user
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id") ;
if ($sql_l1 === false)
{ echo 'Error: ' . mysql_error(); }
else { $info = mysql_fetch_row($sql_l1);
if ($info[0] == '')
{ header('Location: lijst1.php'); }
else {// Kijk of lijst 2 ingevuld is, zo niet stuur door naar lijst 2
$sql_l2=mysql_query(
"SELECT Provincie
FROM partner
WHERE id = " . intval($_SESSION['id']) . "
ORDER BY id");
if ($sql_l2===false)
{ echo"Er is een fout op regel " . __LINE__ ; }
else { $info = mysql_fetch_row($sql_l2);
if ($info[0] == '')
{ header('Location: lijst2.php'); }
else { //Ga naar profiel
if(mysql_num_rows($sql_inlog) == 1)
{ $_SESSION['username']=$_POST[username];
$_POST[controle]="FALSE";
$_SESSION['id']=$sql_inlog;
header('Location: profiel.php'); }
else
{ $_SESSION['error_inlog']="Verkeerde combinatie ingevuld!";
header('Location: index.html'); }
}
}
}
}
}
?>
Ik snap er nu helemaal niks meer van, trouwens.
EDIT: gefixt.
Gewijzigd op 17/11/2012 02:07:08 door Kevin Zegikniet
Voor het hashen van wachtwoorden kijk eens naar crypt en de daarbij behorende functies.
Ik heb hem heel even een beetje voor je aangepast...
Met PDO en nog wat andere dingen...
Je zou ook nog het verbinden met de database in een apart bestand kunnen zetten en deze 'includen'
Code (php)
(de include/require moet dan na de session_start() en voor de eerste if komen te staan)
Have Fun...
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<?php
session_start();
// weg halen of uit zetten als het live gaat!
ini_set('display_errors', 1);
error_reporting(E_ALL);
// Gegevens voor verbinden met de database.....
$db = array(
'host' => 'localhost',
'dbname' => 'datingsite',
'user' => 'root',
'pass' => ''
);
try // probeer verbinding te maken met de database.....
{
$db = new PDO('mysql:host='.$db['host'].';dbname='.$db['dbname'], $db['user'], $db['pass']);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->query("SET SESSION sql_mode = 'ANSI,ONLY_FULL_GROUP_BY'");
}
catch(PDOException $e) // als er iets fout gaat....
{
$sMsg = '<p>
<hr>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Trace: '. $e->getTraceAsString() .'<br />
Foutmelding: '.nl2br($e->getMessage()).'
<hr>
</p>';
trigger_error($sMsg);
}
if( $_SERVER['REQUEST_METHOD'] == 'POST' ): // is er een post gedaan....
// kijken of er een wachtwoord is ingevuld en of deze langer of gelijk is aan minimaal 5 tekens
if ( empty($_POST['password']) || !is_string($_POST['password']) || is_null($_POST['password']) || !strlen($_POST['password']) >= 5 ):
// Leeg Wachtwoord...
$_SESSION['error_inlog'] = "Er is nog geen wachtwoord ingevuld!";
header('Location: index.html'); // doorsturen....
exit();
endif;
// kijken of er een gebruikersnaam is ingevuld en of deze langer of gelijk is aan minimaal 5 tekens
if ( empty($_POST['username']) || !is_string($_POST['username']) || is_null($_POST['username']) || !strlen($_POST['username']) >= 5 ):
// Lege Gebruikersnaam
$_SESSION['error_inlog'] = "Er is nog geen Gebruikersnaam ingevuld!";
header('Location: index.html'); // doorsturen....
exit();
endif;
// kijken of beide dingen zijn ingevuld en ook minimaal 5 tekens lang zijn...
if ( !empty($_POST['password']) && !is_null($_POST['password']) && is_string($_POST['username']) && strlen($_POST['password']) > = 5 && !empty($_POST['username']) && !is_null($_POST['username']) && strlen($_POST['username']) > = 5 ):
// Verrander de pepper met je eigen geheime tekst...
$pepper = 'GehE!m_W@chtw00rD';
// wachtwoord maken....
$sha512_pass = hash('sha512', $_POST['password'] . $pepper);
try // probeer query uit te voeren...
{
$stmt = $db->prepare('select id from user where username = :gebruikersnaam and password = :wachtwoord limit 1');
$stmt->bindParam(':gebruikersnaam', $_POST['username'], PDO::PARAM_STR); // gebruikersnaam binden aan query....
$stmt->bindParam(':wachtwoord', $sha512_pass, PDO::PARAM_STR); // wachtwoord binden aan query....
$stmt->execute(); // uitvoeren....
}
catch(PDOException $e) // als er iets fout gaat....
{
$sMsg = '<p>
<hr>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Trace: '. $e->getTraceAsString() .'<br />
Foutmelding: '.nl2br($e->getMessage()).'
<hr>
</p>';
trigger_error($sMsg);
}
if ( $stmt->rowCount() ): // als er resultaten zijn...
$res = $stmt->fetchAll(); // resultaat ophalen en in $res zetten....
if (!is_null($res['id']) && is_numeric($res['id']) && !empty($res['id']) && (int)$res['id'] ): // als het ID van de gebruiker goed is....
try // probeer query uit te voeren....
{
// Check For Lijst 1....
$stmt_lijst1 = $db->prepare('select provincie from user where id = :user_id limit 1');
$stmt_lijst1->bindParam(':user_id', (int)$_SESSION['id'], PDO::PARAM_INT);
$stmt_lijst1->execute(); // uitvoeren...
}
catch(PDOException $e) // als er iets fout gaat...
{
$sMsg = '<p>
<hr>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Trace: '. $e->getTraceAsString() .'<br />
Foutmelding: '.nl2br($e->getMessage()).'
<hr>
</p>';
trigger_error($sMsg);
}
if ( stmt_lijst1->rowCount() ): // iets gevonden voor lijst 1....
try // probeer query uit te voeren...
{
// Check For Lijst 2....
$stmt_lijst2 = $db->prepare('select provincie from partner where id = :user_id limit 1');
$stmt_lijst2->bindParam(':user_id', (int)$_SESSION['id'], PDO::PARAM_INT); // user ID binden aan query..
$stmt_lijst2->execute(); // uitvoeren...
}
catch(PDOException $e) // als er wat fout gaat,,,
{
$sMsg = '<p>
<hr>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Foutmelding: '.$e->getMessage().'
<hr>
</p>';
trigger_error($sMsg);
}
if ( stmt_lijst2->rowCount() ): // iets gevonden voor lijst 2....
// Sessions aanmaken...
$_SESSION['id'] = (int)$res['id'];
$_SESSION['username'] = $_POST['username'];
$_SESSION['controle'] = FALSE;
// Doorsturen...
header('Location: profiel.php');
exit();
else: // Niks gevonden in lijst 1.....
$_SESSION['error_inlog'] = "Er is niks gevonden in Lijst 2";
header('Location: lijst2.php'); // Doorsturen...
exit();
endif;
else: // Niks gevonden in lijst 1.....
$_SESSION['error_inlog'] = "Er is niks gevonden in Lijst 1";
header('Location: lijst1.php'); // Doorsturen...
exit();
endif;
else: // Het ID van de gebruiker is niet geldig....
$_SESSION['error_inlog'] = "Er is geen geldig ID gevonden van de gebruiker!";
header('Location: index.html'); // Doorsturen...
exit();
endif;
else: // Niet gevonden in de database...
$_SESSION['error_inlog'] = "De combinatie van deze gebruikersnaam en wachtwoord bestaad niet!";
header('Location: index.html'); // Doorsturen...
exit();
endif;
// Een HEEEEEEEL klein beetje opruimen (heeeeeel klein beetje maar)....
unset($stmt_lijst2, stmt_lijst1, $res, $stmt);
endif;
endif;
?>
session_start();
// weg halen of uit zetten als het live gaat!
ini_set('display_errors', 1);
error_reporting(E_ALL);
// Gegevens voor verbinden met de database.....
$db = array(
'host' => 'localhost',
'dbname' => 'datingsite',
'user' => 'root',
'pass' => ''
);
try // probeer verbinding te maken met de database.....
{
$db = new PDO('mysql:host='.$db['host'].';dbname='.$db['dbname'], $db['user'], $db['pass']);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->query("SET SESSION sql_mode = 'ANSI,ONLY_FULL_GROUP_BY'");
}
catch(PDOException $e) // als er iets fout gaat....
{
$sMsg = '<p>
<hr>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Trace: '. $e->getTraceAsString() .'<br />
Foutmelding: '.nl2br($e->getMessage()).'
<hr>
</p>';
trigger_error($sMsg);
}
if( $_SERVER['REQUEST_METHOD'] == 'POST' ): // is er een post gedaan....
// kijken of er een wachtwoord is ingevuld en of deze langer of gelijk is aan minimaal 5 tekens
if ( empty($_POST['password']) || !is_string($_POST['password']) || is_null($_POST['password']) || !strlen($_POST['password']) >= 5 ):
// Leeg Wachtwoord...
$_SESSION['error_inlog'] = "Er is nog geen wachtwoord ingevuld!";
header('Location: index.html'); // doorsturen....
exit();
endif;
// kijken of er een gebruikersnaam is ingevuld en of deze langer of gelijk is aan minimaal 5 tekens
if ( empty($_POST['username']) || !is_string($_POST['username']) || is_null($_POST['username']) || !strlen($_POST['username']) >= 5 ):
// Lege Gebruikersnaam
$_SESSION['error_inlog'] = "Er is nog geen Gebruikersnaam ingevuld!";
header('Location: index.html'); // doorsturen....
exit();
endif;
// kijken of beide dingen zijn ingevuld en ook minimaal 5 tekens lang zijn...
if ( !empty($_POST['password']) && !is_null($_POST['password']) && is_string($_POST['username']) && strlen($_POST['password']) > = 5 && !empty($_POST['username']) && !is_null($_POST['username']) && strlen($_POST['username']) > = 5 ):
// Verrander de pepper met je eigen geheime tekst...
$pepper = 'GehE!m_W@chtw00rD';
// wachtwoord maken....
$sha512_pass = hash('sha512', $_POST['password'] . $pepper);
try // probeer query uit te voeren...
{
$stmt = $db->prepare('select id from user where username = :gebruikersnaam and password = :wachtwoord limit 1');
$stmt->bindParam(':gebruikersnaam', $_POST['username'], PDO::PARAM_STR); // gebruikersnaam binden aan query....
$stmt->bindParam(':wachtwoord', $sha512_pass, PDO::PARAM_STR); // wachtwoord binden aan query....
$stmt->execute(); // uitvoeren....
}
catch(PDOException $e) // als er iets fout gaat....
{
$sMsg = '<p>
<hr>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Trace: '. $e->getTraceAsString() .'<br />
Foutmelding: '.nl2br($e->getMessage()).'
<hr>
</p>';
trigger_error($sMsg);
}
if ( $stmt->rowCount() ): // als er resultaten zijn...
$res = $stmt->fetchAll(); // resultaat ophalen en in $res zetten....
if (!is_null($res['id']) && is_numeric($res['id']) && !empty($res['id']) && (int)$res['id'] ): // als het ID van de gebruiker goed is....
try // probeer query uit te voeren....
{
// Check For Lijst 1....
$stmt_lijst1 = $db->prepare('select provincie from user where id = :user_id limit 1');
$stmt_lijst1->bindParam(':user_id', (int)$_SESSION['id'], PDO::PARAM_INT);
$stmt_lijst1->execute(); // uitvoeren...
}
catch(PDOException $e) // als er iets fout gaat...
{
$sMsg = '<p>
<hr>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Trace: '. $e->getTraceAsString() .'<br />
Foutmelding: '.nl2br($e->getMessage()).'
<hr>
</p>';
trigger_error($sMsg);
}
if ( stmt_lijst1->rowCount() ): // iets gevonden voor lijst 1....
try // probeer query uit te voeren...
{
// Check For Lijst 2....
$stmt_lijst2 = $db->prepare('select provincie from partner where id = :user_id limit 1');
$stmt_lijst2->bindParam(':user_id', (int)$_SESSION['id'], PDO::PARAM_INT); // user ID binden aan query..
$stmt_lijst2->execute(); // uitvoeren...
}
catch(PDOException $e) // als er wat fout gaat,,,
{
$sMsg = '<p>
<hr>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Foutmelding: '.$e->getMessage().'
<hr>
</p>';
trigger_error($sMsg);
}
if ( stmt_lijst2->rowCount() ): // iets gevonden voor lijst 2....
// Sessions aanmaken...
$_SESSION['id'] = (int)$res['id'];
$_SESSION['username'] = $_POST['username'];
$_SESSION['controle'] = FALSE;
// Doorsturen...
header('Location: profiel.php');
exit();
else: // Niks gevonden in lijst 1.....
$_SESSION['error_inlog'] = "Er is niks gevonden in Lijst 2";
header('Location: lijst2.php'); // Doorsturen...
exit();
endif;
else: // Niks gevonden in lijst 1.....
$_SESSION['error_inlog'] = "Er is niks gevonden in Lijst 1";
header('Location: lijst1.php'); // Doorsturen...
exit();
endif;
else: // Het ID van de gebruiker is niet geldig....
$_SESSION['error_inlog'] = "Er is geen geldig ID gevonden van de gebruiker!";
header('Location: index.html'); // Doorsturen...
exit();
endif;
else: // Niet gevonden in de database...
$_SESSION['error_inlog'] = "De combinatie van deze gebruikersnaam en wachtwoord bestaad niet!";
header('Location: index.html'); // Doorsturen...
exit();
endif;
// Een HEEEEEEEL klein beetje opruimen (heeeeeel klein beetje maar)....
unset($stmt_lijst2, stmt_lijst1, $res, $stmt);
endif;
endif;
?>
ps. ik heb hem niet getest (het is heel simpel stukje) maar had er zin in :P ...
pss. is er nog een doel voor het opvragen van de data in de partner en gebruikers tabellen als je er toch niks mee doet ?
psss. dat is alsnog geen excuus om jullie maar dingen fout aan te leren (dan kan hij jullie net zo goed leren hoe een floppy of zip of B Drive werkt en eruit of de PIN aansluiting ziet als hij MySQL aanhoud!)
Greets.
Gewijzigd op 17/11/2012 15:24:29 door Marco PHPJunky
Ik heb het ook nog niet getest, maar ik moet nu met andere dingen bezig (ooit van het PWS gehoord? Zonee dat betekent Profiel WerkStuk). Ik ga volgende week wel even testen.
Het doel is uiteindelijk om een match te maken. Ik weet niet of we daar aan toe komen, maar dat is het doel.
hij leert ons uberhaupt niks. Hij zegt "jullie gaan een site maken, en jullie kijken maar op (site waar we de info vandaanhalen, is het boek maar dan online) hoe het moet." En als er wat is, dan moeten we het zelf uitzoeken, het enige wat hij wel doet is controleren hoever we zijn.
Toevoeging op 17/11/2012 21:55:43:
Laat maar jongens, ik gebruik wel de username die is ingevuld bj het inloggen.
geeft nog steeds
"Array"