php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.08.2006, 19:48  
Erfahrener Benutzer
 
Registriert seit: 04.12.2005
Beiträge: 286
PHP-Kenntnisse:
Fortgeschritten
snatch-ic
Standard Session läuft sofort ab

Hallo,
ich habe ein Loginsystem geschrieben das auf Sessions basiert.
Nach dem ich das System auf meinem PC getestet habe und auch alles funktioniert, habe ich es ins Web geladen.
Wenn ich mich jetzt auf dem System im Web einlogge, öffnet sich nach dem ich die Userdaten weggeschickt habe zwar der Login-Bereich, aber nach dem ich einen Link in diesem Bereich geklickt habe, habe ich auf meinem Bildschirm wieder die Loginmaske.

Hier der erwünschte Code:
PHP-Code:
// In diesen 3 Dateien sind configurationen für die Seite. In der "header.inc.php" befindet sich unter anderem das session_start().
include("../config.inc.php");
include(
"header.inc.php");
include(
"../db_connect.inc.php");

// Variablendefinition
$unavi = array();
$row_navi = array();
$username '';
$passwort '';
$content '';
$content_head  '';

if(!isset(
$_SESSION['logged'])) $_SESSION['logged'] = '';
if(isset(
$_POST['admin_user'])) $username $useful->mysql_escape($_POST['admin_user']);
if(isset(
$_POST['admin_pass'])) $passwort $useful->mysql_escape($_POST['admin_pass']);
if(isset(
$_POST['admin_login'])) $klick_login $useful->mysql_escape($_POST['admin_login']);

// Wurden keine Login-Daten eingegeben wird dem User wieder die Loginmaske gezeigt.
if($username == NULL and $passwort == NULL and $_SESSION['logged'] == NULL) {
$smarty->display('admin/index_login.tpl');
}
// Hier werden die Logindaten verarbeitet
if($username <> NULL and $passwort <> NULL and $_SESSION['logged'] == NULL) {
// Die Daten des Users werden aus der DB geholt...
$sel_user mysql_query("SELECT
$db_t_admin_user.user_id, $db_t_admin_user.sicherheitsstufe_id, $db_t_admin_user.vorname,
$db_t_admin_user.nachname, $db_t_admin_user.email, $db_t_admin_user.username, $db_t_admin_user.passwort,
$db_t_admin_sicherheitsstufe.stufenbezeichnung, $db_t_admin_sicherheitsstufe.stufe
FROM
$db_t_admin_user
LEFT JOIN
$db_t_admin_sicherheitsstufe
ON
$db_t_admin_user.sicherheitsstufe_id = $db_t_admin_sicherheitsstufe.sicherheitsstufe_id
WHERE
$db_t_admin_user.username = '$username' AND
$db_t_admin_user.passwort = '$passwort'"
);
$row_user mysql_fetch_array($sel_user);

// ...und in der Session gespeichert.
if(mysql_affected_rows() <> 0) {
$_SESSION['user_id'] = $row_user['user_id'];
$_SESSION['sicherheitsstufe'] = $row_user['stufe'];
$_SESSION['stufenbezeichnung'] = $row_user['stufenbezeichnung'];
$_SESSION['username'] = $row_user['username'];
$_SESSION['passwort'] = $row_user['passwort'];
$_SESSION['vorname'] = $row_user['vorname'];
$_SESSION['nachname'] = $row_user['nachname'];
$_SESSION['email'] = $row_user['email'];
$_SESSION['logged'] = 1;
}

// Wurde bei dem Login versuch keine Übereinstimmung gefunden, wird dem User wieder die Login-Maske angezeigt.
if(mysql_affected_rows() == NULL and $_SESSION['logged'] == NULL) {
$smarty->display('admin/index_login.tpl');
}

// Damit geguckt werden kann welcher User sich wann eingelogt hat, werden seine Daten noch in diese Tabelle geschrieben
mysql_query("INSERT INTO
$db_t_admin_login_statistik
SET
user_id = '$_SESSION[user_id]',
zeit_datum = NOW(),
ip = '$_SERVER[REMOTE_ADDR]',
user_agent = '$_SERVER[HTTP_USER_AGENT]'"
);

}

