Login mit PHP und MySql

Zack

cookies vader
Hallo,
ich habe mir vor kurzem ein Loginsystem mit PHP geschrieben. Die Daten nehme ich aus einer MySql-Datenbank.

Die Login.php
PHP:
<?php

  if(isset($_POST['name']) and ($_POST['password']))
 {
  $name = $_POST['name'];
  $passwd = md5($_POST['password']);
 	$sql = "SELECT
            COUNT(*) as Anzahl
 		 FROM
			user
     WHERE
      name = '$name' AND password = '$passwd';";

 	$result = mysql_query($sql) OR die(mysql_error());

  	if (implode(mysql_fetch_assoc($result)))
  		{
		echo "<h2>eingelogt</h2>";
  		}
  	else
  		{
		echo "<h2>pech</h2>";
  		};
 }else{
	  echo "
  		<h2>Admin Login</h2>" .
	  		"<center>
		    	<form action=\"index.php?section=login\" method=\"post\">
      			<input type=\"text\" name=\"Name\" value=\"Name\">
      			<input type=\"password\" Name=\"password\" value=\"Password\">
      			<input type=\"submit\" name=\"login\" value=\" Einloggen \">
    			</form>" .
    		"</center>";
      }
?>

Zur Datenbank connecte ich am Anfang der Index-datei, ich arbeite mit sections.

Auszug der inde.php
PHP:
<?php
    error_reporting(E_ALL);
    session_start();

    include "inc/var.php";
    include "inc/config.php";
    include "inc/function.php";

// Zur MySQL connecten und DB selecten

	@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR
      die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
	mysql_select_db(MYSQL_DATABASE) OR
      die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());

    // Session starten wenn ?section=login geöffnet wurde
    if(isset($_GET['section']) AND ("login" == $_GET['section'])) {
        session_start();
    }
........................    
?>
Leider funktioniert der Scribt nicht und ich habe auch keine Ahnung woran es liegt.

So habe ich mir das gedacht:
Ich verweise mit dem Form auf die selbe Seite. Am Anfang der Seite prüfe ich die Variable $_POST['password'] und $_POST['name'] einen Wert haben.
Wenn sie keinen Wert haben springt der Scribt zum Ende und zeigt mir das Formular an.
Solten diese jedoch einen Wert besitzen,schreibt es die $_POST Variablen in $name und $password (das password wird noch md5 verschlüsselt).
Dies habe ich einfach zum besseren arbeiten mit den Variablen gemacht, hat glaube ich keiner lei Einfluss auf den Scribt.
Danach wird in der MySql tabelle "user" nach dem Namen und dem dazu gehörigen Passwort gesucht. Werden beide in der selben Spalte gefunden, gibt der query einen Wert zurückt.
Wenn der query einen Wert wieder gibt, wird "eingelog" ausgegeben.
Wenn nicht wird "pech" ausgeben.
(Dies dient zur Zeit nur als Überprüfung! Ich werde später bei Wert Zurückgabe die session füllen und dann auf eine Adminseite verweise wo am anfang die session geprüft wird. Bei keiner Wert Rückgabe wird eine Fehler meldung gezeigt.)

Das Problem:
Nachdem ich auf Login gedrückt habe überspringt er die ganze Abfrage und zeigt mir mein Form wieder an. Dies dürfte aber nicht der Fall sein, da ich $_POST['name'] und $_POST['password'] mit isset auf einen Inhalt überprüft habe. Da ein Inhalt vorhanden ist müsste das Scribt weiterarbeiten und nicht einfach zum else springen. Dies macht es aber leider (so wie es aussieht).

Die Datenbank und die Tabelle existieren.

Sieht wer einen Fehler? Kann mir wer helfen?

Danke!
mfg Ra7or
 
Zuletzt bearbeitet:
HTML:
<input type=\"text\" name=\"Name\" value=\"Name\">

Dein Feld heißt aber "Name" und da PHP Variablen Groß- und Kleinschreibung beachten, müsstest du entweder auf $_POST['Name'] prüfen oder eben den Name des Feldes ändern.
 
Danke!
Soweit so gut. Aber.
Jetzt tirtt aber folgendes Problem auf:
Es wird immer eingelogt angezeigt, egal ob das Passwort und der Namen falsch sind.
PHP:
...
 	$result = mysql_query($sql) OR die(mysql_error());

	echo $result;

	$fetch = implode(mysql_fetch_assoc($result));

    echo $fetch;

  	if (isset($fetch))
  		{

			echo "<h2>eingelogt</h2>";
  		}
  		else
  			{
			echo "<h2>pech</h2>";
  			};
....

Ich bekomm immer die Resource id #10 und den fetch 0.
 
Zuletzt bearbeitet:
Kann es sein das meine MySql einträge falsch sind? Welche Dateitypen solte ich für ID Name und Passwort nehemen? Welche länge würdet ihr mir empfehlen?
 
Hi,

probier es mal so:
PHP:
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
if (is_array($row))
{
 echo "<h2>eingelogt</h2>";
 echo "Username: " . $row['username'] . "<br>";
}
else
{
echo "<h2>pech</h2>";
}

Dann weisst du, ob es geht :D
 
Notice: Undefined index: name in C:\xampp\htdocs\StFo\inhalt\login.php on line 19
name:
...
$row gibt mir nur 0 oder 1 wieder! (Deswegen auch
PHP:
 $fetch = implode(mysql_fetch_assoc($result));
)
Normal solte 1 kommen wenn das Passwort und in der selbeen Zeile der User gefunden wurde und 0 wenn keine passenden kombination gefunden wurde...

so hab ich das verstanden
 
Zuletzt bearbeitet:
Schreib doch die SELECT-Anweisung mal etwas effizienter:
SQL:
SELECT name FROM user WHERE name='$name' AND password='$password' LIMIT 1

und dann im PHP nicht noch fetch_array- oder assoc, sondern prüfe, ob Du genau EINE Zeile bekommst:

PHP:
if( mysql_num_rows($result) == 1 )
  echo "eingeloggt";
else
  echo "Pech";
 
Egal ob ich die richtigen Daten eingegeben habe, es wird immer Pech aus gegeben.
PHP:
<?php

  if(isset($_POST['name']) and ($_POST['password']))
 {
  $name = $_POST['name'];
  $passwd = md5($_POST['password']);
 	$sql = "SELECT name FROM user WHERE name='$name' AND password='$passwd' LIMIT 1";

 	$result = mysql_query($sql) OR die(mysql_error());

    if( mysql_num_rows($result) == 1 ){
      echo "eingeloggt";
    }else{
      echo "Pech"; 
  			};
 }else{
	  echo "
  		<h2>Admin Login</h2>" .
	  		"<center>
		    	<form action=\"index.php?section=login\" method=\"post\">
      			<input type=\"text\" name=\"name\" value=\"Name\">
      			<input type=\"password\" Name=\"password\" value=\"Password\">
      			<input type=\"submit\" name=\"login\" value=\" Einloggen \">
    			</form>" .
    		"</center>";
      }
?>

$result ist immer 0
 
Zuletzt bearbeitet:
1.) Schreib mal im form-Tag "post" gross ("POST"), der IE hat streckenweise mit dem kleinen "post" ein Problem.
2.) Nimm Anstelle der namen der Tags eigene Namen als Input-Namen,das verhindert Missverständnisse im Browser sowie auchim Code.

Danach sollte das ganze aber funktionieren.

LG
Andy
 
1.) Ich benutze Opera..aber done
2.) Wenn ich dich richtig verstanden habe müste es jetzt so aussehen:
PHP:
<?php

  if(isset($_POST['user']) and ($_POST['passwd']))
 {
  $user = $_POST['user'];
  $passwd = md5($_POST['passwd']);
 	$sql = "SELECT name FROM user WHERE name='$user' AND password='$passwd' LIMIT 1";

 	$result = mysql_query($sql) OR die(mysql_error());

    if( mysql_num_rows($result) == 1 ){
      echo "eingeloggt";
    }else{
      echo "Pech"; 
  			};
 }else{
	  echo "
  		<h2>Admin Login</h2>" .
	  		"<center>
		    	<form action=\"index.php?section=login\" method=\"POST\">
      			<input type=\"text\" name=\"user\" value=\"Name\">
      			<input type=\"password\" Name=\"passwd\" value=\"Password\">
      			<input type=\"submit\" name=\"login\" value=\" Einloggen \">
    			</form>" .
    		"</center>";
      }
?>

Kommt immernoch der selbe fehler.. D:... Kann es sein das es an meiner Datenbank liegt?
 
Zurück