[PHP] Login mit PHP und MySQL

wo kann ich das den mit md5 einstellen bei phpmyadmin???

//edit:

habe jetzt eine anmedlefrmular geschrieben aber irgendwie will der das nich in der SQL Tabelle speichern.

PHP:
<?php

$DatabasePointer = mysql_connect("localhost", "tewes_01", "12345678");
mysql_select_db("mydatabase", $DatabasePointer);
$SQL = "INSERT INTO member (nick, passwort, mail, name, nachname, ort, anmeldung) VALUES ('".$_REQUEST['nick']."', '".md5($_REQUEST['passwort'])."', '".$_REQUEST['mail']."', '".$_REQUEST['name']."', '".$_REQUEST['nachname']."', '".$_REQUEST['ort']."', NOW())";
mysql_query($SQL, $DatabasePointer);

if(mysql_affected_rows($DatabasePointer) == 1)
{
	?>
	<p>Vielen Dank für Ihren Eintrag!<br>
	<a href="gaestebuch.php">Zurück</a></p>
	<?php
}
else
{
	?>
	<p>Beim Eintragen ist ein Fehler aufgetreten.<br>
	<a href="javascript:history.back();">Zurück</a></p>
	<?php
}
?>
 
Zuletzt bearbeitet:
@mh1001:
Das kann sein. Ich hatte das Problem in einen php-Channel in IRC gepostet und die anderen hatten mit dem selben String das gleiche Problem, dass die php Funktion einen anderen Wert lieferte als die mySQL Funktion, wobei es bei einem geklappt hat. Ich benutze lokal aber immer die aktuellste Version von XAMPP.

@tewes:
PHP:
SELECT MD5( 'huhn' )
Gib das mal in so eine mySQL Eingabeaufforderung ein.

//edit
PHP:
mysql_query($SQL, $DatabasePointer);
Schreib stattdessen mal.
PHP:
$DatabasePointer = mysql_query($SQL) or die(mysql_error());
 
Zuletzt bearbeitet:
wo kann ich das den mit md5 einstellen bei phpmyadmin??? [...]
Im Anhang findest du einen Screenshot mit der entsprechenden Funktion.

MfG mh1001

/Edit:

@Quidoff

Das mit den verschiedenen Hash-Strings klingt interessant. Ich werde mal schauen ob ich da was näheres in Erfahrung bringen kann.
 

Anhänge

  • phpmyadmin-md5.jpg
    phpmyadmin-md5.jpg
    146,5 KB · Aufrufe: 146
Zuletzt bearbeitet:
@mh1001: ah habs gefunden...aber mach es ja jetzt über php...

@quidoff: hab den fehler gefunden warum er das nicht eingefügt hatte

wenn ich
PHP:
$DatabasePointer = mysql_query($SQL) or die(mysql_error());
einfüge kommt ein fehler in der if anweisung
PHP:
if(mysql_affected_rows($DatabasePointer) == 1)
 
mhh irgendwie funktioniert es trotzdem nicht

//edit: und woran kann es liegen das, wenn ich mir die Namen aus der Datenbank angucken will in der tabelle nur Array steht??
 
Zuletzt bearbeitet:
Da hast du wohl wieder echo $array gemacht. Wobei $array ein array ist ;)

Code?

Auf diese Überprüfung aknst du auch verzichten. Wenn mysql_query() keinen Fehler zurückgibt, dann wurde alles richtig gespeichert und wenn nicht, dann bricht das Script wegen die(mysql_error()) ab und zeigt den Fehler.

//edit
Kommt bei dir zufällig dieser Fehler?
Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource

//edit2
Ok. Nachdem ich mir das hier durchgelesen habe, verstehe ich den Fehler auch. mysql_affected_rows() erwartet gar nicht zwingend einen Parameter, sondern überprüft die letzte INSERT, UPDATE oder DELETE Anfrage.

Folgender Code sollte funktionieren.
PHP:
mysql_query($SQL) or die(mysql_error());
if(mysql_affected_rows()==1)

@mh1001:
Wegen dem MD5 Problem. Ich hab hier jetzt wieder so nen Fall. Vllt hab ich ja auch was falsch gemacht.
Überprüft werden soll folgender String: !"§$%&/()=?²³{[]}\
Hier der php-Code
PHP:
echo  md5("!\"§\$%&/()=?²³{[]}\\");
Gibt bei mir: 8a56c97cb73224ce2ba3b5447860c2e3
Und mit mySQL folgender Code:
Code:
SELECT MD5( '!\"§\$%&/()=?²³{[]}\\' )
Ergibt folgenden Wert: 17a575493f352cd2b7a48548c2a5e21a
Vllt hab ich nur was falsch escaped.
 
Zuletzt bearbeitet:
Da hast du wohl wieder echo $array gemacht. Wobei $array ein array ist
habs mit $sql_query-> nick probiert.....hat aber nicht geklappt.

und wie bekomm ich das hin das er überprüft ob der name schon in der Datenbank existiert??
habs mir so gedacht
PHP:
if(mysql_affected_rows($DatabasePointer) == $sql_query->nick)
 
Nein so nicht. Dafür musst du extra eine Abfrage machen:

PHP:
    //gibt die ID bei Erfolg ansonsten false
	function get_id_by_name($username) {
        $sql = "SELECT 
                    ID
                FROM
                    user
                WHERE
                    Name='".maskieren($username)."'
                LIMIT 1;";
                    
        $result = mysql_query($sql) or die(mysql_error());		
		$row = mysql_fetch_object($result);
		
		return (mysql_num_rows($result)==1) ? $row->ID : false;
	}

if(get_id_by_name(trim($_POST['username']))!==false) { //fehler
Das ist eine Funktion von mir, die bei Erfolg die ID des Benutzers zurückgibt, ansonsten false.
Musst du nur auf deine Datenbank zurecht schneiden.
Die Funktion verwendet die maskieren() Funktion von mh1001.
 
Sorry wenn ich nun den Thread etwas shreddere, aber um auf das MD5-Problem zurückzukommen:
Ich erhalte in beiden Fällen das gleiche Ergebnis.
Deine SQL-Anweisung liefert bei mir ebenfalls "8a56c97cb73224ce2ba3b5447860c2e3".
Auf dem Server läuft MySQL 4.0.18.
Ich hatte mir auch schon überlegt, ob es irgendetwas mit dem Escapen zu tun haben könnte, doch konnte ich mir da auch nichts ableiten. ;)
Auf jeden Fall werde ich aber selbiges gleich noch einmal auf meinem anderen Server probieren, auf dem MySQL 5 läuft.

MfG mh1001
 
Zuletzt bearbeitet:
Wie schaut denn nun der gesamte Code aus?
Ich habe hier nun schon etwas den Überblick verloren und bekomme langsam gar nicht mehr zusammen, was wo hin gehört. ;)

MfG mh1001
 
PHP:
<?php
include 'function.php';
$DatabasePointer = mysql_connect("localhost", "tewes_01", "12345678");
mysql_select_db("tewes_01", $DatabasePointer);
function get_id_by_name($username) 
{
	$sql = "SELECT id FROM member WHERE nick='".maskieren($username)."' LIMIT 1";
    $result = mysql_query($sql) or die(mysql_error());        
    $row = mysql_fetch_object($result);
    
	return (mysql_num_rows($result)==1) ? $row->ID : false;
}
if(get_id_by_name(trim($_REQUEST['nick']))==true)
{
	echo "der Username existiert schon.";
}
else
{
	$SQL = "INSERT INTO member (nick, passwort, email, name, nachname, ort, anmeldung) VALUES ('".$_REQUEST['nick']."', '".md5($_REQUEST['passwort'])."', '".$_REQUEST['mail']."', '".$_REQUEST['name']."', '".$_REQUEST['nname']."', '".$_REQUEST['ort']."', NOW())";
	mysql_query($SQL) or die(mysql_error());
	
	if(mysql_affected_rows($DatabasePointer)==1)
	{
		?>
		<p>Vielen Dank für Ihren Regestrierung!<br></p>
		<?php
	}
	else
	{
		?>
		<p>Beim Eintragen ist ein Fehler aufgetreten.<br>
		<a href="javascript:history.back();">Zurück</a></p>
		<?php
	}
}
?>

function.php
PHP:
<?php
function maskieren($string)
{
  if(get_magic_quotes_gpc())
  {
    $format = $string;
  }
  else
  {
    $format = addslashes($string);
  }

  return $format;
}

function demaskieren($string)
{
  if(get_magic_quotes_gpc())
  {
    $format = stripslashes($string);
  }
  else
  {
    $format = $string;
  }

  return $format;
} 
?>
 
PHP:
if(get_id_by_name(trim($_REQUEST['nick']))==true)
Das schreibst du
Ich hab geschrieben
PHP:
if(get_id_by_name(trim($_POST['username']))!==false)
Richtig wäre also
PHP:
if(get_id_by_name(trim($_REQUEST['nick']))!==false)
 
Ein "=== true" könntest du in diesem Fall auch benutzen, das läuft aber auf das selbe wie Quidoffs Code hinaus. ;) (Edit: Blödsinn, doch nicht, hatte mir Quidoffs Funktion nicht genau angeschaut, die gibt ja immer anderen Fall die ID zurück ;) )
Ansonsten solltest du auch entweder das trim() bei der Funktion zur Prüfungsroutine herausnehmen oder es auch bei deinem INSERT-Statement noch hinzufügen. Sonst ist das Ziel, Duplikate mit der Funktion zu vermeiden, wieder verfehlt. Und auch dort bei sämtlichen Variablen das Maskieren nicht vergessen. ;)

MfG mh1001
 
Zuletzt bearbeitet:
seit wann gibt es das denn das z.B. 3 "=" hintereinander sind?
und wo is der sinn dahinter?
 
"===" überprüft neben dem Wert der Variablen auch deren Typ.
"==" überprüft nur den Wert der Variablen. So ist 0==false z.B. wahr, obwohl das eine eine Zahl und das andere ein boolscher Ausdruck ist.

PHP:
if(0==false) echo "4";
if(0===false) echo "2";

Ausgabe: 4

Funktionierts jetzt?
 
Zuletzt bearbeitet:
jo funktioniert

//edit: wie geht das wenn eine session nich wahr wird man dierkt zur login seite geleitet wird??
 
Zuletzt bearbeitet:
Das geht mit der header-Funktion.
Wichtig ist hierbei, dass dies aufgerufen werden muss, bevor Daten an den Browser gesendet wurden.
Alternativ kannst du auch alle vorherigen Ausgaben mit ob_flush() puffern.

MfG mh1001

//Edit:

@Quidoff

Ich habe nun eben einmal selbige MySQL-Anweisung auf einem anderen MySQL-Server der Version 4.1.15 ausgeführt, und siehe da, jetzt komme ich auch auf "17a575493f352cd2b7a48548c2a5e21".
Ich glaube ich schlafe jetzt aber erst einmal eine Nacht darüber und werde morgen noch einmal schauen, wie das zustande kommen kann. ;)
 
Zuletzt bearbeitet:
reicht es wenn ich bei der login seite session_start(); angeben und dann auf den seiten die nur regestrierte user benutzen dürfen
PHP:
if(session == false)
{
        header("Location: http://www.tewes.te.funpic.de/login/anmelde.php");
}
einfüge?
oder muss ich da noch was anderes einfügen
 
Zurück
Oben