// War der Login erfolgreich, wird dem User der Login-Bereich angezeigt.
if($_SESSION['logged'] == 1) {
... 
Wisst ihr vielleicht woran das liegen kann???

mfg
snatch
snatch-ic ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 02.08.2006, 19:54  
Gast
 
Beiträge: n/a
Standard

Richtig debuggen
1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL);
3. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
5. Schritt 3 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

Die Ausgaben per echo kann man sich ersparen, in dem man einen Debugger benutzt, was eigentlich selbstverständlich sein sollte.

Und noch ein Tipp: Wenn du Punkt 2 dieser Liste ausführst, wundere dich nicht. PHP haut dir dann nämlich deine schlampige Programmierung heftigst um die Ohren.

Gruß
phpfan
 
Alt 02.08.2006, 19:59  
Erfahrener Benutzer
 
Registriert seit: 04.12.2005
Beiträge: 286
PHP-Kenntnisse:
Fortgeschritten
snatch-ic
Standard

Zitat:
Zitat von phpfan
Und noch ein Tipp: Wenn du Punkt 2 dieser Liste ausführst, wundere dich nicht. PHP haut dir dann nämlich deine schlampige Programmierung heftigst um die Ohren.
Was ist denn nicht schlampig programmierter Code?
Würde ich gerne mal sehen... ...vielleicht kann ich da ja was lernen.
snatch-ic ist offline  
Alt 02.08.2006, 20:00  
Gast
 
Beiträge: n/a
Standard

Dann baue error_reporting(E_ALL); ein und du wirst es sehen!

Und ordentlich Einrücken würde die Sache lesbarer machen.

Gruß
phpfan
 
Alt 02.08.2006, 20:36  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Wo ist dein session_start()?

Bitte mal mehr Kommentare im Code, ich blick nicht durch.
Zergling-new ist offline  
Alt 02.08.2006, 21:29  
Erfahrener Benutzer
 
Registriert seit: 04.12.2005
Beiträge: 286
PHP-Kenntnisse:
Fortgeschritten
snatch-ic
Standard

Zitat:
Zitat von Zergling
Bitte mal mehr Kommentare im Code, ich blick nicht durch.
Habe jetzt den Code kommentiert.

Außerdem habe ich error_reporting(E_ALL); eingesetzt und konnte bis auf folgende Fehler alle beseitigen:

Code:
Notice: Undefined index:

Dieser Fehler taucht in folgenden Zeilen auf:

$username = $useful->mysql_escape($_POST['admin_user']);
$passwort = $useful->mysql_escape($_POST['admin_pass']);
$klick_login = $useful->mysql_escape($_POST['admin_login']);
Code:
Notice: Use of undefined constant id - assumed

Dieser Fehler taucht in folgenden Zeilen auf:

$navigation[] = array(id => $row_navi['navi_id'],
                      name => $row_navi['bezeichnung'],
                      link => 'index.php?n='.$row_navi['navi_id'].'&f='.$row_navi['father_id'].'&'.SID);
Code:
Fatal error: Cannot use string offset as an array in

Dieser Fehler taucht in folgender Zeile auf:

