Inlogscript
Ik ben voor het vak Informatica een site aan het bouwen, een datingsite om precies te zijn.
Gaat erom: we moeten een site bouwen, een database met phpMyAdmin maken, en een link tussen die twee leggen.
Het registratiescript heb ik werkend gekregen.
Het inlogscript werkt echter niet.
Ik heb al elders op internet gezocht, en een script gevonden wat op zichzelf wel werkt, maar als ik die van mij aanpas naar dat voorbeeld blijf ik errors krijgen. Ik heb het steeds hier en daar verbeterd, met als enige resultaat dat de error die ik krijg, verandert.
Wil iemand mij helpen dit script te verbeteren?
Als ik heb uitgevonden hoe ik hier een script neerzet, zal die er meteen komen!
Alvast bedankt!
Het 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
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());
$usernameinput = $_POST['username'];
$passwordinput = $_POST['password'];
$count = "0";
$usernamecheck = "SELECT username FROM user WHERE username = $usernameinput";
$passwordcheck = "SELECT password FROM user WHERE password = $passwordinput";
$sql = "SELECT * FROM test_script WHERE $usernameinput==voornaam AND $passwordinput==jaar";
$count = (mysql_num_rows(mysql_query($sql)));
if ($count == "1")
{ echo "Correct!";
//<html>
//<a href="profiel.php"
//Profiel </a>
//</html>
}
else { echo "Klopt niet!"; }
?>
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());
$usernameinput = $_POST['username'];
$passwordinput = $_POST['password'];
$count = "0";
$usernamecheck = "SELECT username FROM user WHERE username = $usernameinput";
$passwordcheck = "SELECT password FROM user WHERE password = $passwordinput";
$sql = "SELECT * FROM test_script WHERE $usernameinput==voornaam AND $passwordinput==jaar";
$count = (mysql_num_rows(mysql_query($sql)));
if ($count == "1")
{ echo "Correct!";
//<html>
//<a href="profiel.php"
//Profiel </a>
//</html>
}
else { echo "Klopt niet!"; }
?>
Bij dit script op het laatst moet deze doorsturen naar de pagina profiel van de persoon die ingelogd is. Ik denk erover om dat te doen met in de titel dit:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
IF (empty($_POST[username]))
{header("location: home.html"); }
?>
<html>
<head>
<title>Profiel van <?php!!) print"$_POST[username]"; ?></title>
<body>
<?php
print"Hallo, $_POST[username]!<br />";
print"Dit is jouw profiel! Er is nog niet zoveel te doen.<br />";
print"Misschien kun je beter een andere keer terugkomen!";
print"<hr>";
print"Klik hieronder om uit te loggen, en terug naar de hoofdpagina te gaan:<br />";
?>
<form action="home.html" method="post">
<input type="submit" value="Log uit!">
</form>
</body>
</html>
IF (empty($_POST[username]))
{header("location: home.html"); }
?>
<html>
<head>
<title>Profiel van <?php!!) print"$_POST[username]"; ?></title>
<body>
<?php
print"Hallo, $_POST[username]!<br />";
print"Dit is jouw profiel! Er is nog niet zoveel te doen.<br />";
print"Misschien kun je beter een andere keer terugkomen!";
print"<hr>";
print"Klik hieronder om uit te loggen, en terug naar de hoofdpagina te gaan:<br />";
?>
<form action="home.html" method="post">
<input type="submit" value="Log uit!">
</form>
</body>
</html>
De error (zegmaar alles wat op het scherm komt, de "klopt niet" is handmatig in het script gezet) :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in G:\xampp\htdocs\Dating\WIP\inlog.php on line 13
Klopt niet!
Gewijzigd op 13/11/2012 18:52:27 door Kevin Zegikniet
de codes voor php kan je gewoon tussen php tags hier neerzetten. overige code tussen code tags
<?php hier je code ?>
[.code] hier je code [./code] ( de puntjes moet je eruit laten na de bracket )
Gewijzigd op 13/11/2012 18:28:20 door Reshad F
dat heb ik ook gedaan, maar die werkte niet, dus ben ik gaan zoeken naar een -wel werkend- exemplaar wat als voorbeeld kon dienen.
Het tweede script is trouwens een beetje niet helemaal mooi, ik neem dus aan dat hier geen HTML scripts kunnen worden weergeven zoals PHP scripts op deze site.
EDIT:
tweede script is trouwens alleen voor de mooigheid, het is zodat mensen die op mijn site komen, het gevoel hebben dat ze echt zijn ingelogd. Daarna kunnen ze (voor hun gevoel) weer uitloggen en worden ze naar de homepage gestuurd, in plaats van dat ze gewoon alleen naar de homepage gestuurd worden (wat er dus eigenlijk gebeurt).
Tweede script is er alleen voor dat niet iedereen een error krijgt en denkt dat de computer gehackt is (meeste vrienden van mij zijn zegmaar holbewoners als het op programmeren aankomt).
Gewijzigd op 13/11/2012 18:35:03 door Kevin Zegikniet
Aangezien je net bent begonnen met PHP wil je ik aanraden om de volgende tutorial door te lezen en je script minimaal hier al op aan te passen.
beginners fouten tegengaan Verder wil ik je adviseren om je logica ( php ) en je html gescheiden te houden vooral omdat je gaat werken met headers. dan voorkom je al veel beginners fouten.
kwa code moet je even de tutorial die ik net gaf toepassen op je script en je beginpost dan erop aanpassen dan kunnen we daarna verder kijken wat je fout doet :)
zet bovenaan je php pagina trouwens het volgende om fouten te kunnen zien:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
/*
* Error reportin 1 is aan 0 is uit
*/
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
?>
/*
* Error reportin 1 is aan 0 is uit
*/
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
?>
Ik heb het even met [.code] gedaan, werkt nu zo te zien wel.
Ik zal even op de link klikken, heb jou toevoeging al verwerkt in het script.
Niet dat dat wat uitmaakt maar toch.
Niet nutteloos copiëren: $usernameinput = $_POST['username'];
Een getal niet tussen quotes: $count = "0";
Regel 9 en 10: Kan in één regel. $vars buiten de quotes halen. De enkele SQL-quotes missen. De query is onbeveiligd, dus lek. Query wordt nergens uitgevoerd en is dus overbodig.
Regel 12: $vars buiten de quotes halen. De enkele SQL-quotes missen. De query is onbeveiligd, dus lek. De WHERE is fout, het is WHERE veldnaam = '....'.
Regel 13: Niet nestelen van commando's. Foutafhandeling ontbreekt.
Een getal niet tussen quotes: if ($count == "1")
Dit omdat het 'maar' een schoolopdracht is, en ik ben niet van plan het in de toekomst
nog te gaan gebruiken.
Een voorbeeld hiervan is de <i>or die</i> dinges, die uit den boze is. Ik gebruik deze gewoon, en als het script dan straks klaar is, hoeft 'ie niet meer te sterven.
Even plat gezegd, maar zo denk ik erover.
Kevin Zegikniet op 13/11/2012 19:08:11:
... de meeste dingen interesseren mij niet echt.
Dit omdat het 'maar' een schoolopdracht is ...
Dit omdat het 'maar' een schoolopdracht is ...
Goede instelling.
....
Uit een schoolopdracht moet je leren neem ik aan toch? Hoe weet je nou of je het later niet meer nodig hebt. als een Informatica student hoor je dingen goed te willen scripten ook al is het 'maar' een school opdracht. ik studeer zelf ook informatica maar zelfs de dingen die me niet interesseren daar doe ik mijn best voor. You will never know when you need it again. En anders zou ik gewoon naar je module leider stappen en zeggen dat je weigert de opdracht te maken omdat je het later toch niet gaat gebruiken misschien krijg je dan een opdracht die je later wil gaan doen :)
Ik heb het kopieren verwijderd en in de query's "$_POST['username']" gezet ipv "$usernameinput".
hetzelfde met password.
Hoe wil je het in een regel doen?
Moet ik dan ipv " deze ' gebruiken?
SQL is engels he? Moet ik letterlijk "veldnaam= etc" neerzetten?
Wat is nestelen van commando's? Foutenafhandeling is met (or die)?
Getal niet tussen quotes heb ik weggehaald.
Nieuwe script:
ZIE ONDERAAN!!
@-SanThe- & Reshad F
Goedgoed ik zal erop letten.
Maar het gebruik van "or die" vind ik erg handig, omdat het gewoon meteen de error op het scherm zet.
Het interesseren bedoelde ik van: dat is niet van toepassing op mij, omdat het er toch al (voor mij) goed instaat.
Tuurlijk intereseert informatica mij wel!
Over de leraar: voor hem is het vak heilig. Als je aan zijn vak komt, kom je aan hem. En dan is het goed mis!
Een nieuwe opdracht vragen is dus uit den boze...
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in G:\xampp\htdocs\Dating\WIP\inlog.php on line 11
Dit is de error als ik ipv $usernameinput de $_POST['username'] gebruik (en ook bij password).
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
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
<?php
/* Error reporting 1 is aan 0 is uit */
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
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());
$count = 0;
$usernamecheck = "SELECT username FROM user WHERE username = $_POST['username']";
$passwordcheck = "SELECT password FROM user WHERE password = $_POST['password']";
$sql = "SELECT * FROM test_script WHERE $usernameinput==voornaam AND $passwordinput==jaar";
$count = (mysql_num_rows(mysql_query($sql)));
if ($count == 1)
{ echo "Correct!";
//<html>
//<a href="profiel.php"
//Profiel </a>
//</html>
}
else { echo "Klopt niet!"; }
?>
/* Error reporting 1 is aan 0 is uit */
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
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());
$count = 0;
$usernamecheck = "SELECT username FROM user WHERE username = $_POST['username']";
$passwordcheck = "SELECT password FROM user WHERE password = $_POST['password']";
$sql = "SELECT * FROM test_script WHERE $usernameinput==voornaam AND $passwordinput==jaar";
$count = (mysql_num_rows(mysql_query($sql)));
if ($count == 1)
{ echo "Correct!";
//<html>
//<a href="profiel.php"
//Profiel </a>
//</html>
}
else { echo "Klopt niet!"; }
?>
Gewijzigd op 13/11/2012 19:25:26 door Kevin Zegikniet
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
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
<?php
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 = "SELECT id
FROM test_script
WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'
AND password = '" . mysql_real_escape_string($_POST['password']) . "'
";
$result = mysql_query($sql);
if($result === false)
{
// error
}
else
{
if(mysql_num_rows($result) == 1)
{
echo "Correct!";
}
else
{
echo "Klopt niet!";
}
}
?>
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 = "SELECT id
FROM test_script
WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'
AND password = '" . mysql_real_escape_string($_POST['password']) . "'
";
$result = mysql_query($sql);
if($result === false)
{
// error
}
else
{
if(mysql_num_rows($result) == 1)
{
echo "Correct!";
}
else
{
echo "Klopt niet!";
}
}
?>
Ik mag overigens wel aannemen dat een wachtwoord in md5(), of beter zelfs, in SHA1() wordt opgeslagen?
FF geprobeerd, maar op het scherm komt nu helemaal niks (zelfs geen correct of klopt niet of een error).
Nog een vraagje: waarom 'id' ipv '*' bij de query?
Wat betekent '==='
EDIT: @- Aar -
Ja natuurlijk!! hehe...
EDIT: Ik heb dat nieuwe script eens aan mijn beproevingen (MWAHAHA) onderworpen, het doet echt helemaal niks.
Als ik een wachtwoord verkeerd intik, geen wachtwoord, alleen een wachtwoord, of helemaal niks:
Het scherm blijft wit.
Gewijzigd op 13/11/2012 19:37:39 door Kevin Zegikniet
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
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
<?php
$server = "localhost";
$gebruiker = "root";
$wachtwoord = "";
$db = "datingsite";
$connectie = mysql_connect($server,$gebruiker,$wachtwoord);
if(!$connectie) {
echo 'kon server niet bereiken';
}
else {
$dbc = mysql_select_db($db,$connectie);
if(!$dbc) {
echo 'kon database niet bereiken';
}
else {
$query = "SELECT
username, password
FROM
user
WHERE
username = '" . $_POST['username'] . "'
AND
password = '" . $_POST['password'] . "'
";
$run = mysql_query($query);
if(!$run) {
echo 'kon query niet uitvoeren';
}
else {
if(mysql_num_rows($run) == 1) {
// voer je code uit wanneer correct
}
else {
// voer andere code uit
}
}
}
}
}
?>
$server = "localhost";
$gebruiker = "root";
$wachtwoord = "";
$db = "datingsite";
$connectie = mysql_connect($server,$gebruiker,$wachtwoord);
if(!$connectie) {
echo 'kon server niet bereiken';
}
else {
$dbc = mysql_select_db($db,$connectie);
if(!$dbc) {
echo 'kon database niet bereiken';
}
else {
$query = "SELECT
username, password
FROM
user
WHERE
username = '" . $_POST['username'] . "'
AND
password = '" . $_POST['password'] . "'
";
$run = mysql_query($query);
if(!$run) {
echo 'kon query niet uitvoeren';
}
else {
if(mysql_num_rows($run) == 1) {
// voer je code uit wanneer correct
}
else {
// voer andere code uit
}
}
}
}
}
?>
het is geen werkende code ( niet getest ) maar zo iets moet het uiteindelijk worden ( let wel dit is nog steeds niet helemaal goed maar beter dan wat je nu hebt )
ik zou het in ieder geval als basis nemen en verder uitwerken.
Gewijzigd op 13/11/2012 19:42:09 door Reshad F
Kevin Zegikniet op 13/11/2012 19:30:16:
.. op het scherm komt nu helemaal niks ..
Maak van regel 13 // error even: echo 'Error: ' . mysql_error();
Nog een vraagje: waarom 'id' ipv '*' bij de query?
Waarom zou je alles ophalen? Alleen het id is meestal genoeg.
Wat betekent '==='
Is gelijk en is tevens dezelfde soort (in dit geval een boolean true of false).
Maak van regel 13 // error even: echo 'Error: ' . mysql_error();
Nog een vraagje: waarom 'id' ipv '*' bij de query?
Waarom zou je alles ophalen? Alleen het id is meestal genoeg.
Wat betekent '==='
Is gelijk en is tevens dezelfde soort (in dit geval een boolean true of false).
Toevoeging op 13/11/2012 19:44:34:
Reshad F op 13/11/2012 19:39:18:
Iets beter opgeknapt dan santhe..
Maar wel weer lek.
Gewijzigd op 13/11/2012 19:43:08 door - SanThe -
Ehh ik wil niet zeuren, maar dit gaat totaal tegen die link in (onnodig geheugen verbruiken door allerlei variabelen te gebruiken)
@- SanThe -
Uitkomst: (dacht ik ook al)
(Error: ) (handmatig toegevoegd)
Unknown column 'id' in 'field list'
Gewijzigd op 13/11/2012 19:47:54 door Kevin Zegikniet
Kevin Zegikniet op 13/11/2012 19:47:07:
Unknown column 'id' in 'field list'
Dat was een gok.
Even iets anders van maken dus, iets wat wél bestaat.
je had een } teveel, daarna komt er helemaal niks op het scherm.
@ - SanThe -
zegmaar alleen de username? >> werkt, vraag me alleen af wat je eraan hebt (zie twee zinnen verder)
Dan stuurt ie die door naar de volgende pagina (het profiel)
Bedenk ik me net dat dat ook kan met sessions. Hoe moet dat?
Gewijzigd op 13/11/2012 20:25:56 door Kevin Zegikniet
@Kevin ik heb duidelijk 2x vermeld dat het een voorbeeld script was dus geen werkend script maar zo zie je tenminste verschil tussen jou belabberde versie en mijn versie. en voor de onnodige variabelen was even ter verduidelijking.