Loginscript werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 4 5 volgende »

Matthijs Vos

Matthijs Vos

07/02/2012 21:09:37
Quote Anchor link
Hallo,
Ik ben bezig met een PHP/SQL login script. Nu heb ik mijn script die checkt of wachtwoord en login naam in de database staan. maar als ik het goede wachtwoord en loginnaam invoer krijg ik toch de error. Wie kan me helpen?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
 require("config.php");

if(!$_GET['act']){
  echo("<form method='POST' action='$PHP_SELF?act=login'>
 Username: <input type='text' name='username' /><br />
 Password: <input type='password' name='password' /><br />
 <input type='submit' value='Login!' />
 </form"
);
}
if($_GET['act'] == "login"){
 
$username = ($_POST['username']);
$password = ($_POST['password']);

$check =     'SELECT * FROM project2_members WHERE username = "$username" AND password = "$password" ';
$res = mysql_query($check);
if(mysql_num_rows($res) == 1){
//The user had the correct login details
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['username'] = $_POST['username'];
}
if(mysql_num_rows($res) <= 0){
echo("The username/password was not found. $username $password");
}}

?>
Gewijzigd op 07/02/2012 21:10:32 door Matthijs Vos
 
PHP hulp

PHP hulp

27/01/2021 04:11:26
 
Jeroen VD

Jeroen VD

07/02/2012 21:18:54
Quote Anchor link
Een paar dingen:

- niet controleren met !$_GET, maar met isset($_GET)
- geen foutafhandeling
- geen variabelen kopieren op regel 12 en 13
- niet selecteren met *
- sql injectie gevoelig
 
Reshad F

Reshad F

07/02/2012 21:20:42
Quote Anchor link
als je nou doet


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

if (mysql_num_rows($res) == 0 ) {

echo "the username/password not found";

}


else {

/rest van code

}

?>


dus als je NIKS vind krijg je error, en anders ga je verder.. nu chek je het dubbelop en daar gaat ergens fout ( volgens mij )

nu doe je de hele tijd een IF zonder foutafhandeling dus je weet ook niet waarom het komt je doet gewoon alless zonder antwoord te krijgen,
 
Jeroen VD

Jeroen VD

07/02/2012 21:22:00
Quote Anchor link
- niet action=$PHP_SELF , maar geef de url op
- maak van de if op regel 22 een else
 
Matthijs Vos

Matthijs Vos

07/02/2012 21:23:16
Quote Anchor link
Heey Jeroen,

Bedankt voor je reactie. Heb de isset aangepast: if (isset($_GET['act'])) {
Wat bedoel je met geen foutafhandeling en geen variabele kopieren??
Waar moet ik dan mee selecteren? username, password??
Wat betreft sql injectie dat klopt, maar wil hem eerst draaiend hebben en dan die beveiliging er op.

Matthijs
 
Jeroen VD

Jeroen VD

07/02/2012 21:25:22
Quote Anchor link
Nog iets, in je form zeg je method = post. Maar toch roep je alles aan met get, hoe kan dit?

Toevoeging op 07/02/2012 21:29:03:

Op regel 12 en 13 'kopieer' je de get in een andere variabelen. Zet deze gewoon direct waar je ze hebben wilt, ipv kopieren. O

Zoek hier in de tutorials eens naar hoe je sql bouwt, en hoe je dat afhandelt.

O ja, variabelen buiten qoutes
 
Matthijs Vos

Matthijs Vos

07/02/2012 21:30:27
Quote Anchor link
@jeroen
de get gebruik ik voor de login.php?act=login e.d. de post is voor ($_POST['username']); of klopt dat zo niet??

Verder heb ik het script nu aangepast maar als ik het nu uitvoer krijg ik na te zijn ingelogd een witte pagina:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
 require("config.php");

if (!isset($_GET['act'])) {
  echo("<form method='POST' action='$PHP_SELF?act=login'>
 Username: <input type='text' name='username' /><br />
 Password: <input type='password' name='password' /><br />
 <input type='submit' value='Login!' />
 </form"
);
}
if (isset($_GET['?act=login'])){
 
$username = ($_POST['username']);
$password = ($_POST['password']);

$check =     'SELECT * FROM project2_members WHERE username = "$username" AND password = "$password" ';
$res = mysql_query($check);
$count = mysql_num_rows($res);
if($count==0){
echo("The username/password was not found. $username $password");
}
else{
//The user had the correct login details
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['username'] = $_POST['username'];
}}

?>
 
Reshad F

Reshad F

07/02/2012 21:30:48
Quote Anchor link
jeroen bedoelt

als jij een taart naar iemands gezicht gooit , krijg je geen reactie of je het goed hebt gedaan of niet goed hebt gedaan. ( oftewel een fouthandeling )

dat doe je doormiddel van een IF / ELSE

dus IF (ik gooi een taart op zijn gezicht ){
echo "de man rent achter me aan";
}

else {

echo "de man blijft stilstaan";
}
 
Matthijs Vos

Matthijs Vos

07/02/2012 21:33:45
Quote Anchor link
@reshadd

Oke, klopt inderdaad, heb ik nu opgelost

@jeroen

Als ik doe:
'SELECT * FROM project2_members WHERE username = "('$_POST['username']')" AND password = "('$_POST['password']')" ';
Krijg ik een error, komt ik doe denk ik iets verkeerd met de quoute's maar weet niet wat.
 
Jeroen VD

Jeroen VD

07/02/2012 21:47:28
Quote Anchor link
Eerst, je krijgt een wite pagina omdat regel 10 niet klopt. Dit moet zijn $_GET['act'] == login

Ten tweede, haal altijd variabelen buiten quotes:
"SELECT * FROM project2_members WHERE username = '" . $_POST['username'] . "' AND password = '" . $_POST['password'] . "'"

Toevoeging op 07/02/2012 21:48:49:

Verder is het natuurlijk slecht om wachtwoorden plain-text op te slaan, maar dat terzijde
 
Matthijs Vos

Matthijs Vos

07/02/2012 21:51:46
Quote Anchor link
Heey Jongens,

Allemaal hartstikke bedankt, login doet het.
Wat betreft plain-text dat was puur omdat hij het niet deed dat ik de md5 had weggehaald.
Nog een 2e vraag wat kan ik nog doen om sql-injection tegen te gaan??
 
Jeroen VD

Jeroen VD

07/02/2012 21:54:44
Quote Anchor link
Alle gegevens die van de gebruiker komen mysql_real_escape_string() omheen zetten. Nogmaals, ik verwijs je naar de tutorials over sql en foutafhandeling hier op phphulp
 
Roel -

Roel -

07/02/2012 21:56:26
Quote Anchor link
Misschien iets voor jou: Beginnersfouten tegengaan
 
Matthijs Vos

Matthijs Vos

07/02/2012 21:56:29
Quote Anchor link
@jeroen

Oke, ga ik zeker even gebruiken, hartstikke bedankt voor alle hulp. Mag dit topic nog even open blijfen voor evt. vragen?
 
Roel -

Roel -

07/02/2012 21:57:52
Quote Anchor link
Maak je daarover geen zorgen; topics worden nooit gesloten tenzij daar een goede reden voor is.
 
Matthijs Vos

Matthijs Vos

07/02/2012 21:58:51
Quote Anchor link
@roel

Oke, je ziet op veel forums dat ze worden gesloten als alles is opgelost. Ga zeker het script van beginnersfouten doornemen. Bedankt
 
Reshad F

Reshad F

07/02/2012 21:59:07
Quote Anchor link
als je md5 gebruikt bij het registreren dan moet je dit ook weer decoden als je inlogt in je mysql

dat doe je als volgt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

"SELECT * FROM project2_members WHERE username = '" . $_POST['username'] . "' AND password='".md5($_POST['password'])."'


?>
 
Wouter J

Wouter J

07/02/2012 22:02:47
Quote Anchor link
@reshadd, ga aub eerst zelf leren voordat je antwoorden wilt geven! Want ook dit script is hackgevoelig door geen gebruik mysql_real_escape_string.
En een wachtwoord met alleen md5 is allang niet veilig meer. Gebruik een Salt + Pepper (liefst dynamisch) en een van de sha* decrypt functies.
 
Roel -

Roel -

07/02/2012 22:03:01
Quote Anchor link
Zeg het dan wel goed reshadd. MD5 is niet te decoderen.
Je moet wanneer je inlogt het ingevoerde wachtwoord encoden en DIE vergelijken met een record uit de database.

Overigens is MD5 niet aan te raden voor wachtwoord hashes.
 
Jeroen VD

Jeroen VD

07/02/2012 22:10:43
Quote Anchor link
Overigens, wat is de beste manier om te cobtroleren of een form verzonden is?
 
Reshad F

Reshad F

07/02/2012 22:13:54
Quote Anchor link
ehm Wouter J als je even alles zou lezen zou je niet gelijk een dom antwoord geven,

matthijs raad hem aan om zijn wachtwoorden te beveiligen, hij zegt dat hij de MD5 weg had gehaald omdat het niet werkte met inloggen, dus ik legde hem uit hoe dat kan, het ging om de MD5! dus ik snap niet waarom jij over de mysql_real_escape_string komt terwijl we het over de MD5 hebben?

en dat je md5 beter niet kan gebruiken dat snap ik ook wel maar het ging hier even om waarom zijn md5 het NIET deed en hoe het wel ZOU KUNNEN werken

@roel encoden thats what i ment maar ik gaf er een voorbeeld bij toch ;) dus als ik ipv encoden per ongeluk decoden zeg dan gaat de wereld er niet ten onder van kan iedereen overkomen als je van 7 uur tot nu aan het werk bent -_- maar ik zal er voortaan op letten
 

Pagina: 1 2 3 4 5 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.