ERLEDIGT
JA
JA
ANTWORTEN
48
48
ZUGRIFFE
2416
2416
EMPFEHLEN
-
Hallo,
ich arbeite gerade fieberhaft an einen Login-System mit Session, nach dem Vorbild eines Tutorials von hier.
Nun bin ich aber mit meinem Latein am Ende.
Alle Datein funktionieren nis auf die Datei login.php. Die anderen sind ja auch nicht so schwer.
1. Weiß ich gar nicht warum nichts geht, wenn ich die Passwortabfrage starte läuft login.php durch und formular.php sagt falsche eingabe.
2. Hab ich mir die ID die über mysql_num_rows mal per echo anzeigen lassen, sie ist null, obwohl ich in php myadmin sehen kann das sie mindestens 1 ist. die Datenbank und der Zugriff funktionieren auch einwandfrei.
Ich weiß nun wirklich net woran es liegt ich hab schon mindesten 5 Stunden alle Tricks probiert die ich kenn vielleicht könnt ihr mir ja helfen.?
Hier mein login.php die x stehn für zeichen die net bekannt gebe
PHP-Code:<?php
session_start();
if ($_SERVER["HTTP_HOST"] == "127.0.0.1") {
$server = "localhost";
$datenbank = "xx-xxxxxxxx-xx";
$benutzer = "root";
$passwort = "";
}
else {
$server = "xxxxxxx.xxxxxxxxxxx.xxxxxxxxx.de";
$datenbank = "xx_xxxxxxxxxx_xx_2";
$benutzer = "ftpxxxxxx";
$passwort = "xxxxxxxxx";
}
$verbindung = mysql_connect($server, $benutzer, $passwort) or die("Keine Verbindung zur Datenbank!");
if(!mysql_select_db($datenbank, $verbindung)) {die("Datenbank konnte nicht ausgewählt werden!");}
$sql ="SELECT".
"ID, Benutzer, Vorname, Nachname, Kennwort".
"FROM".
"otb_infologin".
"WHERE".
"(Benutzer like '".$_REQUEST["coname"]."')AND".
"(Kennwort ='".md5 ($_REQUEST["pass"])."')";
$result =mysql_query ($sql);
if(mysql_num_rows($result) > 0)
}
$data=mysql_fetch_assoc ($result);
$_SESSION["user_id"] =$data["ID"];
$_SESSION["user_benutzer"] = $data["Benutzer"];
$_SESSION["user_vorname"] = $data["Vorname"];
$_SESSION["user_nachname"] = $data["Nachname"];
header ("Location: intern.php");
}
else
{
header ("Location: formular.php?fehler=1");
}
echo mysql_error();
?>
-
20.04.07 18:59 #2
Hi Alexbot,
Herzlich Willkommen auf tutorials.de!
Nach
ist die geschweifte Klammer falsch herum ... könnte das bereits der Fehler sein?PHP-Code:if(mysql_num_rows($result) > 0)
Liebe Grüße,
Mark.... bitte keine C4D-Fragen per PN ...
+++ OUT NOW for CINEMA4D: Al'em - Free Align Plugin + Shaderpack Vol 1 - Free Shaders + Roll-It v1.0 - Free Roll Plugin + Egg-Objekt - Free Egg Primitive +++
eggtion.net
-
Dein Query hat voll den falschen Syntax:
Probiers so:
//editPHP-Code:$sql = 'SELECT
`ID`, `Benutzer`, `Vorname`, `Nachname`, `Kennwort`
FROM
`otb_infologin`
WHERE
`Benutzer` = "'.$_POST['coname'].'"
AND
`Kennwort` = "'.md5($_POST['pass']).'"
LIMIT 1';
Ich würde es machen mit `Benutzer` = ..., da das genauer ist. Der Name sollte ja eindeutig sein.
Das Limit 1 am Ende kannst du rausnehmen, wenn es jeden Benutzernamen mehrmals geben darf
Und du schreibst folgendes so:
$result = mysql_query ($sql)
lasse die Leerzeichen wech:
$result = mysql_query($sql);
Der Rest ist korrekt
//edit2
ja ok, das eine da. Mit der geschweiften Klammer. Musste mal gucken, wo die richtig beendet wirdGeändert von Kalma (20.04.07 um 20:49 Uhr) Grund: Query eingerückt
Nein, ich bin kein Programmier-könig. Aber Spaß macht es trotzdem!
-
20.04.07 21:03 #4
Muss Kalma da mal widersprechen.
Die Syntax des Queries ist in Ordnung. Auch Like könnte man nutzen, da es syntaktisch genau wie = arbeitet, solange keine WildCards verwendet werden. (Eben _ bzw. %)
Die Verkettung von $sql ist zwar nicht notwendig, kann man aber durchaus trotzdem benutzen. Es ist also kein Fehler, sondern eine reine Formsache.
Allerdings fehlen mir da einige Leerzeichen bei der Verkettung:
PHP-Code:$sql ="SELECT".
"ID, Benutzer, Vorname, Nachname, Kennwort".
"FROM".
"otb_infologin".
"WHERE".
"(Benutzer like '".$_REQUEST["coname"]."')AND".
"(Kennwort ='".md5 ($_REQUEST["pass"])."')";
# Ausgabe:
SELECTID, Benutzer, Vorname, Nachname, KenntwortFROMotb_infologinWHERE # usw.
Ansonsten mal schön mysql_error() benutzen bzw. ggf. error_reporting() hochstellen.KIDS Kinderbetreuungsdienst
Xing
"When you play the game of thrones, you win or you die. There is no middle ground."
by Cersei Lannister in "A Game Of Thrones"
-
Aber ist eigentlich doch schreibarbeit
Ich kenns so wie von mir genannt.. Probierne kann ja nicht schaden :PNein, ich bin kein Programmier-könig. Aber Spaß macht es trotzdem!
-
20.04.07 21:34 #6
Ich würde sagen, es ist einfach eine Frage des Stils, genauso wie bei den geschweiften Klammern:
Alle syntaktisch korrekt, aber alle verschiedene Stile sozusagen. Alles eine Frage des Geschmacks würde ich sagen und wie man es persönlich vorzieht bzw. übersichtlicher empfindet...PHP-Code:if(xxx) {
# do sth
}
if(xxx)
{
#do sth
}
if(xxx)
{
#do sth
}
Alles natürlich auf eigene Projekte bezogen... Bei größeren Projekten sollte man sich natürlich an die Richtlinien halten bzw. an die vorgegebenen Dinge
KIDS Kinderbetreuungsdienst
Xing
"When you play the game of thrones, you win or you die. There is no middle ground."
by Cersei Lannister in "A Game Of Thrones"
-
Danke für eure Antworten.
Aber funktionieren tut es trozdem nicht.
In den Kommentaren, die jeweils unter den echos stehen, seht ihr die Ausgabe des jeweiligen Echos.
Der Fehler tritt meiner Meinung nach auf weil php die IF-Schleife unten nicht aufrufen kann, da $hollid =0 ist, was aber nicht sein dürfte, da mindestens ein Eintrag in der Datenbank ist und ID mit Not Null definiert ist. so kann das Programm ja nur die ELSE - Anweisung ausführen und im formular.php schreiben ungültiger Login.
Also irgendein Bock ist darin und ich weiß nicht wie ich den daraus bekomme.
Unter mysql_error() gibt es hierbei keine Meldung.
Bitte Versucht weiter mir zu helfen
lieber Gruß Alex
@Felix Jacobi, Danke das mit den Freizeichen war auch son Ding das ich übersehen hatte sieht jetzt ja ganz gut aus. Danke , und die Klammer bei der IF-Schleife hab ich ausversehen hier so gesetzt im script war die richtig rum.
PHP-Code:$sql ="SELECT ".
"ID, Benutzer, Vorname, Nachname ".
"FROM ".
"otb_infologin ".
"WHERE ".
"(Benutzer = '".$_REQUEST["coname"]."') AND ".
"(Kennwort = '".md5 ($_REQUEST["pass"])."')";
echo $sql;
//SELECT ID, Benutzer, Vorname, Nachname FROM otb_infologin WHERE (Benutzer = '') AND (Kennwort = 'd41d8cd98f00b204e9800998ecf8427e')
$result =mysql_query($sql);
echo $result;
//Resource id #3
$hollid=mysql_num_rows($result);
echo $hollid;
//0
if($hollid > 0)
{
$data=mysql_fetch_assoc($result);
$_SESSION["user_id"] =$data["ID"];
$_SESSION["user_benutzer"] = $data["Benutzer"];
$_SESSION["user_vorname"] = $data["Vorname"];
$_SESSION["user_nachname"] = $data["Nachname"];
header ("Location: intern.php");
}
else
{
header ("Location: formular.php?fehler=1");
}
echo mysql_error();
?>
-
Kann man mysql error so anwenden?
Mach doch mal so:
PHP-Code:$result = mysql_query($sql) or die(mysql_error());
Nein, ich bin kein Programmier-könig. Aber Spaß macht es trotzdem!
-
@Kalma
hab das so gemacht wie du sagst, trotzdem bekomm ich nur die echos und kein error, also scheint da an der query abfrage ja nix zu sein.
Aber könnt ihr mir nicht vielleicht sagen, woran es liegt das bei der mysql_num_rows abfrage der wert null ist statt 1 wie er sein sollte?
gruß alexNichts ist so wie es Scheint!
http://www.skullbook.de
-
@Kalma: Jepp genau so

