php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 1,00 durchschnittlich.
Alt 24.12.2010, 19:49  
Neuer Benutzer
 
Registriert seit: 24.12.2010
Beiträge: 1
PHP-Kenntnisse:
Anfänger
Dr_McKay befindet sich auf einem aufstrebenden Ast
Standard User ID in Session speichern

Hallo, ich wollte beim einloggen eines Users in der Session gleich seine Id speichern, ich hab dafür eine Seite:
login.php:
PHP-Code:
<?php

require_once ("include/datenbank_connect.inc.php");
require_once (
"include/links.inc.php");

session_start();

$name $_POST["name"];
$passwort md5($_POST["passwort"]);

$abfrage "SELECT name, passwort FROM user WHERE name LIKE '$name'";
$ergebnis mysql_query($abfrage);
$row mysql_fetch_object($ergebnis);

if (
$row->passwort == $passwort) {
    
$_SESSION["name"] = $name;

    
$abfrage "SELECT id FROM user WHERE name = '" $name "';";
    
$ergebnis mysql_query($abfrage);

    while (
$user_id mysql_fetch_assoc($ergebnis)) {
        
$_SESSION["user_id"] = $user_id;
    }
    
header("Location: $spiel");
} else {
    
header("Location: $index");
}
?>
Diese Seite wird einmalig, beim einlogen aufgerufen und überprüft auch, ob der Name und das Passwort überinstimmen.
Das Einlogen funktioniert, jedoch wird die user_id leider nicht in $_SESSION["user_id"] gespeicher nur der Name in $_SESSION["name"].
Dr_McKay ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.12.2010, 19:53  
Benutzer
 
Benutzerbild von wolfsmichel
 
Registriert seit: 26.06.2010
Beiträge: 36
PHP-Kenntnisse:
Anfänger
wolfsmichel befindet sich auf einem aufstrebenden Ast
wolfsmichel eine Nachricht über ICQ schicken wolfsmichel eine Nachricht über MSN schicken wolfsmichel eine Nachricht über Skype™ schicken
Standard

Hi,

da muesstest du nach mein Wissen das so machen.
Du baust eine DB Verbindung auf, pruefst ob Username = Username ist.
Und dann gibst du die ID aus.

MfG
wolfsmichel ist offline   Mit Zitat antworten
Alt 24.12.2010, 20:10  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard

Vielleicht so:

PHP-Code:
/**
 * @param string $key Key vom $_POST
 * @param integer $max Maximal erlaubte Anzahl an Stellen (im Formular definiert).
 * @return bool|string
 */
function getValue($key$max=50)
{
   if(
mb_strlen($_POST[$key]) > 50)
      return 
false;
   return 
$_POST[$key];
}

/**
 * @param string $name
 * @param string $passwort
 * @return integer|bool
 */
function getUserId($dbHandler$name$passwort)
{
   
$sql =
      
'SELECT id'.
      
'   FROM user'.
      
'   WHERE'.
      
'      name = "'.mysql_real_escape_string($name).'" AND'.
      
'      passwort = "'.sha1($passwort).'";'// in der DB sind alle Passwörter SHA1-kodiert
   
$result mysql_query($sql$dbHandler);
   if(!
is_resource($result))
      throw new 
Exception('Systemfehler select');
   return 
mysql_num_rows($result) > 0
      
?  (int)mysql_result($result0'id')
      :  
false;
}

$name getValue('name');
$passwort getValue('passwort');

if(
$name !== false && $passwort !== false)
   if(
$name != '' && $passwort != '')
   {
      
// Hier muss noch irgendwo die Verbindung zur Datenbank aufgebaut werden.
      // => $dbHandler
      // Bin ich zu faul, das hier auszuprogrammieren :)
     
      
if(($id getUserId($dbHandler$name$password)) !== false)
      {
         
// Eintrag in Session:
         
if(!session_start()) // Rückgabewert erst ab ... hm ... PHP 5.3?
            
throw new Exception('Systemfehler sessions.');
         
$_SESSION['user_id'] = $id;

         
// weiterleiten:
         
$url $_SERVER['SCRIPT_NAME'].'?action=willkommen';
         
header('Location: '.$url); // auf welcome-Seite umleiten
         
echo 'Bitte klicken sie auf <a href="'.$url.'">Link</a>, falls Ihr Browser nicht weiterleitet.';
      }
      else echo 
'User nicht gefunden.';
   }
   else echo 
'Name und Passwort sind Pflichtfelder.';
else echo 
'Ungültige Daten.'
Habe ich aber nicht getestet. Nur schnell hier ins Forum reingepostet.

Geändert von coola (24.12.2010 um 20:38 Uhr).
coola ist offline   Mit Zitat antworten
Alt 24.12.2010, 20:15  
Erfahrener Benutzer
 
Registriert seit: 07.12.2009
Beiträge: 843
PHP-Kenntnisse:
Fortgeschritten
chorn befindet sich auf einem aufstrebenden Ast
Standard

Wozu bitte soll die zweite Datenbankabfrage gut sein? Die ID kannst du genausogut in der ersten ziehen.

Und was genua steht jetzt in $_SESSION["user_id"]? Debuggen mit print_r().

Ausserdem öffnest du Tür und Tor für Scriptkiddies - Suchmaschine: SQL-Injection.
chorn ist offline   Mit Zitat antworten
Alt 24.12.2010, 22:27  
Benutzer
 
Benutzerbild von 0815Neo
 
Registriert seit: 15.12.2010
Beiträge: 77
PHP-Kenntnisse:
Fortgeschritten
0815Neo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Kann das sein das diese Zeile:
PHP-Code:
$abfrage "SELECT id FROM user WHERE name = '" $name "';"
eigentlich so lauten sollte
PHP-Code:
$abfrage "SELECT id FROM user WHERE name = '" $name "'"
__________________
Zitat:
"Anal ist halt voll für´n Arsch"
0815Neo ist offline   Mit Zitat antworten
Alt 24.12.2010, 22:36  
Benutzer
 
Benutzerbild von wolfsmichel
 
Registriert seit: 26.06.2010
Beiträge: 36
PHP-Kenntnisse:
Anfänger
wolfsmichel befindet sich auf einem aufstrebenden Ast
wolfsmichel eine Nachricht über ICQ schicken wolfsmichel eine Nachricht über MSN schicken wolfsmichel eine Nachricht über Skype™ schicken
Standard

Ja, da hst du recht 0815Neo
wolfsmichel ist offline   Mit Zitat antworten
Alt 25.12.2010, 14:17  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

PHP-Code:
<?php
session_start
();
require_once (
"include/datenbank_connect.inc.php");
require_once (
"include/links.inc.php");

$name $_POST["name"];
$passwort md5($_POST["passwort"]);

$abfrage "SELECT 
                id 
            FROM 
                user 
            WHERE 
                name = '" 
mysql_real_escape_string($name) . "'
            AND
                passwort = '" 
$passwort "'";

$ergebnis mysql_query($abfrage);

if ( 
mysql_num_rows($ergebnis) > ) {
    
$row mysql_fetch_assoc($ergebnis);
    
$_SESSION['userid'] = $row['id'];
    
$_SESSION['username'] = $name;

    
header("Location: $spiel"); // $spiel muss kompletter URI sein: http://example.org/spiel.php
} else {
    
header("Location: $index"); // $index muss kompletter URI sein: http://example.org/index.php
}

Statt heade.location aber besser das Script so gestalten, dass man die erforderlichen Teile per include einbindet => Affenformular.
Wolla ist offline   Mit Zitat antworten
Alt 25.12.2010, 18:10  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von coola Beitrag anzeigen
Vielleicht so:

PHP-Code:
/**
 * @param string $key Key vom $_POST
 * @param integer $max Maximal erlaubte Anzahl an Stellen (im Formular definiert).
 * @return bool|string
 */
function getValue($key$max=50)
{
   if(
mb_strlen($_POST[$key]) > 50)
      return 
false;
   return 
$_POST[$key];
}

/**
 * @param string $name
 * @param string $passwort
 * @return integer|bool
 */
function getUserId($dbHandler$name$passwort)
{
   
$sql =
      
'SELECT id'.
      
'   FROM user'.
      
'   WHERE'.
      
'      name = "'.mysql_real_escape_string($name).'" AND'.
      
'      passwort = "'.sha1($passwort).'";'// in der DB sind alle Passwörter SHA1-kodiert
   
$result mysql_query($sql$dbHandler);
   if(!
is_resource($result))
      throw new 
Exception('Systemfehler select');
   return 
mysql_num_rows($result) > 0
      
?  (int)mysql_result($result0'id')
      :  
false;
}

$name getValue('name');
$passwort getValue('passwort');

if(
$name !== false && $passwort !== false)
   if(
$name != '' && $passwort != '')
   {
      
// Hier muss noch irgendwo die Verbindung zur Datenbank aufgebaut werden.
      // => $dbHandler
      // Bin ich zu faul, das hier auszuprogrammieren :)
     
      
if(($id getUserId($dbHandler$name$password)) !== false)
      {
         
// Eintrag in Session:
         
if(!session_start()) // Rückgabewert erst ab ... hm ... PHP 5.3?
            
throw new Exception('Systemfehler sessions.');
         
$_SESSION['user_id'] = $id;

         
// weiterleiten:
         
$url $_SERVER['SCRIPT_NAME'].'?action=willkommen';
         
header('Location: '.$url); // auf welcome-Seite umleiten
         
echo 'Bitte klicken sie auf <a href="'.$url.'">Link</a>, falls Ihr Browser nicht weiterleitet.';
      }
      else echo 
'User nicht gefunden.';
   }
   else echo 
'Name und Passwort sind Pflichtfelder.';
else echo 
'Ungültige Daten.'
Hallo,

deine Methode getUserId enthält Sachen die dem Methodennamen nicht entsprechen. Du willst nur eine User ID zurückgeben in der Methode, aber du machst da drin ein komplettes Login, noch dazu mit Mysql Funktionen die man heute so nicht mehr nutzt. Astatt mysql_num_rows sollte man dann da Count(*) nutzen. Einige dich bei der Rückgabe eines Wertes auf einen Datentyp, du gibst entweder ein INT oder einen Bool zurück. DAs macht man nicht bzw. ist kein guter Stil.

Ich würde in einer Methode den Login machen und da true oder false zurück geben und dann in einer anderen Methode den Wert prüfen und dann erst die User_Id zurück geben.

Schau dir auch mal deine Methode getValue an, da ist eigetnlich das gleiche Spiel. Ich finde das unsauber. Warum übergibst du als formellen Parameter da $max=50? Übergib einfach $max und setze den WErt von außen.

Gruß Litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de

Geändert von litterauspirna (25.12.2010 um 18:13 Uhr).
litterauspirna ist offline   Mit Zitat antworten
Alt 25.12.2010, 19:11  
Neuer Benutzer
 
Registriert seit: 24.12.2010
Beiträge: 19
PHP-Kenntnisse:
Anfänger
Drexlache befindet sich auf einem aufstrebenden Ast
Standard

wie wärs, wenn du entsprechende Zeilen wie folgt abänderst:

PHP-Code:
$abfrage "SELECT name, passwort, user_id FROM user WHERE name LIKE '$name'";
//...
if ($row->passwort == $passwort) {
    
$_SESSION["name"] = $name;
    
$_SESSION["user_id"] = $row->user_id;
//... 
Dann brauchst du keinen zweiten Tabellen aufruf mehr. Kenne mich leider mit SQL-Befehlen nicht so gut aus, und kann daher nur erahnen, was der zweite aufruf macht.
Drexlache ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] E-mail Versand Fehler Chacky PHP Einsteiger 29 25.11.2010 13:31
Session Variable speichern helpchris Datenbanken 42 02.11.2010 18:14
session in variable speichern Sp1n PHP Tipps 2010 19 31.05.2010 16:03
User Online via Session larabad PHP Tipps 2009 17 18.05.2009 15:48
User erkennen (ohne session + ohne cookies + prob mit IP) PHP Tipps 2007 8 30.12.2007 23:35
Problem bei session Lifetime Cyberbob_at_tot PHP Tipps 2007 5 05.06.2007 17:47
Session in Session tinchen PHP Tipps 2007 22 21.03.2007 19:53
Rubrik aus DB lesen oder als Var. bzw. in Session speichern Diet PHP Tipps 2006 4 21.09.2006 15:53
session nach seitenwechsel leer... GELight PHP Tipps 2006 8 17.09.2006 15:17
User werden nicht angezeigt/aufgelistet - Session Fehler? PHP Tipps 2005 13 25.05.2005 16:49
MIt einer Session ID den User überprüfen PHP Tipps 2005 8 17.02.2005 13:55
[Erledigt] Formulardaten in einer Session speichern, per Link übergeben PHP Tipps 2004-2 2 29.12.2004 15:47
Access denied for user: '@localhost' / SYSTEM@localhost Datenbanken 0 10.11.2004 20:35
Frage zu Session PHP Tipps 2004 2 21.09.2004 05:46
[Erledigt] Object in Session speichern PHP-Fortgeschrittene 2 31.08.2004 14:15

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
session_start in php 5.3, user id in session weiterleiten, php passwort in session speichern, passwort in session speichern, user session speichern, userid in session speichern, sesssion in string speichern, username in session speichern, neue user speichern in php, user id in session, benutzernamen in session speichern, in session user id speichern?, php user in session speichern, $_session[\'username\'], php session mit nutzer id, nach login namen in session speichern, php userid in session spiechern, session php passwort nicht in session speichern, php session benutzerverwaltung id in session speichern?, in session sichern ohne string

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:51 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum