hallo sönke
jetzt habe ich deinen post doch glatt übersehen ;)
mysql_query() folgt keine richtige Fehlerprüfung, sehr unschön, denn..
if(mysql_num_rows($erg_login)==1)
..wenn mysql_query() doch mal fehlgeschlägt, wundern sich nicht wenige, warum hier ein Fehler kommt (siehe Forumsarchiv, Stichwort "not a valid MySQL result resource"). Siehe auch mysql_error().
da hast du natürlich recht, normalerweise prüfe ich den rückgabewert von mysql_query auch ab, aber in dem fall habe ich diese abfrage zuerst einmal weggelassen da ich mich primär um die session kümmern wollte
Diese beiden Abfragen kannst Du zusammenfassen:
»»
$rnutzer=mysql_query('select anrede,vorname,nachname from benutzerdaten where benutzername="'.mysql_escape_string($_POST["benutzername"]).'"' and passwort = "'.mysql_escape_string($_POST["passwort"]).'"';
if ($rnutzer) // mysql_query() ok
{
...$_SESSION["s_anrede"] = $anrede;
$_SESSION["s_vorname"] = $vorname;
$_SESSION["s_nachname"] = $nachname;echo 'Willkommen, '.$anrede.' '.$vorname.' '.$nachname;
Wenn Du schon Sessionvariablen anlegst, solltest Du sie auch benutzen. Prinzipiell ist es zwar kein Problem, zweigleisig zu fahren, aber das Speichern von ein und denselben Daten an zwei unabhängigen Positionen birgt einige ärgerliche Stolperfallen.
was genau macht denn die funktion mysql_escape_string() ? setzt es escape zeichen am anfang und ende, falls in der variable ein ' oder ein " enthalten ist und es sonst zu einem fehlerhaften string kommen könnte ?
Außerdem solltest Du Variablen beim Ausgeben immer durch htmlentities() jagen; einzige Ausnahme: Du bist Dir 110%ig sicher, daß die Variable entweder eine Zahl enthält oder frei von den Browser verwirrenden Zeichenketten ist (alles, was ein < enthalten kann, ist gefährlich). Das Argument "Es wird sich schon keiner '<script> while (true) alert("Bla!")</script>' nennen", zählt nicht. Wirklich.
das ist ein super tip, danke.jetzt wo du es sagst frage ich mich wirklich wieso deswegen noch nie ein fehler passiert ist :) .anscheinend sind die benutzer halt doch zu 99% vertrauenswert und zu 1% unwissend was sie damit hätten anrichten können :) (oder umgekehrt)
manchmal denkt man halt auf die einfachsten sachen nicht.
<?php
session_start();
?>Schau Dir oben nochmal an, ob Du nicht zufälligerweise der Session einen anderen Namen gegeben hast..
ich hab das einmal mit 2 ganz simplen dateien probiert (und ohne session namen), die variablen werden gespeichert in der session, aber komischerweise danach nicht wieder ausgelesen...
ich weiss das sind viele fragen, aber ich habe mich gestern den ganzen tag mühselig durch die aberwitzigsten seiten durchgekämpft um näheres über diese "ominösen" sessions zu erfahren aber man findet fast nirgends eine wirklich gute erklärung zu diesem thema und da kann man dann schon verzweifeln wenn man sich mühselig aus verschiedensten seiten noch so kleine informationen zusammensuchen muss :(
Wahrscheinlich ist die Geschichte zu einfach zum Erklären :)
na klar ist die geschichte eine einfache, wenn man einmal heraus hat wie das funktioniert, wenn man nicht weiss wie man essen kann, könnte man doch glatt vor einem schönen dicken roastbeefsteak und folienkartoffeln des hungertodes sterben :))
grüsse,
daniel