@all
Und dann noch nen Tipp, an alle die Login-Systeme erstellen wollen, vergesst nicht, eine $_SESSION mit einem User-eigenen Code zu übergeben, der sich bei jedem Loginversuch ändert, denn damit könnt ihr dies dann etwas.
Die Zahl 123456789 könnt ihr entweder selbst verändern oder durch ein Random automatisch festlegen lassen.PHP-Code:if($_SESSION['code'] == NULL){
$_SESSION['code'] = md5(123456789+time());
$smarty->assign("code", $_SESSION['code']);
}else{
$smarty->assign("code", $_SESSION['code']);
}
Den SESSION-Code übergebt ihr einfach noch in dem Formular mit einem HIDDEN-Feld, welches ja hoffentlich auf POST eingestellt ist.
Dann überprüft ihr, ob die $_SESSION[code] und die $_POST['code'] den selben Inhalt haben. Wenn ja, dann wertet ihr die die restlichen Formular Daten aus, wenn nein, dann könnt ihr gleich eine Fehlermeldung zurückgeben, da der User (oder warschein Bot) verwendete nicht das eigentliche Loginformular.
Direkt nach dem Auswerten könnt ihr die $_SESSION['code'] wieder vernichten, so dass wenn die Zugangsdaten falsch waren, der User sofort einen neuen Code erhält.
Dies machst du mit:
Dabei ist aber noch zu beachten, dass du die Session nur innerhalb eine Subdomain nutzen kannst. Also die $_SESSION['code'] unter www.deinedomain.de vergeben und unter login.deinedomain.de auswerten geht leider nicht.PHP-Code:unset($_SESSION['code']);
Gruß Matze202.
Hi @alexbot,
Der wert ist nur NULL, wenn er keinen passenden Eintrag gefunden hat.
Gruß Matze202.
-
@matze
das versteh ich ja aber er ist auch null wen er einen passenden eintrag gefunden haben sollte. ich weiß net irgedwas stimmt da nicht und ich weiß net was.Nichts ist so wie es Scheint!
http://www.skullbook.de
-
@alexbot
Zwischen sollen und haben ist leider ein großer Unterscheid.
Dein Passwort hast du aber schon mit vor dem Speichern in der Datenbank mit md5 verschlüsselt oder?
Weil wenn dies nicht der fall sein sollte, dann ist es auch kein Wunder, dass er nichts findet, da du ja das Passwort bei der Abfrage mit md5 verschlüsselst.
Weshalb arbeitest du den eigentlich mit dem REQUEST?
Aus Sicherheitsgründen würde ich bei Logins nur mit POST und SESSION arbeiten, da diese Inhalte nicht einfach mit der Adresszeile weitergegeben bzw. eingegeben werden können.
Mit folgendem kannst du dir übrigens das gesamte Array ausgeben lassen:
Ich habe dir noch dein Script mal so überarbeitet, wie ich es verwenden würde:PHP-Code:echo nl2br(print_r($_POST, true));
Die HEADER dürften aber nicht funktionieren, solange du davor noch die ECHO´s hast, da diese an vorher keine andere Ausgabe an den Browser erlauben.PHP-Code:$sql ="SELECT ID, Benutzer, Vorname, Nachname FROM otb_infologin WHERE
Benutzer = '".$_POST['coname']."' AND
Kennwort = '".md5 ($_REQUEST['pass'])."' LIMIT 1";
echo $sql;
$result = mysql_query($sql) OR DIE (mysql_error());
echo $result;
$data=mysql_fetch_assoc($result);
if($data['ID'] != NULL)
{
$_SESSION["user_id"] = $data["ID"];
$_SESSION["user_benutzer"] = $data["Benutzer"];
$_SESSION["user_vorname"] = $data["Vorname"];
$_SESSION["user_nachname"] = $data["Nachname"];
header ("Location: intern.php");
}
else
{
header ("Location: formular.php?fehler=1");
}
?>
Gruß Matze202.Geändert von Matze202 (21.04.07 um 12:46 Uhr)
-
@Matze danke, ich glaub du hast grad meinen Fehler gefunden, denn genau diese md5 verschlüsselung hab ich nicht vorgenommen, sondern das passwort so wie auch die anderen benutzer information einfach in phpmyadmin erstellt. kennst du einen methode wie ich so auch das passwort md5 verschlüsseln kann ohne das direkt mit php zu machen?
gruß alexNichts ist so wie es Scheint!
http://www.skullbook.de
-
@alexbot,
du wirst leider das Passwort mit md5() verschlüsselt abspeichern müssen, dazu lässt du es dir einmal anzeigen:
dann trägst du es in die Datenbank ein und schon kannst du das verschlüsselte Passwort überprüfen.PHP-Code:echo md5('deinpasswort');
Vergiss aber nicht, bei der Registration auch das Passwort verschlüsselt einzutragen, sonst haben deine User genau das selbe Problem.
md5 ist übrigens eine Art der Verschlüsselung, welche nicht direkt entschlüsselt werden kann, sondern man nur im Verschlüsselten Modus vergleichen kann.
Gruß Matze202.
-
@ matze hab grad gefunden wie ich die md5 auch in phpmyadmin hinbekomme
Kann ich denn die Funtion des Feldes Kennwort denn schon im vorhinein auf md5 stellen oder geht das nur wenn ich ne neue Zeile zu tabelle hinzufügeNichts ist so wie es Scheint!
http://www.skullbook.de
Ähnliche Themen
-
[PHP/mySQL] Login-System mit Sessions
Von xytrax im Forum PHPAntworten: 4Letzter Beitrag: 03.05.07, 22:34 -
Login System Mysql
Von dandre im Forum PHPAntworten: 2Letzter Beitrag: 14.04.07, 14:57 -
Mysql fehler im login system
Von LiVe im Forum PHPAntworten: 2Letzter Beitrag: 18.09.05, 13:23 -
Frage zu [PHP/mySQL] Login-System mit Sessions
Von EchseKiuta im Forum PHPAntworten: 9Letzter Beitrag: 01.09.04, 17:41





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren