Daten aus sql auslesen(session)

07/22/2014 08:48 Döner-Chicken Grill#1
Moin Leute,
Ich bin derzeit an einem einfachen Login-System aber stoße gerade auf ein Problem.
Meine nicht zu sehende oder auch "Geheime" seite soll verschiedene Daten ausgeben die der User beim Registrieren eingegeben hat z.B. email, geburtstag etc.
Jetzt habe ich beim Login
PHP Code:
 <?php
session_start
();
?>

<?php
$verbindung 
mysql_connect("localhost""root" "")
or die(
"Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("homepage") or die ("Datenbank konnte nicht ausgewählt werden");

$username $_POST["username"];
$passwort md5($_POST["password"]);

$abfrage "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";
$ergebnis mysql_query($abfrage);
$row mysql_fetch_object($ergebnis);

if(
$row->passwort == $passwort)
    {
    
$_SESSION["username"] = $username;
    echo 
"Login erfolgreich. <br> <a href=\"geheim.php\">Geschützter Bereich</a><br/>";
    echo 
"<a href = 'index.php'>Startseite</a>";
    }
else
    {
    echo 
"Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>";
    }

?>
alles abgefragt usw. aber wie kann ich jetzt von diesem User dann noch die restlichen Auslesen? oder würdet ihr das in einer externen php machen?

MfG
07/22/2014 08:52 OfficialiSEVEN#2
Moin .Ventus,

du kannst bereits das PW in der SQL mit Abfragen, spart dir wieder Rechenleistung ;)

Allgemein macht man es so bei der prozeduralen Programmierung, dass man für jede Seite eine eigene PHP-Datei nimmt. Demnach solltest du für die geheime Seite eine neue Datei nehmen.

Gruß,
FrickX
07/22/2014 08:55 Döner-Chicken Grill#3
leuchtet mir ein, aber wie sollte jetzt die php aussehen das dies ausgelesen wird direkt von dem user der eingeloggt ist?
07/22/2014 08:58 OfficialiSEVEN#4
Genauso wie immer.

Ganz am Anfang nen session_start und dann mit der Session-Variable die Daten aus der DB auslesen.
07/22/2014 10:40 Baaam01#5
Paar kleine Empfehlungen: Nutze eine ausgelagerte Datei für die DB Connection, die du einfach includest, macht das ganze hübscher.

PHP Code:
WHERE username LIKE '$username' LIMIT 1
1. LIKE sucht, wie das Wort sagt Namen, die so wie die Eingabe sind. Ich bin mir jetzt nicht hundert prozentig sicher, wie sich das verhält, wenn dein Name z.B. Wurst ist und es in der DB einen 2. User TheWurst1987 gibt. Was du hier eher verwenden solltest ist = (ist gleich)
=> Dann kannst du dir auch das LIMIT sparen, wenn du bei der Registrierung auf bereits eingetragene User checkst

2. bzgl. SQL-Injection Vorbeugung solltest du auf jedenfall bei den POST Parametern ein
PHP Code:
mysql_real_escape_string() 
mit rein nehmen und Variablen im Query nicht nur mit ' (Singlequote) sondern '".$username."' (Single, Double, Punkt) schreiben.

3. Wers ganz sauber will gibt alle Tabellennamen in ` an (accent grave) - ist aber nicht unbedingt erforderlich

War zwar nicht dein eigentliches Problem, aber vielleicht beherzigst du einige von den Tipps :)
07/22/2014 12:38 Döner-Chicken Grill#6
Jo, danke dir. Werde auf jeden fall bald in angriff nehmen einige von deinen Tipps.
Will aber erstmal mein anderes Problem in den griff bekommen. ;)
07/22/2014 19:07 PixelTree#7
Quote:
Originally Posted by Baaam01 View Post
2. bzgl. SQL-Injection Vorbeugung solltest du auf jedenfall bei den POST Parametern ein
PHP Code:
mysql_real_escape_string() 
mit rein nehmen und Variablen im Query nicht nur mit ' (Singlequote) sondern '".$username."' (Single, Double, Punkt) schreiben.
man sollte mysqli_real_escape_string() benutzen da mysql_real_escape_string() deprecated ist.
07/26/2014 03:58 マルセル#8
Das selbe gilt für alle anderen mysql_* Funktionen, da sie mit dem nächsten Major PHP Update sowieso entfernt werden.
07/26/2014 11:49 CNBR#9
Ich habe mal etwas deinen Code überarbeitet. Sollte alles klappen.

PHP Code:
<?php 
session_start
(); 

if(isset(
$_POST['username'], $_POST['password']))
{
    
$verbindung = new mysqli("localhost""root""password""datenbank");

    if (
mysqli_connect_errno()) {
        echo(
"Verbindung zu Datenbank fehlgeschlagen (" mysqli_connect_error() . ")");
        exit();
    }

    
$username $mysqli->real_escape_string($_POST["username"]); 
    
$passwort md5($_POST["password"]); 

    
$abfrage "SELECT * FROM `users` WHERE `username` = '" $username "' AND `password` = '" $passwort "'"
    
$ergebnis $verbindung->query($abfrage); 


    
//Es konnte ein Benutzer mit den Bedingungen gefunden werden.
    
if($ergebnis->num_rows
    { 
        
$user $ergebnis->fetch_array()[0];
        
$_SESSION["username"] = $user['username'];
        
/*
            Jetzt ist es zum Beispiel möglich hier mit dem Array $user
            jede Tabellenspalte wiederzugeben.
            
            Beispiel:
            Der User hat in der Tabelle eine Spalte namens 'geburtsdatum'
            mit $user['geburtsdatum'] kannst du es dir ausgeben.
        */


        
echo "Login erfolgreich. <br> <a href=\"geheim.php\">Geschützter Bereich</a><br/>"
        echo 
"<a href = 'index.php'>Startseite</a>"
    } 
    else 
    { 
        echo 
"Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>"
    } 

    
$verbindung->close();

}

?>