1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Loginsystem mit PHP ???

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von Applefan88, 02.11.06.

  1. Applefan88

    Applefan88 Gast

    Hallo Apfeltalker,
    ich habe folgendes ??? Problem:
    Ich habe ein Loginsystem mit PHP gebastelt was auf eine simple MySQL Datenbank zugreift.
    Der Witz an der Sache unter zweien meiner Rechner funktioniert es wunderbar nur auf allen anderen nicht!
    Da lädt er die Seite einfach neu.???
    Hier der Code:

    Code:
    <?php
    session_start();
    
    if (isset($_POST['userid']) && isset($_POST['password'])) {
       
        $username = $_POST['userid'];
        $password = $_POST['password'];
    
        $db_conn = @new mysqli('localhost', 'root', '', 'rss');
    
        if (mysqli_connect_errno()) {
            echo 'Verbindungsaubau zur Datenbank fehlgeschlagen: ' . mysqli_connect_error();
            exit();
        }
    
        $query = 'select * from user '
         . "where user ='$username' "
         . " and pass= md5('$password')";
    
    
        $result = $db_conn->query($query);
        if ($result->num_rows > 0) {
           
            $_SESSION['valid_user'] = $userid;
            header("Location: rss-reader.php");
        }
        $db_conn->close();
    }
    else {
    
    }
     ?>
    
    <html>
    <head>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <title>Anmeldung</title>
    <link rel="stylesheet" type="text/css" href="Bilder/style.css" />
    <link href="Bilder/favicon.ico" rel="shortcut icon">
    <style type="text/css">
    <!--
    a:link{color:#CCFF99;}
    -->
    </style>
    </head>
    
    <body background="Bilder/btn2.gif">
    <form method="post">
    <p>
    <table border="0" cellspacing="0" cellpadding="1" align="center">
    <tr><td colspan="4"><center><img src="Bilder/newspaper.jpg"></center></td></tr>
    <tr><td colspan="4">&nbsp;</td></tr>
    <tr><td colspan="4" background="Bilder/site.gif" width="2"></td></tr>
    <tr><td rowspan="8" background="Bilder/site.gif"></td></tr>
    <tr><td colspan="2"><img src="Bilder/header.jpg" /></td>
    <td rowspan="8" background="Bilder/site.gif"></tr>
    <tr><td  bgcolor="#343434" height="15px" colspan="2"></td></tr>
    <tr><td bgcolor="#343434"><font><b><center>Benutzername:</b></center></font></td>
    <td><center><input type="text" name="userid" size="50" accesskey="u" /></center></td></tr>
    <tr><td bgcolor="#343434"><font><b><center>Password:</center></b></font></td>
    <td><center><input type="password" name="password" size="50" accesskey="p" /></center></td></tr>
    <tr><td colspan="2" bgcolor="#343434"><center><input type="submit" value="Login" /></center></td></tr>
    <tr><td colspan="2" background="Bilder/site.gif"></td></tr>
    </table></p>
    
    
    </body>
    
    </html>
    
    Wenn mir da einer weiterhelfen könnte wäre das super!
     
  2. Waldgeist

    Waldgeist Tokyo Rose

    Dabei seit:
    13.10.06
    Beiträge:
    69
    Cookies aktiviert?
    Er lädt einfach neu, heißt? Die gleiche Seite?
    Oder die rss-reader.php (header("Location: rss-reader.php");) [oder ist das dei gleiche]?
    Ein paar mehr Informationen wären noch gut.
    Alles auf einem Rechner liegend und die anderen greifen darauf zu?

    Meine erste Vermutung wäre, da du ja davon sprichst, dass er die Seite einfach neu lädt, dass er ohne die Sessions zu speichern weitergeleitet wird (auf rss-reader.php).
    Das ganze kannst du wunderbar testen, indem du das header("Location ..."); auskommentierst und statdessen eine Ausgabe wie diese erzeugst:
    echo "es kommt was!"; exit;
    Wenn die Ausgabe kommt, weißt du, dass es an dem header liegt und somit vermutlich an der Session.

    Grüße Jonas
     
  3. Applefan88

    Applefan88 Gast

    also

    das war die index.php Seite, wenn man die Daten abschickt, lädt er einfach die index.php neu.
    Wenn die Logindaten falsch sind auch einfach immer, und ich weiß einfach nicht wo der Fehler ist??? :-c

    wenn ich statt der Session einen echo befehlt einsetze, lädt er den eigentlich schon und zeigt den auch an
     
  4. Applefan88

    Applefan88 Gast

    und auf einem anderen linux system habe ich das ganze auch getestet da funzt es auch nicht und noch nicht einmal die sql kommandos wie Insert oder so, die Felder bleiben in der datenbank einfach leer, der Rechner legt dann einfach leere Daten an? So einen Bullshit habe ich bis eben auch noch nicht gesehen. Auf den Windows Rechnern läuft es wunderbar aber auf Ubuntu oder Macintosh nada! Langsam bin ich mit den Nerven am Ende ;)
     
  5. Waldgeist

    Waldgeist Tokyo Rose

    Dabei seit:
    13.10.06
    Beiträge:
    69
    Ein paar mehr Informationen wären trotzdem noch gut.
    Alles auf einem Rechner liegend und die anderen greifen darauf zu?

    Wir wissen also, dass die oben angegebene Datei die index.php ist.
    Und wenn alles klappt, dann leitest du auf die rss-reader.php weiter...?
    (Kann ja nicht anders sein, aber so ist es klarer.)

    Nutzt du auf allen Rechnern den selben Browser?
    F5 (neuladen) oder was auch immer das bei den Browsern ist ausprobiert?
    Cache geleert?

    Ich weiß nicht ob das eine Rolle spielen könnte, aber ich mache es immer:
    <form action="index.php" method="post"> (oder wenn aktiviert auch $PHP_SELF)

    Ein weiterer Fehler der gerne mal auftritt und den man wenn er auftritt ewig nicht merkt...
    Richtige Datei? Oder vllt. in eine kopie gespeichert?
    Prüf das am besten mit einer einfachen Ausgabe im vorhandenen loginscript:
    Code:
    <form method="post">
    Hallo...
    <p>
    Soll noch etwas in den else Bereich rein?
     
  6. Applefan88

    Applefan88 Gast

    Ja, es ist so:

    Ich habe eine index.php Datei die oben zu sehen ist. Diese lag auf einem Windows XP Rechner, nun wollte ich die fertigen Scripte zu Strato hochladen. Aber dort stellte ich fest, dass mein Login Script (index.php) nicht weiterleitet auf meine rss-reader.php.
    Also habe ich Stunden nach Fehlern gesucht aber keine gefunden.

    Ich nutze Firefox neueste Version, und lade die Seiten immer neu. Und das mit der Kopie :-D ist leider auch nicht der Fehler.

    Woran kann es liegen die Datenbank ist MySQL 5.0. irgendwas und der Rest ist PHP5.

    Und wenn ich das Script wieder auf meinen Windows Rechner ziehe läuft es wieder wunderbar.
     
  7. Applefan88

    Applefan88 Gast

    Oooohh

    Ich habe folgendes gelöscht in der index.php oben session_start();
    und dann hat er wenn ich statt header blabla einen Echo Wert eingegeben habe ausgegeben.
    Aber mit Session_start(); funzt selbst das nicht!
     
  8. Waldgeist

    Waldgeist Tokyo Rose

    Dabei seit:
    13.10.06
    Beiträge:
    69
    Also auf dem Strato Space läuft es nicht? Auch nicht von den Windows rechnern?
    Oder habe ich das falsch verstanden?
    Aber Local (auf dem Windows Rechner) geht es?
     
  9. Applefan88

    Applefan88 Gast

    genau
    er kann einfach die Session nicht erstellen, denn ich habe in der rss-reader.php eine if Schleife wenn die Session nicht true ist, wird er mit header location wieder auf index.php zurückgeleitet.
    Wenn ich das mit einer anderen Fehlermeldung programmiere, dann zeigt er die an.

    Aber warum kann er unter jeglicher Linux Art keine Sessions registrieren???
     
  10. Applefan88

    Applefan88 Gast

    Jetzt Habe Ich Es!!! Juchuu

    Also ich habe in der Index.php einfach bei der Sessionerstellung $_SESSION['valid_user'] == $userid; auf == TRUE umgeändert, jetzt läuft der Login wunderbar.
    Aber trotzdem Vielen Dank!:-D
     
  11. Waldgeist

    Waldgeist Tokyo Rose

    Dabei seit:
    13.10.06
    Beiträge:
    69
    kann er. Immerhin basieren fast alle Server auf Linux.
    Aber ich hatte schon öfters Probleme mit Sessions.
    Unter Windows allerdings.
    Dann habe ich ein bisschen damit rumgespielt und dann ging es irgend wann.
    Nach der Weiterleitung zufolge liegen die index und die rss... PHP-Datein im selben Ordner?

    Mein Tipp wäre,
    erstell eine neue Datei, z.B: test.php und füg den folgenden Code ein:
    Code:
    <?PHP
    session_register();
    echo session_id();
    echo $_SESSION[test];
    $_SESSION[test]="123";
    ?>
    
    Die Datei lädst du auf den Server und lädst einfach mal die Seite neu.
     
  12. Waldgeist

    Waldgeist Tokyo Rose

    Dabei seit:
    13.10.06
    Beiträge:
    69
    bestens :).
    Aber wie gesagt (in dem Post hier drüber),
    manchmal muss man einfach rumspielen.
    Mit Sessions habe ich auch schon viel Zeit in den Wind gehängt.
     
  13. Applefan88

    Applefan88 Gast

    Mittlerweile habe ich das größte Problem an der Sache gefunden, warum meine Scripte bei Linux nicht richtig laufen, denn dort muss ich ja den Apache2 verwenden, un der hat nun mal als Standart Register_Globals auf Off.
    Ganz im Gegensatz zu den Xampp und lampp Angelegenheiten. ;)

    Aber darauf muss man doch erstmal kommen.

    Ich finde, da hätte man von Zend eine eigene Fehlermeldung einbauen können.
     
  14. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Na ja, register_globals ist schon seit PHP4.1.irgendwas »von Hause« aus abgeschaltet. Man hat nämlich schnell einsehen müssen, dass man mit index.php?auth=1 bei 50 Prozent aller Anfängerseiten einbrechen konnte ;)

    Für Deine Authentifizierung würde ich Dir folgenden Weg empfehlen (der ist dann unabhängig von PHP-Sessions, Cookies und enable_trans_sid):
    Code:
    /*
        $Id: auth.inc.php,v 1.3 2003/08/27 12:05:19 hendrik Exp $
    */
    	function updateUser ($userID) {
    	
    		if ($GLOBALS ['connID']) {
    		
    			$sql		=	"UPDATE users ";
    			$sql		.=	"SET last_access=NOW() ";
    			$sql		.=	sprintf ("WHERE userID='%u' LIMIT 1", $userID);
    			
    			if ($res = mysql_query ($sql, $GLOBALS ['connID'])) {
    				return TRUE;
    			}
    		}
    		
    		return FALSE;
    	}
    	
    	function validateUser ($username, $pass) {
    	
    		if ($GLOBALS ['connID']) {
    	
    			$sql	=	"SELECT *, UNIX_TIMESTAMP(last_access) AS stamp_last_access ";
    			$sql	.=	"FROM users ";
    			$sql	.=	sprintf ("WHERE username='%s' ", strtolower (mysql_real_escape_string ($username)));
    			$sql	.=	sprintf ("AND pass='%s' LIMIT 1", mysql_real_escape_string ($pass));
    			
    			if ($res = mysql_query ($sql, $GLOBALS ['connID'])) {
    				if (mysql_num_rows ($res) > 0) {
    					$_detail	=	mysql_fetch_assoc ($res);
    					if ($_detail ['stamp_last_access'] < _TIME_OUT_) {
    						if (updateUser ($_detail ['userID'])) {
    							return TRUE;
    						}
    					}
    				}
    			}
    		}
    		
    		return FALSE;
    	}
    		
    	
    	if (!validateUser ($_SERVER ['PHP_AUTH_USER'], $_SERVER ['PHP_AUTH_PW'])) {
    	
    		header ('WWW-Authenticate: Basic realm="DuKommstHierNichRein"');
    		header ('HTTP/1.0 401 Unauthorized');
    		echo "Bitte nennen Sie Benutzername und Passwort.";
    		exit ();
    	}
    
    Zusatz: Die Konstante 'TIME_OUT' kann so definieret sein:
    Code:
    define ('_TIME_OUT_', time () + (15 * 60));
    
    Damit fliegen die Leute nach einiger Zeit einfach raus.

    Diese Datei speicherst Du unter dem Namen 'auth.inc.php' ab und bindest Die einfach als erstes nach der Verbindungsaufnahme zur Datenbank in Deine 'index.php' ein.

    Voraussetzung ist, dass Du eine Tabelle für die erlaubten Benutzer hast. Diese Tabelle heißt im Beispiel 'users' und hat diese Struktur (für MySQL ab 4.1.12):
    Code:
    CREATE TABLE `users` (
      `userID` smallint(5) unsigned NOT NULL auto_increment,
      `username` varchar(24) NOT NULL default '',
      `pass` varchar(12) NOT NULL default '',
      `note` varchar(127) NOT NULL default '',
      `last_access` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      PRIMARY KEY  (`userID`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    Richtig sicher ist die Speicherung nicht, denn die Passwörter werden im Klartext gespeichert. Wenn's um Geld geht, müsstest Du die Passwörter einwegverschlüsseln und die Ergebnisse vergleichen.
     
  15. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.255
    Es ist ein Skandal, daß es diese "Option" überhaupt noch gibt. Diese "Funktionalität" war und ist für sehr viele Einbrüche auf PHP Seiten veranwortlich. Ergo, auf gar keinen Fall verwenden.
     
  16. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556

Diese Seite empfehlen