Login-System mit PHP und MYSQL

bitte hier nochmal der quelltext:
PHP:
 $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 ".
		"FROM ".
		"otb_infologin ".
		"WHERE ".
		"(Benutzer = '".$_POST["coname"]."') AND ".
		"(Kennwort = '".md5 ($_REQUEST["pass"])."')".
		"LIMIT 1";
		
  $result =mysql_query($sql) or die(mysql_error()); 
  
  $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"); 
        }
 
Poste mal bitte noch, was bei folgendem Eintrag erscheint, nach dem du das Login-Formular abgesendet hast.

PHP:
echo nl2br(print_r($_POST, true));

und ändere das ab der 3. Zeile des oberen Textes bitte entlich mal wie folgt:
PHP:
  $sql ="SELECT ID, Benutzer, Vorname, Nachname FROM otb_infologin WHERE 
        Benutzer = '".$_POST["coname"]."' AND
        Kennwort = '".md5($_POST["pass"])."'
        LIMIT 1";

Somit sparst du bissel Serverleistung und vermeidest eventuelle Fehlerquellen.

Gruß Matze202.
 
Zuletzt bearbeitet:
@ Matze hier nochmal den Code in aktueller Version.
Vielleicht hat ja nochmal einer ne IDEE!
PHP:
$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 FROM otb_infologin WHERE
        Benutzer = '".mysql_real_escape_string($_POST["coname"])."' AND  
        Kennwort = '".mysql_real_escape_string(md5($_POST['pass']))."' LIMIT 1";
  $result =mysql_query($sql);
  $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"); 
        }
Wenn ich hinter der Query abfrage dierekt result als echo ausgeben lasse bekomme ich das: "Resource id #3" vielleicht kann damit ja jemand was anfangen.
Danke und Gruß Alex
 
Zuletzt bearbeitet:
@Felix Jacobi
Das über prüft ob ID ungleich null ist , habe das anstelle von mysql_num_rows eingesetzt.
Aber der Fehler liegt irgendwo vorher if kommt gar nicht dazu die ID zu prüfen weil die variable $data[ID] ander stelle immer lerr ist.
Gruß alex
 
Zieh mal bitte ein Backup mit Struktur von der Datenbank und poste hier den Bereich der Datei, welcher sich um diese Tabelle dreht.

Vielleicht gibts da noch irgend eine Abweichung.

Dann könntest du mal noch testen, wenn du mit den 2. eingetragenen Zugangsdaten dich versuchst einzuloggen und das Echo nach dem result drin hast, ob da eventuell "Resource id #1" erscheint.

Gruß Matze202.
 
@Matze was meinste mit Backup von der Strucktur? wie geht das?
wenn ich den anderen datensatzt teste steht auch : Resource id #3 da,
wenn ich gar keine Benutzer Daten eingebe übrigens auch.
gruß alex
 
Zuletzt bearbeitet:
@Matze was meinste mit Backup von der Strucktur? wie geht das?

Nimm den PHPmyAdmin und exportiere die Datenbank (aber bitte nicht gezipt oder sonst wie komprimiert), dann öffnest du diese mit einem Editor und kopierst alles raus, was die Tabelle otb_infologin betrifft.

Gut wäre es auch, wenn du da nicht nur die Struktur sondern auch die Daten mit exportierst und hier 2 Datensätze mit postest.

Gruß Matze202.
 
@Matze hier die gewünschten daten aus phpmyadmin. Icvh hoffe das es dir weiterhilft ich bin nämlich langsam echt ratlos.
PHP:
CREATE TABLE `otb_infologin` (
  `ID` int(11) NOT NULL auto_increment,
  `Benutzer` varchar(20) NOT NULL default '',
  `Vorname` varchar(20) NOT NULL default '',
  `Nachname` varchar(20) NOT NULL default '',
  `Kennwort` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`ID`)
) TYPE=MyISAM AUTO_INCREMENT=4 ;

#
# Daten für Tabelle `otb_infologin`
#

INSERT INTO `otb_infologin` VALUES (1, 'matt', 'Matt', 'Hart', '51dc30ddc473d43a6011');
INSERT INTO `otb_infologin` VALUES (3, 'jo', 'nils', 'harris', '8ff32489f92f33416694');
Vielen Dank Gruß Alex
 
Zuletzt bearbeitet:
ich vermute mal ganz stark, dass du hier:

`Kennwort` varchar(20) NOT NULL default '',

Die Anzahl der Zeichen zu knapp bemessen hast, da durch die Verschlüsselung mit md5() ein kurzes Wort oder paar wenige Zahlen sehr schnell über 20 Zeichen kommen.

Zudem habe ich mir mal die Anzahl der Zeichen deiner Passwörter durchgezählt und bin darauf gestoßen, dass diese genau 20 Zeichen lang sind. Daher ist mein Verdacht groß, dass diese nur auf 20 Zeichen von der Datenbank gekürzt wurden.

Mach einfach mal aus der 20 eine 50, oder wenn du auf nummer sicher gehen willst, eine 100 und dann dürfte es keine Probleme mehr geben.

Gruß Matze202.

EDIT: Vergiss aber nicht nochmal die verschlüsselten Passwörter nochmal in der Datenbank neu einzutragen.
 
Zurück