1Danke
ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
474
474
EMPFEHLEN
-
Hallo an alle

...
Und wieder versuche ich PhP erfolglos zu programmieren
Ich habe aus der folgenden Seite einen Script für das login gedownloaded.
http://www.php-einfach.de/tuts_php_l...teien.php#oben
Die eintragen.php Datei schreibt jedoch die Registrierungsdaten in einer *.txt Datei und die login.php liest diese aus der *.txt Datei aus.
Wie kann ich denn Code der login.php Datei umschreiben damit es die Daten aus der Datenbank ausliehst und immer noch das selbe bewirkt, wie das Original?
Hier der Code:
login.php
In der Datenbank habe ich die Felder: ID, Benutzername und Passwort.PHP-Code:session_start();
$username = $_POST["username"];
$passwort = $_POST["password"];
$passwort = md5($passwort);
$log=0;
$userdatei = fopen ("user.txt","r");
while (!feof($userdatei))
{
$zeile = fgets($userdatei,500);
$userdata = explode("|", $zeile);
if ($userdata[0]==$username and $passwort==trim($userdata[1]))
{
$_SESSION['username'] = $username;
echo "Login war erfolgreich. <a href=\"geheim.php\" target=\"IFRAME\">Geschützer Bereich</a>";
$log = 1;
}
}
fclose($userdatei);
if ($log==0)
{
echo "Zugriff verweigert <a href=\"login.html\">Zurück</a>";
}
Ich denke ich benötige nicht mehr. Oder?
Ich wäre natürlich über Glücklich und Dankbar wen mir jemand helfen könnte.
Denn ich habe 2 Tage an dieser Datei gesessen und mir sind die Ideen ausgegangen.
Geändert von smyle (25.06.09 um 16:03 Uhr)
-
Mach nen Select auf die Datenbank mit dem du dir Benutzername und Passwort holst und vergleiche halt statt den Strings aus dem Array von der Textdatei die Ergebnisse im Result Set.
Und die Datenbankfelder brauchst du schon wenn du die Sachen auslesen willst:P
Das hier ist übrigens etwas suboptimal. Ich hatte mich mal in nem Forum als clan00|d4vid angemeldet. Bei solchen Nicknames würde dein Login nicht mehr funktionieren.Code :1
userdata = explode("|", $zeile);Hallo Nuray!
-
Dieses Script kannst du für die DB nicht nutzen.
Zudem empfehle ich dir vielleicht noch einige zusätzliche Spalten, wie User_Agent, letzte Login, durch vernünftiges Login beendet und und und.
Für einfache Sachen ist es aber völlig ausreichend.
Damit es nicht zu scher wird. Also ich würde es in Etwa so machen:
Einloggen:
PHP-Code:<form action="login.php" method="post">
<table border="0">
<tr>
<td>Name:</td>
<td><input type="text" name="Nickname" size="20" value=""></td>
</tr>
<tr>
<td>Kennwort:</td>
<td><input type="password" name="Kennwort" size="20" value=""></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Login"> </td>
</tr>
</table>
</form>
zur Login.php
Auf jeder Seite sollte am Anfang folgendes stehen:PHP-Code:$Nickname = trim($_POST["Nickname"]);
// Eingegebene Date prüfen, ob diese in der Datenbank enthalten sind
$sql = "SELECT ".
"Id, Nickname, Kennwort".
"FROM ".
"benutzerdaten ".
"WHERE ".
// mysql_escape_string um SQL-Injection zu vermeiden (ungeklärt)
"(Nickname like '".$Nickname."') AND ".
"(Kennwort = '".md5(trim($_POST["Kennwort"]))."')";
$result = mysql_query ($sql);
if (mysql_num_rows ($result) > 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array ($result);
#####################_____Sessionvariabeln definieren_____#######################
// Sessionvariablen erstellen und registrieren aus den Arrayelementen
$_SESSION["user_id"] = $data["Id"];
}
PHP-Code:<?php
if(!isset($_SESSION)) {
session_start();
}
if ((!isset ($_SESSION["user_id"]))) {
header ("Location: http://localhost/XXXX/index.php?session=1");
}
So sollte alles klappen, ich hab das mal schnell aus meinem Code raus gezogen, ich hab gleich Feierabend und hoff nicht zu viel oder zu wenig weg genommen
Gruß Steusi
Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
PHP-Code:$fehler = "dummer Tippfehler";
echo("Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!");
-
Ich habe den Code kopiert.
Und zwar habe ich eine login.html Datei, eine login.php Datei und eine Index.php Datei.
Wenn ich nun das Programm ausführe kommt diese Fehlermeldung:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programme\xampp\htdocs\Homepage\login.php on line 17
Deswegen habe ich den 3.Teil des Codes noch zu Oberst in die login.php Datei eingefügt. Die Fehlermeldung ist nicht mehr gekommen, jedoch kontrolliert er nicht ob man das richtige Passwort zum angegebenen Benutzernamen gehört, er leitet beim klicken des Login Button einfach weiter.
Meine Frage:
Sollte der Code nicht kontrolliert, ob man eingelegt ist und somit zu den "geschützten" Seiten weiter leiten?
Und dann noch eine blöde Frage: wie kann ich jemand bewerten?
Übrigens, vielen Dank für die Hilfe
Geändert von smyle (26.06.09 um 08:20 Uhr)
-
Bewerten?
Bei dem Beitrag unten links bei dem Smiley
So, jetzt noch mal ganz langsam:
Deine index.php muss folgendermaßen aussehen:
Dann geht es weiter zur login.php:PHP-Code:if(!isset($_SESSION)) {
session_start();
}
<form action="login.php" method="post">
<table border="0">
<tr>
<td>Name:</td>
<td><input type="text" name="Nickname" size="20" value=""></td>
</tr>
<tr>
<td>Kennwort:</td>
<td><input type="password" name="Kennwort" size="20" value=""></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Login"> </td>
</tr>
</table>
</form>
Wichtig die Daten in der DB müssen mittels md5() eingetragen werden!PHP-Code:if(!isset($_SESSION)) {
session_start();
}
// Datenbankverbindung aufbauen
require ("lib/dbconnect.inc.php");
$Nickname = trim($_POST["Nickname"]);
// Eingegebene Date prüfen, ob diese in der Datenbank enthalten sind
$sql = "SELECT ".
"Id, Nickname, Kennwort ".
"FROM ".
"benutzerdaten ".
"WHERE ".
// mysql_escape_string um SQL-Injection zu vermeiden (ungeklärt)
"(Nickname like '".$Nickname."') AND ".
"(Kennwort = '".md5(trim($_POST["Kennwort"]))."')";
$result = mysql_query ($sql);
if (mysql_num_rows ($result) > 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array ($result);
#####################_____Sessionvariabeln definieren_____#######################
// Sessionvariablen erstellen und registrieren aus den Arrayelementen
$_SESSION["user_id"] = $data["Id"];
$_SESSION["user_nickname"] = $data["Nickname"];
#######################_____Login-Daten speichern_____###########################
// Logfile mit Informationen füllen
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$domain = explode(".", $host); $domain_array = count($domain)-2;
$msg = "Nickname: ". $_SESSION["user_nickname"] . " | ";
$msg .= "Besuch: " . date("d.m.Y H:i") . " Uhr | ";
$msg .= "IP-Adresse: " . $_SERVER['REMOTE_ADDR'] . " | ";
$msg .= "Hostname: " . gethostbyaddr($_SERVER['REMOTE_ADDR']) . " | ";
$msg .= "User_Agend: ". $_SERVER['HTTP_USER_AGENT'] . "\n";
$Dateiname = "lib/log/logfile.txt";
$Datei = fOpen($Dateiname,"a+");
fPuts($Datei,$msg);
fClose($Datei);
###########################_____Weiterleitung_____###############################
// Userdaten in der DB enthalten, weiterleitung zur Hauptseite
header ("Location: WOHIN_AUCH_IMMER.php");
} else {
// Falsche Userdateneingabe, erneuter Aufruf des Formular
header ("Location: index.php?fehler=1");
}
Natürlich gibt es viel was man schicker machen kann, ist ja auch nur ein Auszug vom Script sollte aber wunderbar funktionieren, wenn man es auch sein Script etwas anpasst.
Ich füg die 3 erforderlichen Datein einfach mal an. Wirst schon das passende finden, klar sieht es mit Klassen schöner aus. Aber damals hat mir das auch gereicht!Geändert von Steusi (26.06.09 um 09:31 Uhr)
Gruß Steusi
Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
PHP-Code:$fehler = "dummer Tippfehler";
echo("Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!");
-
Du hasst mir sehr geholfen
Denn…
…es funktioniert bis auf die Verbindung mit der Datenbank, glaube ich.
Denn ich habe extra ein neuer Benutzer erstellt und beim anmelden, statt mich zur nächsten Seite weiter zu leiten, komme ich immer wieder auf die index.php seit, egal ob ich das Passwort richtig oder falsch angegeben habe.
Deswegen denke ich dass die Verbindung zur DB nicht ganz stimmt.
Hier den Code den ich angepasst habe:
login.php
index.phpPHP-Code:if(!isset($_SESSION)) {
session_start();
}
include('inc.php');
$Nickname = trim($_POST["Nickname"]);
$pw = trim($_POST["Passwort"]);
// Eingegebene Date prüfen, ob diese in der Datenbank enthalten sind
$sql = "SELECT ".
"ID, Benutzername, Passwort ".
"FROM ".
"login ".
"WHERE ".
// mysql_escape_string um SQL-Injection zu vermeiden (ungeklärt)
"(Benutzername like '".$Nickname."') AND ".
"(Passwort = '".md5($pw)."')";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array($result);
#####################_____Sessionvariabeln definieren_____#######################
// Sessionvariablen erstellen und registrieren aus den Arrayelementen
$_SESSION["user_id"] = $data["ID"];
$_SESSION["user_nickname"] = $data["Benutzername"];
#######################_____Login-Daten speichern_____###########################
// Logfile mit Informationen füllen
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$domain = explode(".", $host); $domain_array = count($domain)-2;
$msg = "Benutzername: ". $_SESSION["user_nickname"] . " | ";
$msg .= "Besuch: " . date("d.m.Y H:i") . " Uhr | ";
$msg .= "IP-Adresse: " . $_SERVER['REMOTE_ADDR'] . " | ";
$msg .= "Hostname: " . gethostbyaddr($_SERVER['REMOTE_ADDR']) . " | ";
$msg .= "User_Agend: ". $_SERVER['HTTP_USER_AGENT'] . "\n";
$Dateiname = "log/logfile.txt";
$Datei = fOpen($Dateiname,"a+");
fPuts($Datei,$msg);
fClose($Datei);
###########################_____Weiterleitung_____###############################
// Userdaten in der DB enthalten, weiterleitung zur Hauptseite
header ("Location: home.php");
} else {
// Falsche Userdateneingabe, erneuter Aufruf des Formular
header ("Location: index.php");
}
PHP-Code:if(!isset($_SESSION)) {
session_start();
}
Und den Code meiner Datenbankverbindung:HTML-Code:<form action="login.php" method="post"> <table border="0"> <tr> <td>Name:</td> <td><input type="text" name="Nickname" size="20" value=""></td> </tr> <tr> <td>Kennwort:</td> <td><input type="password" name="Kennwort" size="20" value=""></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="Login"> </td> </tr> </table> </form>
inc.php
Da es nicht funktionierte habe ich eine andere Datei erstellt um zu sehen ob sich die Datenbank überhaupt verbindet und die Daten herausgelesen werden können.PHP-Code:$mysqlhost="localhost";
$mysqluser="dbbenutzer";
$mysqlpwd="passwort";
$mysqldb="dbname";
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die
("Verbindungsversuch fehlgeschlagen");
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht
waehlen.");
Select.php
PHP-Code:echo "Erster Versuch <br>";
require("inc.php");
mysql_query($conn);
$sql = "SELECT * FROM `login`";
$ausgabe = mysql_query($sql) or die (mysql_error());
$erg = mysql_db_query($mysqldb,$connection);
$anzahl = mysql_num_rows($ausgabe);
echo $ausgabe;
echo "<br>";
echo mysql_error();
echo "<br>";
echo "Anzahl der Datensätze: $anzahl";
echo "<br>";
Leider habe ich beim ausführen der Select Datei diese Meldungen bekommen:PHP-Code:echo "Zweiter Versuch";
//Inhalt der inc.php
$sql = "SELECT * FROM `login`";
$adressen_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");
$anzahl = mysql_num_rows($adressen_query);
echo "Anzahl der Datensätze: $anzahl";
echo "<br>";
echo $adressen_query;
echo "<br>";
echo mysql_error();
Erster Versuch:
Resource id #4
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id #3' at line 1
Anzahl der Datensätze: 2
Zweiter Versuch:
Anzahl der Datensätze: 2
Resource id #5
Beim ersten Versuch habe ich die inc.php Datei durch include und require eingebunden.
Beim zweiten Versuch habe ich den Code direkt in der Select Datei hineingeschrieben.
Da die Datensätze angezeigt werden, frage ich mich:
Was mache ich Falsch?
Denn es scheint als würde die Datenbank verbunden werden.
-
Das Problem mit der Select.php Datei konnte ich lösen. ich hatte den Code falsch verwendet.
Aber das andere Problem leider immernoch nicht
-
22.03.10 11:51 #8Money Tutorials.de Gastzugang
Hallo,
Ich habe den selben Code aus folgender Seite und bekomme diesen Fehler: http://www.php-resource.de/tutorials...nd-mySQL,1.htm
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\Programme\xampp\htdocs\Ordner\Ordner\Login\function.inc.php on line 27
Auf der Zeile 27 befindet sichund das ist der ganze CodePHP-Code:return(mysql_num_rows($result)==1);
Was ist mein Fehler?PHP-Code:function logged_in()
{
$sql="SELECT `ID` FROM `benutzer` WHERE `Session`='".session_id()."' LIMIT 1";
$result=mysql_query($sql);
return(mysql_num_rows($result)==1);
}
Übrigens ich arbeite mit der neuen Version von Xampp Lite
Ähnliche Themen
-
Nach Login wieder Login, Treiberfehler ?
Von Crazy_down im Forum Linux & UnixAntworten: 4Letzter Beitrag: 11.02.08, 00:09 -
Problem bei Eigenem Login Bereich zu Typo3 Login bereich
Von Gunah im Forum PHPAntworten: 2Letzter Beitrag: 08.10.07, 11:38 -
Seite weiterleiten mit Login-Daten -> automatisches Login
Von tinella im Forum PHPAntworten: 2Letzter Beitrag: 04.09.07, 23:19 -
Login Daten per Cookie speichern und automatisch bei erneutem login aufüllen
Von melistik im Forum PHPAntworten: 1Letzter Beitrag: 29.01.05, 12:11 -
Session Fehler im Login Script, login klappt nur bei gelöschten Sessions
Von melistik im Forum PHPAntworten: 3Letzter Beitrag: 12.01.05, 21:14





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren