Problem mit Loginsystem-Anfang

derrick

Grünschnabel
Hallo erstmal,

hab mal versucht euer tutorial Loginsystem mit sessions zu verwirklichen, leider hackt es schon am anfang bei der eingabe der user mit passwort

habe den code und dazu passend die tabelle nur geringfügig geändert, register globals ist auf on gestellt

<?php
// Definition der Benutzer
$benutzer[0]["nickname"] ="turak";
$benutzer[0]["kennwort"] = "xyz";
$benutzer[0]["rang"] = "Gildengründer";

$benutzer[1]["nickname"] = "test";
$benutzer[1]["kennwort"] = "abc";
$benutzer[1]["rang"] = "Mitglied";

// Sie können an dieser Stelle beliebig viele Benutzer anlegen.
// Achten Sie dabei nur auf die Fortführung der Nummer.

// Aufbau der Datenbankverbindung
$connectionid = mysql_connect ("localhost", "root", "");
if (!mysql_select_db ("tb", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}

// Zuerst alle Datensätze löschen um keine Dopplungen zu bekommen.
mysql_query ("DELETE FROM benutzerdaten");

// Daten eintragen
while (list ($key, $value) = each ($benutzer))
{
// SQL-Anweisung erstellen
$sql = "INSERT INTO ".
"benutzerdaten (nickname, kennwort, rang) ".
"VALUES ('".$value["nickname"]."', '".
md5 ($value["kennwort"])."', '".
$value["rang"]."', '".

mysql_query ($sql);

if (mysql_affected_rows ($connectionid) > 0)
{
echo "Benutzer erfolgreich angelegt.<br>\n";
}
else
{
echo "Fehler beim Anlegen der Benutzer.<br>\n";
}
}
?>

bekomme folgenden fehler beim aufrufen:

Notice: Undefined variable: sql in c:\inetpub\wwwroot\tb\admin\login\pass.php on line 34
Fehler beim Anlegen der Benutzer.
Fehler beim Anlegen der Benutzer.

wäre echt nice wenn mir wer helfen könnte

oder ist diese php eigentlich nicht nötig? welchen unterschied macht es wenn ich die daten per hand oder eingabeformular in die tabelle schreibe?
 
Zuletzt bearbeitet:
Dein SQL endet mit ". ---- das ist nicht korrekt! Es muss mit "; enden!

Würde es so schreiben:
PHP:
$sql = "INSERT INTO benutzerdaten VALUES ('".$value["nickname"]."', '".md5 ($value["kennwort"])."', '".$value["rang"]."')";
 
Zuletzt bearbeitet:
So müsste es gehen:
PHP:
<?php
// Definition der Benutzer
$benutzer[0]["nickname"] ="turak";
$benutzer[0]["kennwort"] = "xyz";
$benutzer[0]["rang"] = "Gildengründer";

$benutzer[1]["nickname"] = "test";
$benutzer[1]["kennwort"] = "abc";
$benutzer[1]["rang"] = "Mitglied";

// Sie können an dieser Stelle beliebig viele Benutzer anlegen.
// Achten Sie dabei nur auf die Fortführung der Nummer.

// Aufbau der Datenbankverbindung
$connectionid = mysql_connect ("localhost", "root", "");
if (!mysql_select_db ("tb", $connectionid))
{
  die ("Keine Verbindung zur Datenbank");
}

// Zuerst alle Datensätze löschen um keine Dopplungen zu bekommen.
mysql_query ("DELETE FROM benutzerdaten");

// Daten eintragen
while (list ($key, $value) = each ($benutzer))
{
  // SQL-Anweisung erstellen
  $sql = "INSERT INTO ".
    "benutzerdaten (nickname, kennwort, rang) ".
    "VALUES ('".$value["nickname"]."', '".
    md5 ($value["kennwort"])."', '".
    $value["rang"]."')";

  mysql_query ($sql);

  if (mysql_affected_rows ($connectionid) > 0)
  {
    echo "Benutzer erfolgreich angelegt.<br>\n";
  }
  else
  {
    echo "Fehler beim Anlegen der Benutzer.<br>\n";
  }
}
?>
 
vielen dank das hat schon mal geholfen :)

die daten werden eingetragen und passwort verschlüsselt d16fb36f0911f878998c136191af705e so etwa, schätze mal das passt?

bin mir nicht ganz sicher weil ich folgende fehlermeldung bekomme, wenn ich wie im tutorial beschrieben die intern.php aufrufe und weitergeleitet werde zum login und passwort eingebe:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\inetpub\wwwroot\tb\admin\login\login.php on line 21

Warning: Cannot modify header information - headers already sent by (output started at c:\inetpub\wwwroot\tb\admin\login\login.php:21) in c:\inetpub\wwwroot\tb\admin\login\login.php on line 35

nun habe ich mal output_buffering = on eingestellt wegen cookies und die fehlermeldung kam nicht mehr

jedoch bekomme ich jetzt: Die Zugangsdaten waren ungültig. vom loginformular obwohl die daten stimmen müssten


intern.php
<?php
include ("checkuser.php");
?>
<html>
<head>
<title>Interne Seite</title>
</head>
<body>
BenutzerId: <?php echo $_SESSION["user_id"]; ?><br>
Nickname: <?php echo $_SESSION["user_nickname"]; ?><br>
Rang: <?php echo $_SESSION["user_rang"]; ?><br>
<hr>
<a href="logout.php">Ausloggen</a>
</body>
</html>

checkuser.php
<?php
session_start ();
if (!isset ($_SESSION["user_id"]))
{
header ("Location: loginformular.php");
}
?>

loginformular.php
<?php session_start (); ?>
<html>
<head>
<title>Login</title>
</head>

<body>
<?php
if (isset ($_REQUEST["fehler"]))
{
echo "Die Zugangsdaten waren ungültig.";
}
?>
<form action="login.php" method="post">
Name: <input type="text" name="name" size="20"><br>
Kennwort: <input type="password" name="pwd" size="20"><br>
<input type="submit" value="Login">
</form>
</body>
</html>


login.php
<?php
// Session starten
session_start ();

// Datenbankverbindung aufbauen
$connectionid = mysql_connect ("localhost", "root", "harry2000");
if (!mysql_select_db ("tb", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}

$sql = "SELECT ".
"id, nickname, rang".
"FROM ".
"benutzerdaten ".
"WHERE ".
"(nickname like '".$_REQUEST["name"]."') AND ".
"(kennwort = '".md5 ($_REQUEST["pwd"])."')";

$result = mysql_query ($sql);
if (mysql_num_rows ($result) > 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array ($result);

// Sessionvariablen erstellen und registrieren
$_SESSION["user_id"] = $data["id"];
$_SESSION["user_nickname"] = $data["nickname"];
$_SESSION["user_rang"] = $data["rang"];

header ("Location: intern.php");
}
else
{
header ("Location: loginformular.php?fehler=1");
}
?>

hm..whats the problem ? :rolleyes:
 
In der folgenden Zeile der login.php fehlt ein Leerzeichen:
PHP:
"id, nickname, rang".

// wird zu

"id, nickname, rang ".
 
vielen lieben dank, jetzt funktioniert es :)

hätte nicht gedacht das es an dem leerzeichen liegen könnte
 
Da siehst du mal, kann es doch :-)

Ein Tip ... Sobald der Fehler auftritt, dass z.B. das übergebene Parameter von mysql_fetch_array keine gültige Resource ist, würde ich die SQL-Anweisung prüfen. Nicht zu vergessen, dass dort möglichst immer die reservierten Worte wie SELECT, FROM, WHERE, usw ... mit einem Leerzeichen getrennt sind. Wenn du nun die Anweisung auf mehrere Zeilen aufteilst, vergisst man da schnell mal eins.
 
u

Zusätzlicher Tip:
jeden SQL Query, der irgendwie zusammengebaut wird erstmal per echo ausgeben und per Copy und Paste in das SQL Fenster deines PhpMyAdmins.

Ich bin sogar dazu übergegangen, bevor ich überhaupt die Programmroutinen zum Datenbank zugriff zu schreiben, meine SQL Queries in eine Datei auszulagern.

Unter PHP würde das dann so aussehen:

PHP:
// queries.conf.php
$GET_USER = "SELECT * ...."
$INSERT_USER = "INSERT ..."

// irgendwo.php
include('queries.conf.php');
mysql_query($GET_USER);
...

Das hat mehrere Vorteile. Einerseits ist GET_USER leichter zulesen, als wenn du oben drüber dein Query erst zusammensetzt. Die Lesbarkeit leidet unter sowas.
Zweitens brauchst du für die Ganze Anwendung nur eine Datei ändern, wenn du mal die ganze Datenbank umändern willst.
 
danke für die guten tipps

hab mir überlegt das ganze auch noch auszubaun, mit einem formular das dann user, kennwort, rang, bild (per link), link an die 1. php übergiebt

das userbild und link sollte angezeigt werden nach dem login

wie gehe ich das am besten an ohne groß was umschreiben zu müssen?

thx in advance

edit: habs jetzt mal so gemacht das ich url samt html code in die tabelle reinschreibe (lasse) und dann ausgeben lasse bild und url werden angezeigt, nat. ein bischen umständlich

son formular wäre nat. hilfreich :-)
 
Zuletzt bearbeitet:
habs jetzt mal zusammengebastelt mit einem eingabeformular, eintragen in die tabelle funktioniert auch

bin mir aber nicht sicher was das verschlüsseln angeht, bei login bekomme ich wieder die fehlermeldung "Die Zugangsdaten waren ungültig." und außerdem:
Notice: Undefined index: ni in c:\inetpub\wwwroot\tb\admin\login\memberdaten1.php on line 10


idea anyone? :confused:


formular sieht so aus:

<html>
<body>
<p><strong>TB-ADMIN: Neuer Member hinzuf&uuml;gen </strong> </p>
<p>


<?


if ($_POST['ni'] == "") {
echo "es muss ein name eingegeben werden";
}
else
{


if(isset($_POST['submit']))
$db = mysql_connect("localhost", "root", "");
mysql_select_db("tb",$db);

$sql = "INSERT INTO benutzerdaten (kennwort,nickname,rang,link) VALUES ('".
md5 ($value["kennwort"])."','$ni','$ra','$li')";



$result = mysql_query($sql,$db);
echo "Datensatz erfolgreich aktualisiert!<br><br>";
}
?>
<?php
include("dbconnect.php");
?>
</p>
<form method="post" action="memberdaten1.php">
<table width="75%" border="0">
<tr>
<td width="19%">Member:</td>
<td width="81%"><input name="ni" type="text" size="20"></td>
</tr>
<tr>
<td>Passwort: </td>
<td><input type="text" name="kennwort" size=30 maxlength=60></td>
</tr>
<tr>
<td>Rang: </td>
<td><select name="ra" size=1>
<option value="Administrator">Administrator
<option value="Botschafter">Botschafter
<option value="BT-Meister">BT-Meister
<option value="Mitglied">Mitglied
<option value="Probe">Probe </select></td>
</tr>
<tr>
<tr>
<td>Link: </td>
<td><input type="text" name="li" value="http://" size=30 maxlength=60></td>
</tr>

<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Eintragen">
<input type="reset" name="reset" value="Reset"></td>
<td>&nbsp;</td>
</tr>
</table>
</form>




</body>
</html>
 
Zuletzt bearbeitet:
Zurück