Problem mit ner Funktion
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
beitrag
binden
date
eintrag
fehler
funktion
insert
konstant
limit
login
manual
methode
null
number
pawort
result
schwein
session
tabelle
user
-
Also, da anscheinend auf einmal kein Tag mehr vergeht, wo ich keinen Fehler habe, poste ich mal
Ich habe ne Funktion:
function logged_in()
{
$result = mysql_query("SELECT ID FROM serialz_users WHERE Session='".session_id()."'LIMIT 1");
return (mysql_num_rows($result)==1);
}
Ich verwende Si bei jeden Login, hatte aber noch nie Probleme.
Und zwar habe ich sie an 2 Stellen:
1) in einer Kleinen Tabelle, wo ich mit checke, ob der User engeloggt ist, wenn er es nicht ist zeigt er ein Loginformular an
2) In nen Bereich, wo man nur als eingeloggter reinkann.
Also habe ich diesen Bereich mit
if(logged_in())
{
}
else
{
echo "Sie sind nicht eingeloggt. Sie m?ssen eingeloggt sein, um eine Antwort abgeben zu k?nnen";
?>
<meta http-equiv="refresh" content="0 url=viewtopic?number=<?php echo $number; ?>">
<?php
}
abgegrenzt
Das Problem ist dabei, dass er zwar das Formular angezeigt hat, also mich nicht als eingeloggtes Akzeptiert, aber ich bin trotzdem in den Bereich reingekommen, selbst wie ich die Session mit NULL ?berschrieben habe
Jetzt habe ich das getestet:
if(logged_in())
{
?>
<input type="hidden" name="test" value="1">
<?php
}
else
{
?>
<input type="hidden" name="test" value="2">
<?php
}
Damit wollte ich das Ding mal testen, was er ausgibt, und mit Firefox auslesen (kann man ?ber die Seiteninformation, solange dass Feld nicht Passwort ist)
Aber er hat es nichtmal erkannt
Hat wer nen Plan?
Beitrag ge?ndert am 2.02.2006 01:37 von kai008
Beitrag ge?ndert am 2.02.2006 01:37 von kai008 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
ich habe noch keinen Fehler oder Bug gefunden.
Aber was willst du denn mit folgendem Code testen?:
if(logged_in()) { ?> <input type="hidden" name="test" value="1"> <?php } else { ?> <input type="hidden" name="test" value="2"> <?php }
Das einzige, was sein k?nnte, ist das die Sessions ein Problem haben, oder dass etwas mit der MySql Tabelle falsch ist.
mfg,
hr -
Hi,
ich habe noch keinen Fehler oder Bug gefunden.
Aber was willst du denn mit folgendem Code testen?:
if(logged_in()) { ?> <input type="hidden" name="test" value="1"> <?php } else { ?> <input type="hidden" name="test" value="2"> <?php }
Das einzige, was sein k?nnte, ist das die Sessions ein Problem haben, oder dass etwas mit der MySql Tabelle falsch ist.
mfg,
hr
Ob er mich jetzt als eingeloggt oder nicht erkennt ^^
Am besten ich posten den COmpletten Source:
config.php
<?php function connect() { $con= mysql_connect('mysql.lima-city.de','*********','********') or die(mysql_error()); mysql_select_db('DB161045818',$con) or die(mysql_error()); } function check_user($name, $pass) { $result= mysql_query("SELECT ID FROM users WHERE Name='".$name."' AND Passwort=MD5('".$pass."') LIMIT 1") or die(mysql_error()); if(mysql_num_rows($result)==1) { $user=mysql_fetch_assoc($result); return $user['ID']; } else { return false; } } function login($userid) { mysql_query("UPDATE users SET Session='".session_id()."'WHERE ID=".$userid); } function logged_in() { $result = mysql_query("SELECT ID FROM users WHERE Session='".session_id()."'LIMIT 1"); return (mysql_num_rows($result)==1); } function logout() { mysql_query("UPDATE users SET Session=NULL WHERE Session='".session_id()."'"); } connect(); ?>
Die Index, wo auch rechts das Loginformular liegt
<?php session_start(); ?> <html> <head> <title></title> </head> <body link="#FF0000" vlink="#FF0000" text="#FF0000" bgcolor="#000000" alink="#FF0000"> <?php include'hidden/config.php'; ?> <table width="100%" border="0"> <tr> <td width="15%" align="left" valign="top">Men?</td> <td width="61%" align="left" valign="top"><?php echo '<a href="newtopic.php">Neuen Beitrag schreiben</a><br>'; echo "<hr>"; $result = mysql_query("SELECT Titel, ID FROM forum WHERE Eintrag='1' ORDER BY ID ASC"); while($row = mysql_fetch_object($result)) { $titel = $row->Titel; $id = $row->ID; echo "<a href=viewtopic.php?number=".$id.">".$titel."</a><br>"; } ?> </td> <td width="20%" align="left" valign="top"> <?php if(!logged_in()) { ?> Login: <form action="login.php" method="post"> <table width="100%" border="0"> <tr> <td width="28%" align="left" valign="top">Username:<br> Passwort:</td> <td width="72%" align="left" valign="top"><input type="text" name="username" maxlength="20"> <input type="password" name="userpass" maxlength="20"></td> </tr> </table> <input name="submit" type="submit" value="Einloggen"> </form> <a href="registrieren.php">Registrieren</a><br> Passwort vergessen </td> <?php } else { echo "Eingeloggt als "; $sql = mysql_query("SELECT Name FROM users WHERE Session='".session_id()."'"); while($row = mysql_fetch_object($sql)) { $name = $row->Name; echo $name; } } ?> </tr> </table> </body> </html>
Die Posting-Seite:
<html> <head> </head> <body link="#FF0000" vlink="#FF0000" text="#FF0000" bgcolor="#000000" alink="#FF0000"> <?php include'hidden/config.php'; $number = $_GET['number']; $name = $HTTP_POST_VARS['Name']; $titel = $HTTP_POST_VARS['Titel']; $text = $HTTP_POST_VARS['Text']; if(logged_in()) { ?> <input type="hidden" name="text" value="1"> <?php } else { ?> <input type="hidden" name="test" value="2"> <?php } if(logged_in()) { if (!isset($HTTP_POST_VARS['post'])) { ?> <form action="posting.php?number=<?php echo $number; ?>" method="post"> <table width="100%" border="0"> <tr> <td>Name:</td> <td><input name="Name" type="text" id="Name" size="100"></td> </tr> <tr> <td align="left" valign="top">Text:</td> <td align="left" valign="top"><textarea name="Text" cols="97" rows="20" id="Text">Type your Text here</textarea></td> </tr> </table> <p> <input type="submit" value="Eintragen" name="post" id="post"> <input name="submit" type="reset" value="Zurücksetzen"> </p> </form> © 2006 by Kai™ <?php } else { $read = "SELECT Eintrag FROM forum WHERE ID='$number'"; $result = mysql_query($read); while($row = mysql_fetch_object($result)) { $eintrag = $row->Eintrag; } $eintrag++; $text = str_replace("<", "<", $text); $text = str_replace("\n", "<br>", $text); $text = str_replace("[b]", "<b>", $text); $text = str_replace("[/b]", "</b>", $text); $text = str_replace("[i]", "<i>", $text); $text = str_replace("[/i]", "</i>", $text); $text = str_replace("[u]", "<u>", $text); $text = str_replace("[/u]", "</u>", $text); $text = str_replace("[img]", "<img src=\"", $text); $text = str_replace("[/img]", "\">", $text); $search = array(':)',':(',':D',':o'); $replace = array('<img src="smile.gif" alt=":)" />','<img src="sad.gif" alt=":super:" />','<img src="biggrin.gif" alt=":D" />','<img src="surprised.gif" alt=":o" />'); $text = str_replace($search, $replace, $text); $ip = getenv("REMOTE_ADDR"); $date = date("d. m. Y"); $writenow = mysql_query("INSERT INTO forum (ID, Eintrag, Titel, Text, Datum, Name, IP) VALUES ('$number', '$eintrag', '$titel', '$text', '$date', '$name', '$ip')") OR die(); $writenow2 = mysql_query("INSERT INTO count (posts) VALUES ('post')"); ?> <div align="center"> Erfolgreich eingetragen Sie werden in einer Sekunde weitergeleitet <meta http-equiv="refresh" content="1 url=viewtopic.php?number=<?php echo $number; ?>"> </div> <?php } } else { echo "Sie sind nicht eingeloggt. Sie m?ssen eingeloggt sein, um eine Antwort abgeben zu k?nnen"; ?> <meta http-equiv="refresh" content="0 url=viewtopic?number=<?php echo $number; ?>"> <?php } ?> </body> </head>
Beitrag ge?ndert am 2.02.2006 01:57 von kai008
Beitrag ge?ndert am 2.02.2006 01:58 von kai008 -
Hi,
wird in hidden/config.php eine session gestartet oder nicht?
Ich denke jedoch schon, dass das Problem an der Funktion liegt. Ich w?rd mal richtig ?berpr?fen, was die Funktion logged_in zur?ckliefert (die Variabel $result).
mfg,
hr -
Hi,
wird in hidden/config.php eine session gestartet oder nicht?
Ich denke jedoch schon, dass das Problem an der Funktion liegt. Ich w?rd mal richtig ?berpr?fen, was die Funktion logged_in zur?ckliefert (die Variabel $result).
mfg,
hr
Hab mir schnell das geschrieben:
<?php
include'hidden/config.php';
logged_in();
echo $result;
?>
Aber ausgeben tut er nix -
Hi,
dass das nicht geht ist schon klar, aber ?berpr?f mal die Sessions, es k?nnte sein, dass in deiner MySql Tabelle die Session-id noch gespeichert ist, und dass die gar nicht gel?scht wurde, nachdem du dich ausgeloggt hast.
mfg,
hr -
Hab die logout-Funktion noch garnicht integriert, und ersetze die Session immer von Hand in phpMyAdmin mit 'NULL'
-
Hi,
dann muss das der Fehler sein, ich bin mir sicher.
Versuch mal folgendes: Logg dich ein, trenn die Internetverbindung, l?sche alle Cookies, verbinde dich wieder ins Internet und geh auf die Seite. Wenn es dann nicht funktioniert, dann ist ok und der Fehler ist dann einfach, dass die session-id zuerst gel?scht werden sollte.
Eine logout-Funktion w?re durchaus n?tig.
Es k?nnte sein, dass die Session-id nicht in den Cookies gespeichert wird. Schau mal nach. SOnst musst du die SID in die URLs einf?gen.
mfg,
hr -
Zuerst mal Big THX dass du mir hilfst
Nahcdem ich nochmal aufs Index gegangen bin war ich ich noch immer eingeloggt (laut den Men? rechts)
Cookies verwende ich gar keine. -
Hi,
also hat es jetzt funktioniert oder?
Wenn du immer noch eingeloggt bist, dann funktioniert es ja.
Speicherst du die session-id nur in der MySql Tabelle?
mfg,
hr -
ja
Hi,
also hat es jetzt funktioniert oder?
Wenn du immer noch eingeloggt bist, dann funktioniert es ja.
Speicherst du die session-id nur in der MySql Tabelle?
mfg,
hr
Aber ich komme noch immer mit leerer Session (also ausgeloggt) auf die Antwortseite -
Hi,
du hast doch gesagt, dass du keine Cookies benutzts.
Wie weiss logged_in dann, ob es wieder der selbe user ist, wenn sich die Session-id immer ?ndert? Die session-id muss ja irgendwo gespeichert werden.
Vielleicht ist das das Problem.
mfg,
hr -
Ich wusste nicht, dass sich die ID immer ?ndert, ich dachte die bleibt immer gleich
Hi,
du hast doch gesagt, dass du keine Cookies benutzts.
Wie weiss logged_in dann, ob es wieder der selbe user ist, wenn sich die Session-id immer ?ndert? Die session-id muss ja irgendwo gespeichert werden.
Vielleicht ist das das Problem.
mfg,
hr
-
Hi,
ja schon, aber die ID muss ja irgendwo beim user gespeichert werden, sodass das Script dann ihn wieder erkennt (das machst du ja indem du es mit der gespeicherten ID in der MySql vergleichst).
Wenn du aber keine Cookies verwendest, dann meint das Script, dass es jemand anders ist, und erstellt eine neue Session.
Binde doch in alle Links die SID ein.
z.B. so:
echo '<a href="seite2.php?' . SID . '">Seite 2</a>';
Dadurch erkennt dann das script die SID, weil sie im Query-string drin steht. Aber besser ist mit Cookies, weil es einfacher ist. Die Cookies werden eigentlich automatisch beim start der session erzeugt.
mfg,
hr -
Hi,
ja schon, aber die ID muss ja irgendwo beim user gespeichert werden, sodass das Script dann ihn wieder erkennt (das machst du ja indem du es mit der gespeicherten ID in der MySql vergleichst).
Wenn du aber keine Cookies verwendest, dann meint das Script, dass es jemand anders ist, und erstellt eine neue Session.
Binde doch in alle Links die SID ein.
z.B. so:
echo '<a href="seite2.php?' . SID . '">Seite 2</a>';
Dadurch erkennt dann das script die SID, weil sie im Query-string drin steht. Aber besser ist mit Cookies, weil es einfacher ist. Die Cookies werden eigentlich automatisch beim start der session erzeugt.
mfg,
hr
und wenn ich das habe, ?bergebe ich einfach bei jeden Link die ID des Users bzw. die Session, und da die Session kein schwein kennt kanns auch niemand faken und als wer anderer Schreiben? -
Hi,
ja schon, aber die ID muss ja irgendwo beim user gespeichert werden, sodass das Script dann ihn wieder erkennt (das machst du ja indem du es mit der gespeicherten ID in der MySql vergleichst).
Wenn du aber keine Cookies verwendest, dann meint das Script, dass es jemand anders ist, und erstellt eine neue Session.
Binde doch in alle Links die SID ein.
z.B. so:
echo '<a href="seite2.php?' . SID . '">Seite 2</a>';
Dadurch erkennt dann das script die SID, weil sie im Query-string drin steht. Aber besser ist mit Cookies, weil es einfacher ist. Die Cookies werden eigentlich automatisch beim start der session erzeugt.
mfg,
hr
und wenn ich das habe, ?bergebe ich einfach bei jeden Link die ID des Users bzw. die Session, und da die Session kein schwein kennt kanns auch niemand faken und als wer anderer Schreiben?
Auf jeder Seite ?berpr?fe ich dann einfach, ob er den Namen findet, WHERE die session einfach die session ist und die Userid die Userid?
E: Sorry f?r doppelposts. wollte editieren udn habe den Falschen knopf erwischt
Beitrag ge?ndert am 2.02.2006 03:23 von kai008 -
Hi,
genau so geht das. Ob du das mit Cookies oder mit dem Link machst: ist total willk?rlich.
Unter http://www.php.net/manual/de/function.session-start.php steht ?brigens:
session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der Session-ID basiert, die mit einer Anfrage, z.B. durch GET, POST oder ein Cookie, ?bermittelt wurde.
Das heisst also, dass du die ID ?ber Query-string, POST-Methode oder Cookies ?bergeben kannst, alles geht.
Das Cookie muss n?turlich den entsprechenden namen der Session enthalten, normalerweise PHPSESSID, du kannst die aber auch ver?ndern. Das gilt auch f?r den query-string, und die POST-Methode (Query z.B. PHPSESSID=[hash], die Konstante SID enth?llt das ganze, inklusiv dem key).
Mit session_name kannst du ?brigens den aktuellen Namen der Session ablesen, oder auch ver?ndern, was auch n?tzlich ist (siehe http://www.php.net/manual/de/function.session-name.php).
EDIT: sag mir bescheid, ob es funktioniert.
mfg,
hr
p.s.: ich log mich jetzt aus. Kannst mir am besten eine PN schreiben.
Beitrag ge?ndert am 2.02.2006 03:26 von heavyraptor -
Hi,
genau so geht das. Ob du das mit Cookies oder mit dem Link machst: ist total willk?rlich.
Unter http://www.php.net/manual/de/function.session-start.php steht ?brigens:
session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der Session-ID basiert, die mit einer Anfrage, z.B. durch GET, POST oder ein Cookie, ?bermittelt wurde.
Das heisst also, dass du die ID ?ber Query-string, POST-Methode oder Cookies ?bergeben kannst, alles geht.
Das Cookie muss n?turlich den entsprechenden namen der Session enthalten, normalerweise PHPSESSID, du kannst die aber auch ver?ndern. Das gilt auch f?r den query-string, und die POST-Methode (Query z.B. PHPSESSID=[hash], die Konstante SID enth?llt das ganze, inklusiv dem key).
Mit session_name kannst du ?brigens den aktuellen Namen der Session ablesen, oder auch ver?ndern, was auch n?tzlich ist (siehe http://www.php.net/manual/de/function.session-name.php).
EDIT: sag mir bescheid, ob es funktioniert.
mfg,
hr
p.s.: ich log mich jetzt aus. Kannst mir am besten eine PN schreiben.
Beitrag ge?ndert am 2.02.2006 03:26 von heavyraptor
OK, fettes Big THX an dich -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage