# Registrierungsformular - überprüfen, ob der Benutzername bereits existiert



## Harry Fan8 (30. Dezember 2012)

Hey,

hab nen kleines Problem. Nämlich ich hab ein Registrierungsformular für meine Webseite erstellt. (Mit Benutzername, Email & Passwort) Nur nun hab ich das Problem, das man mehrmals mit dem gleichen Accountname registrieren kann. Aber das möchte ich irgendwie vermeiden, aber ich weiß nicht wie. Vllt könntet ihr mir da irgendwie weiterhelfen. 

Möchte nämlich, dass er aus der Datenbank den Benutzername herausfiltert, und mit der Eingabe des Formulars überprüft.

Mein bisheriger Code sieht bis jetzt so aus:
Formular:

```
<b>Bitte gib deine Registrierungsdaten an:</b>
<FORM METHOD=POST>
  Benutzername:<br>
  <input type="Text" name="user" value="">
  <br><br>
  EMail-Adresse:<br>
  <input type="Text" name="email" value="">
  <br><br>
  EMail-Adresse bestätigen:<br>
  <input type="Text" name="emailagain" value="">
  <br><br>
  Passwort:<br>
  <input type="Password" name="kenn" value="">
  <br><br>
  Passwort bestätigen:<br>
  <input type="Password" name="kennagain" value="">
  <br><br>
  <input type="submit" name="absenden" value="Registrieren">
</FORM>
```

Jeweilige PHP-Code zum Formular:

```
<?php
	$geld = 20000;
	$mail = $_POST['email'];
	$benutzer = $_COOKIE['Benutzer'];
	
	$eingabeUSER = $_POST['user'];
	
	$abfrage = "SELECT * FROM city WHERE Benutzer = $benutzer";
	$data = mysql_query($abfrage);

	if($_POST['user'] && $_POST['email'] && $_POST['emailagain'] && $_POST['kenn'] && $_POST['kennagain']) {
		if (ereg('^[a-z0-9]+([-_.]?[a-z0-9])+@[a-z0-9]+([-_.]?[a-z0-9])+.[a-z]{2,4}', $mail)) { //wird überprüft, ob es eine EMail-Adresse ist
			if(!$eingabeUSER == $data) { //wird überprüft, ob die Eingabe == die Daten in der Datenbank sind. Falls das der Fall ist, soll eine Fehlermeldung wiedergegen werden, sonst erfolgreich die Registrierung abwickeln.
				$sql = "
					INSERT INTO `city`
					(
					`Benutzer` , `Kennwort` , `Email`, `Geld`
					)
					VALUES
					(
					'".$_POST['user']."', '".$_POST['kenn']."', '".$_POST['email']."', '".$geld."'
					);
					";

					mysql_query($sql)
						or die("Fehler, irgendetwas lief bei der Registrierung schief.");
						echo "Herzlichen Glückwunsch, du hast dich soeben Erfolgreich registriert!";
						
			} else {
				echo "Benutzername existiert bereits."; //Falls bereits ein Benutzername mit dem Namen, in der Datenbank existiert, soll er ein Fehler ausgeben.
			}
		} else {
			echo "Email-Adresse stimmt nicht überein.";
		}
	} else if($_POST['email'] != $_POST['emailagain']) {
				echo "Email-Adressen stimmen nicht überein.";
			} else if($_POST['kenn'] != $_POST['kennagain']) {
				echo "Passwörter stimmen nicht überein.";
			} else if($_POST['absenden']) {
				echo "Bitte alle Felder ausfüllen!";
			}
?>
```

Das meiste davon sind Codeschnipel, aber einiges habe ich davon auch selbst gemacht. Ich sag aber jetzt schonmal danke für jede Antwort, die ihr dazu gibt.

MfG
Harry Fan8


----------



## SkyDevMent (30. Dezember 2012)

Meiner Meinung nach gibt das hier zwei Mögliche Vorgehensweisen:

1) Du setzt das Usernamefeld in deiner Datenbank auf unique
2) Du nutzt diese funktion

```
function user_exsits($username)
{
	$result = mysql_query("Select Benutzer From `city` where Benutzer = '$username'");
	if($result)
	{
		return true;
	}
	else
	{
		return false;
	}
}
```

P.S. Deine E-Mail überprüfung ist etwas veraltet, [phpf]ereg[/phpf] ist seit PHP 5.3.0 veraltet.
Hier hast du eine Funktion die sowohl die Formalien überprüft als ob die Domain exsistiert.
https://gist.github.com/4410719

Mit freundlichen Grüßen 
Leon Bergmann


----------



## Harry Fan8 (30. Dezember 2012)

Okay, danke für die schnelle Antwort. Aber bei der 1. Vorgehensweise weiß ich leider nicht weiter. Bin noch ein ****ie in PHP^^, aber find das irgendwie nicht. Unter Typ hab ich zurzeit VARCHAR stehen, aber da steht nichts mit unique. Und unter Collation steht auch nichts mit unique.

Brauche dringend Hilfe!


----------



## SkyDevMent (30. Dezember 2012)

Folgendes ich denke mal du nutzt  phpmyadmin zur verwaltung deinr Tabellen bzw. Datenbanken. Dann ist das unique unter extras zu finden. Oder wenns schnell gehen soll folgende SQL


----------



## Harry Fan8 (30. Dezember 2012)

Achso, danke. Hab auch falsch geguckt.^^ Ich dummy hab auf bearbeiten geklickt, und hab das dort gesucht. xD Werds jetzt nochmal ausprobieren, hoffe es funkt.

EDIT: Es funktioniert, dankeschön.  Aber kriegt man das auch so hin, dass wenn der Benutzername nicht existiert über die else funktion läuft? und nicht über or die(""); . Denn or die benutzt man doch, wenns Fehler mit der Datenbank gibt, oder? oder irre ich mich da gerade?^^

EDIT 2: Okay, hab mich wohl doch geirrt. Denn für die Fehler ist ja mysql_connect da oder mysql_select_db.

MfG
Harry Fan8

Hey,
hab dann mal noch ne kleine Frage: Ist es auch irgendwie möglich Passwörter bei Registrierung zu verschlüsseln, und bei der Anmeldung zu entschlüsseln? Wenn ja, wie?

Gruß Harry


----------



## sheel (30. Dezember 2012)

Möglich schon, aber vllt. wäre Hashen sinnvoller?
sha1(...)


----------



## SkyDevMent (30. Dezember 2012)

Die Methode von sheel ist sicherlich die beste Möglichkeit konrekt würde einen Implementation von sha1 bzw. sha512 wie folgt aussehen.

https://gist.github.com/4412816


----------



## Harry Fan8 (30. Dezember 2012)

```
<?php

// Autor: Leon Bergmann

// Date: 06.11.2012 13:18 Uhr

// Leon Bergmann - 30.12.2012 14:07 Uhrr

class passwordAPI

{

private $rounds = 5;

private $method = 'SHA512';

public function crypt($text,$salt)

{

$tmp = $text;

for($i = 0; $i <= $this->rounds; $i++)

{

$tmp = $tmp.$salt;

$tmp = hash($this->method,$tmp);

}

return $tmp;

}

public function createASalt()

{

$salt = self::randomChars(255);

$salt = hash($this->method,$salt);

return $salt;

}

public static function randomChars($laenge)

{

$inhalt='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

$string = "";

srand(microtime()*1000000);

for($i=1;$i<=$laenge;$i++)

{

$index	= rand(1,strlen($inhalt));

$index--;

$string	.= $inhalt{$index};

}

return $string;

}

}

 

 

?>
```
von: Leon Bergmann, Quelle: https://gist.github.com/4412816

Könnte man das auch irgendwie einfacher gestalten? :/ Sieht für mich als Anfänger noch recht kompliziert aus. Wofür ist die Variable $round da? Sind das die Login-Versuche für Einloggen, oder wie? Und wozu braucht man diese Funktion?: public static function randomChars($laenge)
Ist die Funktion unbedingt notwendig? Wozu muss man das Passwort denn salzen, wenn es doch schon unknackbar ist?

Sorry für die vielen Fragen, bin noch neu in dem Bereich. :/

mfg harry


----------



## SkyDevMent (30. Dezember 2012)

Die Variable $round ist für die for-Schleife gedacht, sie gibt an wie oft das passwort gehasht werden soll.
Auch wenn bis jetzt kein effektiver Angriff auf sha512 bekannt ist, ist es doch möglich mit sehr großen Rainbowtables das Passwort zu rekonstruieren, deshalb sollte man vorsichtshalber einen Salt verwenden.


----------



## sheel (30. Dezember 2012)

Harry Fan8 hat gesagt.:


> Sorry für die vielen Fragen, bin noch neu in dem Bereich. :/


Da vllt. noch Verwirrung vorhanden ist:

Das Vorgehen beim Hashen prinzipiell:
Registrieren: PW mit der (in der Theorie unumkehrbaren) Hashfunktion behandeln
und Ergebnis in die DB.
Anmeldung: Eingegebenes PW mit der selben hashfunktion hashen
und den neuen Hash mit dem in der DB vergleichen.

Der Hash hat uA. die Egenschaften, dass man eben nichts rück-"verschlüsseln" kann
und verschiedene Passwörter auch (sehr) verschiedene Hashes erzeugen.

Man kann also nicht von ähnlichen Hashes darauf schließen, dass der Klartext auch ähnlich ist.

Von den verschiedenen vorhandenen Verfahren sind einige nicht mehr so toll, weil inzwischen Möglichkeiten bekannt sind, sie in annehmbarer Zeit doch umzukehren.
(annehmbare Zeit = nicht zehntausende Jahre++)


In PHP sind einige Hashmethoden fertig vorhanden und mit einem Einzeiler aufrufbar.
Skydevments Klasse hat noch zusätzlich, dass das Ganze mehrmals durchgeführt wird
und dabei auch gezielt Unsinnsdaten zum PW dazukommen.

Es gibt nämlich zB. Listen von häufigen Passwörtern, dazu problemlos die Hashes generiert,
und dann muss man nur die Hashes durchsuchen, ob der, den man knacken will,
vielleicht dabei ist. Diese Angriffsart wäre damit sinnlos.


----------



## Harry Fan8 (30. Dezember 2012)

Okay, danke für die Erklärung.  Bedeutet das also, dass man zwar nen Passwort verschlüsseln kann, aber bei der Anmeldung nicht mehr aufrufbar ist, oder wie? 

Oder ruft er dann bei der Anmeldung das verschlüsselte Passwort auf?

mfg harry


----------



## sheel (30. Dezember 2012)

...Ein Passwort kann man nicht aufrufen, und da ist nichts verschlüsselt.

Angenommen, du verschlüsselst/hasht gar nichts.
Registrierung: Benutzer gibt PW ein, wird in DB gespeichert.
Login: Benutzer gibt PW ein, wird mit dem in der DB verglichen.

Mit Hash:
Registrierung: Benutzer gibt PW ein, der Hash davon wird in DB gespeichert.
Login: Benutzer gibt PW ein, Hash wird berechnet, dann mit dem in der DB verglichen.


----------



## Harry Fan8 (30. Dezember 2012)

Okay habs nun verstanden. Dankeschön. 

Wie könnte denn so eine einfache Verschlüsselung aussehen? (von der salt- & round-Funktion abgesehen)

mfg harry


----------



## SkyDevMent (30. Dezember 2012)

Wie ich schon oben geschrieben habe sieht ein konkrete Umsetzunge eines einfach sicheren Passwortvergleichs genau so aus wie ich sie für dich geschrieben habe.

Aber wie sheel schon geschrieben hat geht das auch als Einzeiler

```
$password = hash('SHA512',$password);
```
hash()


----------



## sheel (30. Dezember 2012)

Harry Fan8 hat gesagt.:


> Okay habs nun verstanden.
> ...
> Wie könnte denn so eine einfache Verschlüsselung aussehen?


Das ist keine Verschlüsselung 

Skydevment hat ja gerade den Code für den eigentlichen Hash gezeigt.
Wenn du die Klasse mit wiederholtem Hashen und Salten nimmst musst du
a) eine Instanz von passwordAPI anlegen
b) davon die Methode crypt mit Passwort und Salt aufrufen
Einen Salt kannst du mit der Methode createASalt bekommen.


----------



## Harry Fan8 (30. Dezember 2012)

> Wie ich schon oben geschrieben habe sieht ein konkrete Umsetzunge eines einfach sicheren Passwortvergleichs genau so aus wie ich sie für dich geschrieben habe.
> 
> Aber wie sheel schon geschrieben hat geht das auch als Einzeiler
> PHP-Code:
> ...



Okay dankeschön. Ich werds direkt mal ausprobieren. 

EDIT: Das verschlüsseln funkt. einwandfrei. Nur wie krieg ich das nun hin, dass er beim Einloggen das Passwort miteinander vergleicht?

Ich hab das ohne Verschlüsserung immer so gemacht:

```
$benutzer = $_COOKIE['Benutzer'];
  
  $abfrage = "SELECT * FROM city";
  //$abfrageban = "SELECT * FROM ban WHERE Benutzer = ".$benutzer;
  $data = mysql_query($abfrage);
  //$databan = mysql_query($abfrageban);

  $eingabeUSER = $_POST['user'];
  $eingabeKENN = $_POST['kenn'];
  //$banUSER = $_COOKIE['Benutzer'];
  //$banGRUND = $_COOKIE['Grund'];

  $korrekt = "0";
  //$ban = "0";
  $zahl = 1;
  //$grund = "";
  
  while($row = mysql_fetch_object($data)) {
    $user = $row->Benutzer;
    $kenn = $row->Kennwort;
    $geld = $row->Geld;
	
	if (strcmp($user,$eingabeUSER) == 0) {
		if (strcmp($kenn,$eingabeKENN) == 0) {
			$korrekt = "1";
			echo "<b>Benutzername und Kennwort okay!</b><br>";
			setcookie("loginname",$eingabeUSER,time()+2592000,"/city");
			setcookie("loginpass",$eingabeKENN,time()+2592000,"/city");
			setcookie("ID",$zahl,time()+2592000,"/city");
			echo "Du bist nun erfolgreich angemeldet!<br>";
			echo "<a href=\"http://pspcity.comlu.com/\"><= zurück</a>";
		}
	}
  $zahl = $zahl + 1;
  }

  if ($korrekt == "0") {
    echo "<b>Benutzername oder Passwort nicht korrekt!</b><br>";
    echo "Bitte überprüfe deine Anmeldedaten und versuche es erneut!<br>";
  }
```

Nur wie krieg ich es nun hin, dass mit dem hash hin?

EDIT 2:
Hab das jetzt mal so gemacht, aber funkt. nicht. Hab auch in der DB Kennwort auf unique gestellt. Aber funkt. nicht. 

Hier ist der Code:

```
//$benutzer = $_COOKIE['Benutzer'];
  $kennwort = $_COOKIE['Kennwort'];
  
  $abfrage = "SELECT * FROM city";
  $data = mysql_query($abfrage);
  $abfragekenn = "SELECT * FROM city WHERE Kennwort = ".$kennwort;
  //$abfrageban = "SELECT * FROM ban WHERE Benutzer = ".$benutzer;
  $datakenn = mysql_query($abfragekenn);
  //$databan = mysql_query($abfrageban);

  $eingabeUSER = $_POST['user'];
  $eingabeKENN = $_POST['kenn'];
  $password = hash('SHA512',$_POST['kenn']);
  //$banUSER = $_COOKIE['Benutzer'];
  //$banGRUND = $_COOKIE['Grund'];

  $korrekt = "0";
  //$ban = "0";
  $zahl = 1;
  //$grund = "";
  
  while($row = mysql_fetch_object($data)) {
	$user = $row->Benutzer;
    $kenn = $row->Kennwort;
    $geld = $row->Geld;
	
	if (strcmp($user,$eingabeUSER) == 0) {
		
		if ($password == $datakenn) {
			$korrekt = "1";
			echo "<b>Benutzername und Kennwort okay!</b><br>";
			setcookie("loginname",$eingabeUSER,time()+2592000,"/city");
			setcookie("loginpass",$eingabeKENN,time()+2592000,"/city");
			setcookie("ID",$zahl,time()+2592000,"/city");
			echo "Du bist nun erfolgreich angemeldet!<br>";
			echo "<a href=\"http://pspcity.comlu.com/\"><= zurück</a>";
		}
	}
  $zahl = $zahl + 1;
  }

  if ($korrekt == "0") {
    echo "<b>Benutzername oder Passwort nicht korrekt!</b><br>";
    echo "Bitte überprüfe deine Anmeldedaten und versuche es erneut!<br>";
  }
```

mfg harry


----------



## roy15 (30. Dezember 2012)

statt 

```
$eingabeKENN = $_POST['kenn'];
```
so im oberen code

```
$eingabeKENN = hash('SHA512',$_POST['kenn']);
```

denk ich mal


----------



## SkyDevMent (30. Dezember 2012)

1) Das Passwort auf UNIQUE zustellen ist sehr ungünstig
2) Die Leserlichkeit deines Quellcodes ist grausam
3) musst nicht die Funcktion [phpf]strcmp[/phpf] verwenden um zwei Strings zu vergleichen dafür reicht ein einfaches ==
4) Eigenlich kann man einen Passwortvergleich in 5 Zeilen schreiben

```
$user['name']        = $_POST['Name'];
$user['password']  = hash('SHA512',$_POST['Passwort']);
$dbPass    = mysql_fetch_object(mysql_query("Select Passwort From User Where Username = ''$user['name']"));
if($dbPass->Passwort == $user['password'])
{
 // Passwort korrekt
}        
else
{
 // Passwort nicht korrekt
}
```


----------



## Harry Fan8 (30. Dezember 2012)

1) Okay, danke wußte ich nicht.^^
2) Der Code stammt noch damals von nen Freund von mir. Habs übernommen, da er es nicht mehr haben wollte.
3) Hab ich beim zweiten Code auch gemacht (if ($password == $datakenn) {). Aber wußte nicht wie ich das umstrukturieren sollte. Denn wie gesagt, der Code stammt noch von nen guten Freund von mir. 
4) Okay, ich werds mal ausprobieren. Kann das strcmp weg, also brauch ich das noch?

mfg harry


----------



## SkyDevMent (30. Dezember 2012)

Das strcmp brauchst du nicht, ich würde dringen raten noch mal ein paar Tutorials dir anzuschaun.

P.S. Ich hoffe das wir dir weiter helfen konnten

Mit freundlichen Grüßen
Leon Bergmann


----------



## Harry Fan8 (30. Dezember 2012)

Yep, bin auch noch nen Anfänger in PHP. Wie gesagt, hab damals den Code bzw. das Spiel (Browsergame) übernommen, ohne das ich überhaupt Erfahrung in sowas habe. Merkt man auch denk ich mal an den vielen Fragen, die ich stelle. ^^ Werde mir denk ich mal paar Tutorials anschauen, um PHP besser beherrschen zu können. 

Ok, vielen vielen Dank für eure Hilfe. Hoffentlich klappt's diesmal. Falls nicht melde ich mich noch einmal. Und ich wünsch euch jetzt schonmal nen guten Rutsch ins neue Jahr. 

mfg harry


----------



## ComFreek (30. Dezember 2012)

SkyDevMent hat gesagt.:


> P.S. Deine E-Mail überprüfung ist etwas veraltet, [phpf]ereg[/phpf] ist seit PHP 5.3.0 veraltet.



Okay, wenn wir schon dabei sind.

Die mysql-Erweiterung ist auch veraltet und zwar schon seit ziemlich langer Zeit.
Steige lieber auf MySQL*i* oder PDO um, aber nutze bitte NIEMALS mehr mysql!


----------



## Harry Fan8 (30. Dezember 2012)

ComFreek hat gesagt.:


> Okay, wenn wir schon dabei sind.
> 
> Die mysql-Erweiterung ist auch veraltet und zwar schon seit ziemlich langer Zeit.
> Steige lieber auf MySQL*i* oder PDO um, aber nutze bitte NIEMALS mehr mysql!



Was ist denn daran so schlimm MySQL statt MySQLi zu verwenden? Macht doch denk ich mal kaum einen Unterschied, oder? Nur vllt das MySQLi mehr Features bietet als MySQL.

mfg harry


----------



## ComFreek (30. Dezember 2012)

Nein, die alte Erweiterung wird

*a)* nicht mehr unterstützt und wird bald ganz entfernt! Hast du noch die die große rote Warnmeldung in der PHP-Doku gesehen (z.B. bei [phpf]mysql_query[/phpf])?

*b)* enthält zum Teil Sicherheitslücken

*c)* enthält nicht alle Features von MySQL 5

Allein, dass sie in Zukunft nicht mehr verfügbar sein wird, ist ein Grund, sie nicht mehr zu benutzen.

Siehe auch hier und hier.


----------



## Harry Fan8 (30. Dezember 2012)

Okay gut. Und wie kann ich am schnellsten von MySQL zu MySQLi wechseln? muss ich dafür irgendetwas runterladen, oder "einfach" nur die Scripts umschreiben?^^

mfg harry


----------



## SkyDevMent (30. Dezember 2012)

Letzeres musst du tun, ich arbeite momentan auch an einer entsprechenden Klasse.


----------



## Harry Fan8 (30. Dezember 2012)

argh.. aber wie kann ich den sehen, ob mein Webanbieter MySQLi überhaupt unterstützt? Muss man da auf irgendetwas achten? Oder hat das damit überhaupt gar nichts zu tun?


----------



## SkyDevMent (30. Dezember 2012)

Naja das einfachst ist du probierst das einfach aus


----------



## Harry Fan8 (30. Dezember 2012)

Okay, und wenn ein Error kommt, bedeutet das so vieles wie, dass mein Webanbieter das nicht unterstützt, oder?

EDIT: Wie siehts mit PHP aus. Muss man sich dort auch auf die neue Version umstellen, oder kann man das ruhig so lassen?

EDIT 2: Hab jetzt mal deinen Code, den du gepostet hast getestet, aber es kommt immer wenn die Seite kommt ne Warnung.


```
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/a6026839/public_html/city/system/login.php on line 10
```

Der Code:

```
$user['name'] = $_POST['user'];
	$user['password'] = hash('SHA512',$_POST['kenn']);
	$dbPass = $mysqli->fetch_object($mysqli->query("SELECT * FROM city WHERE Benutzer = ''.$user['name']"));
	
	if($dbPass->Passwort == $user['Kenn'])
	{
		echo "<b>Benutzername und Kennwort okay!</b><br>";
		/*setcookie("loginname",$eingabeUSER,time()+2592000,"/city"); //Ist erst einmal ausgeklammert, da erstmal der Fehler behoben werden muss.
		setcookie("loginpass",$eingabeKENN,time()+2592000,"/city");
		setcookie("ID",$zahl,time()+2592000,"/city");*/
		echo "Du bist nun erfolgreich angemeldet!<br>";
		echo "<a href=\"http://pspcity.comlu.com/\"><= zurück</a>";
	}        
	else
	{
		echo "<b>Benutzername oder Passwort nicht korrekt!</b><br>";
		echo "Bitte überprüfe deine Anmeldedaten und versuche es erneut!<br>";
	}
```

mfg harry


----------



## ComFreek (31. Dezember 2012)

Lies doch die Fehlermeldung, da sind die String-Quotes falsch gesetzt:

```
$dbPass = $mysqli->fetch_object($mysqli->query("SELECT * FROM city WHERE Benutzer = ''.$user['name']"));

// sollte folgendes sein
// (nicht zwei einzelne ', sondern ein "!)
$dbPass = $mysqli->fetch_object($mysqli->query("SELECT * FROM city WHERE Benutzer = ".$user['name']"));
```
Allerdings solltest du die Daten unbedingt vorher entschärfen, z.B. mit [phpf]mysqli_real_escape_string[/phpf] (bzw. OOP-Variante).
Du kannst aber auch (empfehlenswerter) Prepared Statements mit MySQLi benutzen: http://php.net/manual/de/mysqli.prepare.php

Tutorials gibt zu MySQLi und PDO zu hauf im Internet


----------



## Harry Fan8 (31. Dezember 2012)

Okay, das funktioniert jetzt zwar, aaaaaber nun hab ich das Problem, dass man sich mit jedem Passwort in den acc einloggen kann. Warum weiß ich auch nicht.

Hier ist der Code:

```
$user['name'] = $_POST['user'];
	$user['password'] = hash('SHA512',$_POST['kenn']);
	$dbPass = $mysqli->prepare($mysqli->query("SELECT * FROM city WHERE Benutzer = ".$user['name']));
	
	//$zahl = 1;
	
	$eingabeUSER = $_POST['user'];
	$eingabeKENN = $_POST['kenn'];
	
	if($dbPass->Kennwort == $user['Kenn'])
	{
		echo "<b>Benutzername und Kennwort okay!</b><br>";
		setcookie("loginname",$eingabeUSER,time()+2592000,"/city");
		setcookie("loginpass",$eingabeKENN,time()+2592000,"/city");
		//setcookie("ID",$zahl,time()+2592000,"/city");*/
		echo "Du bist nun erfolgreich angemeldet!<br>";
		echo "<a href=\"http://pspcity.comlu.com/\"><= zurück</a>";
	}        
	else
	{
		echo "<b>Benutzername oder Passwort nicht korrekt!</b><br>";
		echo "Bitte überprüfe deine Anmeldedaten und versuche es erneut!<br>";
	}  
	
	$mysqli->close();
```

EDIT: Okay, Problem gefunden. Hab vergessen bei der If-Anweisung $user['Kenn'] zu $user['password'] zu ändern. Nur nun hab ich das Problem, dass er jetzt gar keine Passwörter mehr erkennt. Er zeigt mir überall eine Fehlermeldung an:
"Benutzername oder Passwort nicht korrekt!
Bitte überprüfe deine Anmeldedaten und versuche es erneut!"
Egal, was man macht. Auch wenn man das Passwort richtig eingibt, zeigt er das an.


----------



## para_noid (31. Dezember 2012)

Da funktioniert gar nix.

Bitte die Manualseiten *genau* lesen. prepare erwartet als Parameter "The query, as a string.". query gibt dir true, false oder ein result zurück.

In beiden Fällen holst du das Ergebnis aber nicht ab. Wie man das machen kann, siehst du in den Beispielen auf den Manualseiten.
Prepared Statements büßen ihren Sicherheitsvorteil aber ein, wenn du keine Parameter verwendest. Vielleicht bleibst du erstmal bei einer Vorgehensweise (mit query), bis dein Script überhaupt funktioniert, und schaust dir dann erst die Möglichkeiten zur Verbesserung der Sicherheit an.

Wenn du Probleme bei Vergleichen von Variablen hast, gib dir vorher deren Inhalte mir var_dump() aus, damit du einsehen kannst, wo das Problem liegt.


----------



## Harry Fan8 (31. Dezember 2012)

Okay, dankeschön. Ich werds mal bei Gelegenheit testen. Bei Fragen meld ich mich nochmal und ich wünsche euch allen einen guten Rutsch ins neue Jahr.


----------

