Gegevens weergeven van ingelogde gebruiker

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Simon Brink

Simon Brink

03/04/2014 11:33:21
Quote Anchor link
Situatie
Ik ben op dit moment bezig met het maken van een registratie / login systeem. Dit werkt allemaal, de gebruikers kunnen zowel registeren als inloggen tevens onthoud de database de gebruiker die een account aanmaakt.

Echter zo het mooi zijn dat wanneer de gebruiker wil inloggen leek het mij leuk om zijn gegevens te weergeven. Nou heb ik het een en andere gevonden en het werkt ook maar toch weergeeft hij die gegevens niet.

Mijn vraag is wat gaat er mis en eventueel tips? Ik ben nog beginnend:)

Quote:
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
<?    

include('../config.php');
    $userdata = $_SESSION['name'];
    $query = "SELECT id, email, name, password FROM accounts WHERE name = '$userdata'";
    $result = mysql_query($query) or die (mysql_error());
    $record = mysql_fetch_array($result);

    $id = $record['id'];
    $name = $record['name'];
    
     echo "<b><br />Hello ".$name.", welcome to Web!<br /></b>";
     echo "<br /><br ><a href=../login/logout.php><input type=button value= Logout></a>";


    echo  " ".$id." Hello ".$name." ";


 
?>


Groet,

Simon
Gewijzigd op 03/04/2014 11:38:49 door Simon Brink
 
PHP hulp

PHP hulp

18/04/2024 14:18:53
 
Michael -

Michael -

03/04/2014 11:44:59
Quote Anchor link
Als beginner is het goed om gelijk de goede manier van programmeren te leren.
Je gebruikt een verouderde functie mysql_* die op termijn komt te vervallen.
Gebruik in deze plaats mysqli of PDO.

Je code is gevoelig voor SQL injection (Genoeg over te vinden) omdat je nu kwaadaardige code met je SESSION['name'] kan meesturen. Hiervoor heb je functies als mysql(i)_real_escape_string

Gebruik geen die() maar een foutafhandeling die jou zegt wat er fout is gegaan.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
session_start();
include('../config.php');

    $query = "
    SELECT
        id,
        email,
        name,
        password
    FROM
        accounts
    WHERE
        name = '"
. mysql_real_escape_string($_SESSION['name']) . "'
    "
;
    
$result = mysql_query($query);

if($result) {
    
    if(mysql_num_rows($result) > 0) {
    
    $record = mysql_fetch_assoc($result);
    
    echo '<b><br />Hello ' . $record['name'] . ', welcome to Web!<br /></b>';
    echo '<br /><br ><a href="../login/logout.php"><input type="button" value="Logout"></a>';


    echo  $record['id'] . " Hello " . $record['name'];
    
    }
else {
        echo 'Er is niemand gevonden met de naam ' . htmlentities($_SESSION['name']);
    }
    
}
else {
    echo 'Er is een fout opgetreden';
    echo '<br />' . mysql_error();
}

?>
 
Simon Brink

Simon Brink

03/04/2014 11:57:32
Quote Anchor link
Bedankt voor de snelle reactie, ik wist niet dat ik verouderde code gebruikte. Ik zal me komende tijd eens gaan verdiepen in msqli en SQL injection.

Hij weergeeft de echo 'Er is niemand gevonden met de naam name'. Betekent dit dat hij de kolom name niet herkent?

Groet,

Simon
 
Michael -

Michael -

03/04/2014 12:10:36
Quote Anchor link
Dat betekent dat de naam 'name' niet voorkomt in de database. Moet dit geen andere naam zijn? Waar wordt de naam in de session geplaatst?

Als je de volgende regel op regel 4 van bovenstaand script zet, wat krijg je dan terug?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump($_SESSION);
?>
Gewijzigd op 03/04/2014 12:11:24 door Michael -
 
Simon Brink

Simon Brink

03/04/2014 12:58:56
Quote Anchor link
De kolom 'name' komt voor in tabel 'accounts'. Begrijp je tweede vraag niet helemaal maar wat ik denk dat je bedoelt is
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if($count==1){
$_SESSION['name']="name";
$_SESSION['password']="password";
$_SESSION['id'] = $row['id'];
include ('../panel/index.php');
}
?>


Dit is een deel van de login script wat uitgevoerd wordt wanneer een gebruiker succesvol is ingelogd. Hij include de pagina waar de persoonlijke gegevens worden weergeven althans dat is de bedoeling:).

Ik heb de code op regel 4 toegevoegd en kreeg het volgende resultaat:
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
array(3) { ["name"]=> string(4) "name" ["password"]=> string(8) "password" ["id"]=> NULL }
?>


Groet,

Simon

Toevoeging op 03/04/2014 13:10:43:

Dit is de check die me website uitvoert wanneer een gebruiker probeert in te loggen.
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
27
28
29
30
31
32
<?php
include('../config.php');
// Define $name and $mypassword
$name = $_POST['name'];
$mypassword = $_POST['password'];

// To protect MySQL injection (more detail about MySQL injection)
$name = stripslashes($name);
$mypassword = stripslashes($mypassword);
$name = mysql_real_escape_string($name);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE name='$name' and password='$mypassword'";
$result = mysql_query($sql) or die(mysql_error());

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $name and $mypassword, table row must be 1 row
if($count==1){

// Register $name, $mypassword and redirect to file "login_success.php"
$_SESSION['name']="name";
$_SESSION['password']="password";
$_SESSION['id'] = $row['id'];
include ('../panel/index.php');
}

else {
    echo "The username or password is incorrect.";
    echo "<br><br><input Type=button value=Return onClick=history.go(-1);return true;>";
}


?>


Groet,

Simon
Gewijzigd op 03/04/2014 13:05:03 door Simon Brink
 
Michael -

Michael -

03/04/2014 13:19:02
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$_SESSION
['name']="name";
$_SESSION['password']="password";
$_SESSION['id'] = $row['id'];
?>


Hier zet je dus de tekst "name" in $_SESSION['name'] en de tekst "password" in $_SESSION['password']
Als je hier het gebruikersnaam van de ingelogde user wilt hebben is het denk ik voldoende om het zo aan te passen
$_SESSION['name'] = $name;

Sla nooit een wachtwoord op in een session! Zo maak je het wel heel makkelijk voor onbevoegden.
 
Simon Brink

Simon Brink

03/04/2014 13:22:24
Quote Anchor link
Geweldig het werkt! Bedankt voor alle uitleg Michael!

Groet,

Simon
 
Niek Kasius

Niek Kasius

06/04/2014 07:10:11
Quote Anchor link
Quote:
Dit werkt allemaal, de gebruikers kunnen zowel registeren als inloggen tevens onthoud de database de gebruiker die een account aanmaakt.

Bedoel je daarmee dat men zich kan registreren en daarna direct kan inloggen, zonder enige form van acceptatie van de beheerder of webmaster?
Is dat wel veilig zo? Want dan kan iedereen erin goedschiks dan wel kwaadschiks
 



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.