PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : md5 in Datenbankeintragen, geht nicht


Memphis01
01.04.2008, 00:11:29
Habe ein Problem, ich habe keine Ahnung warum das Passwort nicht mit md5 gehashed wird und so in die Datenbank eingetragen wird.


<?php

include("db.php");
if($button=="OK")
{ (bei '$passwort' wird ein leerzeichen angeziegt, ist aber keines drin)
if(!mysql_query("INSERT INTO benutzerdaten(login,kennwort,vorname,nachname)VALUES('$login','$passwo rt','$vorname','$nachname')"))
{
echo("FEHLER BEIM SCHREIBEN DER DATEN!<br>");
}else echo("ERFOLGREICH EINGETRAGEN! TEST $passwort $pwd0 $pwd1 $pwd2 $pwd3 $pwd4 $pwd5");
}

echo("<form action=register.php method=post target=>");
echo("<table>");
echo("<tr><td>Benutzername</td><td><input type=text name=login></td></tr>");
echo("<tr><td>Kennwort</td><td><input type=password name=passwort></td></tr>");
echo("<tr><td>Vorname</td><td><input type=text name=vorname></td></tr>");
echo("<tr><td>Nachname</td><td><input type=text name=nachname></td></tr>");
echo("</table>");
echo("<br><input type=Submit name=button value=OK>");

$pwd0 = '$passwort';
$pwd1 = md5($passwort);
$pwd2 = md5('$passwort');
$pwd3 = $passwort;
$pwd4 = '<input type=password name=passwort>';
$pwd5 = $pwd4;
echo("</form>");
?>

habe 6 Variablen auf verschiedenstem weg eingebaut, aber keiner der Variablen klappt in der Ausgabe zum Testen oben. Kann mir jemand sagen was ich falsch mache oder wie das funktioniert einen wert von nem inputfeld mit md5 zu hashen und in die Datenbank einzutragen?

(bei VALUES('$login','$passwort','$vorname','$nachname')")) wird bei $passwort ein leerzeichen angeziegt, ist aber keines drin)


Danke

Domi
01.04.2008, 01:14:59
Guten Morgen und willkommen im Forum,

vorne weg darf ich dich darauf hinweisen, dass es hier im Forum die PHP-Tags gibt die bitte verwendet werden sollten.

Ich vermute das $button eine Variable ist, die per POST von einem Formular übergeben wird? Diese sollten dann aber per $_POST['button'] abgefragt werden, die entsprechende Links, warum das so ist, werden sicher noch andere im Forum hier posten.

Alle daten die du per POST bekommst kannst du dir anschauen mit print_r($_POST);

zu deinem Problem:

<?php

include("db.php");

if($_POST['button'] =="OK")
{

$login = mysql_escape_string($_POST['login']);
$passwort = md5($_POST['passwort']);
$vorname = mysql_escape_string($_POST['vorname']);
$nachname = mysql_escape_string($_POST['namename']);

$sql = "INSERT INTO benutzerdaten(login,kennwort,vorname,nachname)VALUES('$login','$passwo rt','$vorname','$nachname')";


if(!mysql_query($sql))
echo "FEHLER BEIM SCHREIBEN DER DATEN!<br>";
else
echo("ERFOLGREICH EINGETRAGEN!");

}

echo "<form action=register.php method=post target=>";
echo "<table>";
echo "<tr><td>Benutzername</td><td><input type=text name=login></td></tr>";
echo "<tr><td>Kennwort</td><td><input type=password name=passwort></td></tr>";
echo "<tr><td>Vorname</td><td><input type=text name=vorname></td></tr>";
echo "<tr><td>Nachname</td><td><input type=text name=nachname></td></tr>";
echo "</table>";
echo "<br><input type=Submit name=button value=OK>";
echo "</form>";

?>

Ist einfach mal so runter geschrieben, ungetestet. Wie du oben siehst, verwende ich mysql_escape_string() (http://de.php.net/mysql_escape_string). Dies ist SEHR WICHTIG um einer MySQL-Injection (http://de.wikipedia.org/wiki/MySQL_Injection) vorzubeugen.

Ich hoffe ich konnte dir soweit helfen.

Gruß
Domi

P.S.: Fehler im Quellcode schieb ich auf die Uhrzeit ;)

feuervogel
01.04.2008, 08:19:18
habe 6 Variablen auf verschiedenstem weg eingebaut, aber keiner der Variablen klappt in der Ausgabe zum Testen oben.

Offentsichtlich nicht über das superglobale Array $_POST, da bei Dir (zum Glück) register_globals auf OFF steht.

tipp: http://tut.php-quake.net/formulare.html

Memphis01
02.04.2008, 23:23:25
Danke für die Antwort geht ohne probleme, aber nun stehe ich vor einem weiteren problem und sehe das problem nicht.

###########


<?php $query=mysql_query("SELECT * FROM benutzerdaten WHERE Id = $_SESSION[user_id]");
$query=mysql_fetch_array($query);
echo "$query[rang] <= Rank";
echo "<table border=0 width=100% background=includes/navibg.jpg>";
echo "<tr><td height=39 valign=middle align=center><a href=intern.php>Home</a></td></tr>";
echo "<tr><td height=39 valign=middle align=center><a href=intern.php>News</a></td></tr>";
echo "<tr><td height=38 valign=middle align=center><a href=intern.php>Raids</a></td></tr>";
if($query[rang]>=1) echo "<tr><td height=39 valign=middle align=center><a href=intern.php>DKP</a></td></tr>";
if($query[rang]>=1) echo "<tr><td height=38 valign=middle align=center><a href=intern.php>Member</a></td></tr>";
if($query[rang]==2) echo "<tr><td height=39 valign=middle align=center><a href=intern.php>+News</a></td></tr>";
if($query[rang]==2) echo "<tr><td height=39 valign=middle align=center><a href=intern.php>+Raids</a></td></tr>";
if($query[rang]==2) echo "<tr><td height=38 valign=middle align=center><a href=intern.php>+Zone</a></td></tr>";
if($query[rang]==2) echo "<tr><td height=39 valign=middle align=center><a href=intern.php>+Rechte</a></td></tr>";
if($query[rang]>=1) echo "<tr><td height=38 valign=middle align=center><a href=intern.php>Logout</a></td></tr>";
echo "</table>";
?>




echo "$query[rang] <= Rank"; dient lediglich zur Testausgabe


Hier die übergabe der Variablen in die Session

<?php
// Session starten
session_start ();

// Datenbankverbindung aufbauen
$connectionid = $db_server='localhost';
$db_user='XXXX';
$db_passwd='XXXX';
$db_name='XXXX';

$connectionid = @mysql_connect($db_server, $db_user, $db_passwd)
or die('Konnte keine Verbindung zur Datenbank herstellen');
$db_check = @mysql_select_db($db_name);

$sql = "SELECT ".
"Id, login ".
"FROM ".
"benutzerdaten ".
"WHERE ".
"(login 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_login"] = $data["login"];

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

und hier die DB struktur


CREATE TABLE `benutzerdaten` (
`Id` int(11) NOT NULL auto_increment,
`login` text NOT NULL,
`kennwort` varchar(32) NOT NULL default '',
`email` text NOT NULL,
`rang` int(11) NOT NULL default '0',
`aktiv` int(11) NOT NULL default '0',
PRIMARY KEY (`Id`)
) TYPE=MyISAM AUTO_INCREMENT=4 AUTO_INCREMENT=4 ;


Das Problem liegt darin das er nicht erkennt wer einen Rang von 1 oder 2 hat, womit verschiedene rechte verbunden sind.

und er mir nur die ersten paar ausgibt wo keine if bedinung dahinter steht.

Was hab ich den nun schon wieder falsch gemacht??

bin mir nicht sicher ob ich die variable so einfach mit der session vergleich kann, oder ob ich das erst raus lesen muss ...

ksticker
02.04.2008, 23:38:55
// Sessionvariablen erstellen und registrieren
$_SESSION["user_id"] = $data["Id"];
$_SESSION["user_login"] = $data["login"];


Wo registrierst Du denn Deine Session?
Das geht mit Session_Register();

|Coding
03.04.2008, 00:09:36
Da er $_SESSION nutzt, braucht er session_register nicht.

@ Topic:

Du solltes $query['rang'] statt $query[rang] verwenden. Bei $query[rang] versuchst Du über die Konstante rang auf einen Wert des Arrays $query zu zugreifen. Gleiches gilt für $_SESSION[user_id].

Memphis01
03.04.2008, 00:10:25
Ich habe keine Ahnung wo ich das Register rein hauen soll, ich beschäftige mich mit sql intensiver seit erst 3 tagen, und das auch nur weil ich nen projekt von uns umsetzen muss, wofür nen login mit variablen abgleich zu rechte bestimmung drin ist.

wo und wie muss ich da register rein baun? ich will doch nur das aus der session nen wert raus kommt den ich mit ner var vergleichen kann

Domi
03.04.2008, 08:17:49
Und bevor du jedes mal if schreibst solltest du

http://de.php.net/switch

verwenden. Du kannst aber auch mehrere echos für eine IF-Abfrage schreiben. Nutze hierzu geschweifte Klammern:


if($query[rang]==2) {

echo "test 1<br />\n";
echo "test 2<br />\n";
echo "test 3<br />\n";
echo "test 4<br />\n";

}


Gruß
Domi