kostenloser Webspace werbefrei: lima-city


Problem mit ner Funktion

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    k****8

    Also, da anscheinend auf einmal kein Tag mehr vergeht, wo ich keinen Fehler habe, poste ich mal :nosmile:

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    k****8


    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&uuml;cksetzen">
    		  </p>
    		</form>
    		&copy; 2006 by Kai&trade;
    		<?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("<", "&lt;", $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
  5. 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
  6. Autor dieses Themas

    k****8


    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 :confused:
  7. 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
  8. Autor dieses Themas

    k****8

    Hab die logout-Funktion noch garnicht integriert, und ersetze die Session immer von Hand in phpMyAdmin mit 'NULL' :nosmile:
  9. 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
  10. Autor dieses Themas

    k****8

    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.
  11. 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
  12. Autor dieses Themas

    k****8


    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
    Aber ich komme noch immer mit leerer Session (also ausgeloggt) auf die Antwortseite
  13. 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
  14. Autor dieses Themas

    k****8


    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 :eek:
  15. 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
  16. Autor dieses Themas

    k****8


    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?
  17. Autor dieses Themas

    k****8



    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
  18. 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
  19. Autor dieses Themas

    k****8


    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
  20. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!