if($row_navi['navi_id'] == $unavi[0]['father_id']) {
Könntet ihr mir da eine evtl. weiter helfen?
snatch-ic ist offline  
Alt 02.08.2006, 22:09  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Code 1:
"Undefined index" heißt, dass du auf ein Array-Element zugreifst, dass es nicht gibt. Offenbar $_POST['admin_user'] etc.
Prüfe vorher mit isset($_POST['admin_user']) ob die Variable existiert. Wenn nicht musst du sehen, was dein Script dann anstellen soll (Default-Wert setzen, ignorieren, ..was du möchtest).

Code 2:
array(id =>
es muss heißen
array('id' =>
siehe http://de.php.net/manual/en/language...es.array.donts

Code 3:
"Cannot use string offset as an array"
Der Fehler tritt auf, wenn du eine Variable, die ein String ist, wie einen Array behandelst. Entweder $row_navi oder $unavi ist demnach ein String und kein Array. Welcher kannst du mit var_dump() herausfinden.
Zergling-new ist offline  
Alt 02.08.2006, 22:23  
Erfahrener Benutzer
 
Registriert seit: 04.12.2005
Beiträge: 286
PHP-Kenntnisse:
Fortgeschritten
snatch-ic
Standard

ok, die ersten beiden fehler hab ich nun auch weg bekommen.
aber der letzte macht mir noch zu schaffen. so wie ich das nämlich sehe sind beide variablen arrays.

hier der code mit dem sie gefüllt werden:
PHP-Code:
while($row_navi mysql_fetch_array($sel_navi)) {
while(
$row_unavi mysql_fetch_array($sel_unavi)) {
if(
$row_unavi[bezeichnung] <> NULL) {
$unavi[] = array(id => $row_unavi[navi_id],
                 
name => $row_unavi[bezeichnung],
                                 
link => 'index.php?n='.$row_unavi[navi_id],
                                 
father_id => $row_unavi[father_id]);
}
}
$unavi_count count($unavi);

$navigation[] = array('id' => $row_navi['navi_id'],
                      
'name' => $row_navi['bezeichnung'],
                                            
'link' => 'index.php?n='.$row_navi['navi_id'].'&f='.$row_navi['father_id'].'&'.SID);

// Hier entsteht der Fehler
if($row_navi['navi_id'] == $unavi[0]['father_id']) {
for(
$i=0$i<$unavi_count$i++) {
$navigation[] = array('id' => $unavi[$i]['id'],
                      
'name' => $unavi[$i]['name'],
                                            
'link' => $unavi[$i]['link'].'&f='.$unavi[$i]['father_id'].'&'.SID,
                                            
'bild' => '[img]images/menu_punkt.png[/img] ');
}
}

ich wüsste jetzt nicht was ich da ändern müsste...
snatch-ic ist offline  
Alt 02.08.2006, 22:34  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Es ist aber entscheidend wie PHP es sieht.
var_dump() und dann Posting von phpfan abarbeiten.

Wenn alles rund läuft kommen wir erst zum Hauptproblem - wenn es sich dadurch (sauberes Programmieren mit E_ALL) nicht schon gelöst hat
Zergling-new ist offline  
Alt 02.08.2006, 23:01  
Erfahrener Benutzer
 
Registriert seit: 04.12.2005
Beiträge: 286
PHP-Kenntnisse:
Fortgeschritten
snatch-ic
Standard

also, ich habe jetzt alle fehler beseitigt... und es geht.
error_reporting(E_ALL); bringts wirklich total!

die beiden arrays die probleme gemacht haben, habe ich einfach als array definiert.
also beide so

$unavi = array();
$row_navi = array();

und danach ist der fehler verschwunden..

danke für die hilfe und die tips zum saubren programmieren!

mfg snatch
snatch-ic ist offline  
 


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] Session Problem karina_02 PHP Tipps 2008 6 18.05.2008 22:37
Session Variablen als Referenz!? O_o Sam781 PHP-Fortgeschrittene 4 01.10.2007 11:19
Problem bei session Lifetime Cyberbob_at_tot PHP Tipps 2007 5 05.06.2007 17:47
session nach seitenwechsel leer... GELight PHP Tipps 2006 8 17.09.2006 15:17
Session Logout Login Navigation TailerD PHP Tipps 2006 10 24.06.2006 17:12
session array Timo Trallala PHP Tipps 2006 18 22.04.2006 13:45
Frage zur Anwendung einer Session mehrfach... GELight PHP Tipps 2006 10 12.03.2006 16:47
[Erledigt] php session problem :( PHP Tipps 2005-2 5 21.10.2005 16:37
Session abschaltbar?? Probleme mit Objekten in Session! becks123 PHP-Fortgeschrittene 3 19.09.2005 15:47
Session wird nicht angelegt PHP Tipps 2005-2 7 24.07.2005 13:35
Kreieren einer Session PHP Tipps 2005 11 28.05.2005 15:16
Session error nach Umstellung auf PHP 5 PHP Tipps 2005 15 13.05.2005 14:35
[Erledigt] Formulardaten in einer Session speichern, per Link übergeben PHP Tipps 2004-2 2 29.12.2004 15:47
[Erledigt] Hilfe...PhpBB Session Problem!! PHP Tipps 2004-2 2 15.12.2004 18:28
$_GET und Session PHP Tipps 2004 9 20.06.2004 19:17

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
login sitzung läuft sofort ab

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:14 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.