• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Logindaten mit MySQL-Eintrag überprüfen

Status
Für weitere Antworten geschlossen.

Sn0opy

Neues Mitglied
Hey, ich sitze grad an meinem eigenen sehr sehr simplen Forum und hab ein gewisses Problem, dass ich grad ein totales Blackout habe, wie ich die Daten richtig überprüfe, die ich in einem Formular (Benutzer und Passwort) eingebe.

PHP:
<?php 
if ('login.php' == basename($_SERVER['SCRIPT_FILENAME'])) {
	include 'header.php';
}

include 'inc/config.php';
?>

<div id="login">
<form action="login.php" method="post">
	<table>
		<tr>
			<td>Username: </td>
			<td><input type="text" name="username" /></td>
			<td>Passwort: </td>
			<td><input type="password" name="passwort" /></td>
			<td><input type="submit" name="submit" /></td>
		</tr>
	</table>
	</form>
</div>

<?php
if(isset($_POST['submit'])) {
	$_username = $_POST['username'];
	$_password = $_POST['password'];
	$query = mysql_query("SELECT * FROM users WHERE username='$_username' AND password='$_password'") OR die(mysql_error());
	
	if(mysql_num_rows($query) > 0) {
		echo 'Test';
	}


}
?>

Ich hab nun schon auf mehreren Seiten bzw. im Internet gesucht, allerdings nie eine direkte Antwort auf mein Problem gefunden, da die Scripte meist so komplex waren, dass ich nicht erkennen konnte, was zu was gehört :P

Durchs einloggen sollen später dann noch Cookies gesetzt werden.

//Edit: Ganz vergessen, mein Problem zu schildern. Also, die Daten, die ich versuche einzugeben, existieren in der DB, aber wenn ich sie auch richtig eingebe, bekomm ich kein "Test" zurück.
 
Versuchs mal ohne Underscore (_) im Variablennamen, vielleicht funktionierts dann.


btw: Schau dir den 2. Link in meiner Signatur an.
 
An den "_" lag es leider nicht. Außerdem benutze ich sie auch beim Registrieren und da gibts rein gar keine Probleme.
 
Dann ist vermutlich $_PSOT['submit'] nicht gesetzt, versuchs mal mit so einer Abfrage:

PHP:
if(isset($_POST['username'])){
  //usw.
}
 
Hallo,

der POST für das Kennwort ist falsch.

Du schreibst

PHP:
$_password = $_POST['password'];
Und im Formular heist es momentan aber "passwort"

Code:
[COLOR=#000000]<td><input type="password" name="passwort" /></td> [/COLOR]

Entweder änderst Du den POST oder den Formularnamen - ich würde die Änderung am Formular vorziehen um alles in Englisch zu belassen.

Also so ...

Code:
[COLOR=#000000]<td><input type="password" name="password" /></td> [/COLOR]
Gruß Sven
 
Awww, welch blöder Fehler :D Da versucht man seinen Code auf Englisch zu halten und dann schleicht sich die deutsche Sprache doch immer wieder rein.

Danke dafür. Nun funktioniert auch alles so weit :)

Wollt nun nicht unbedingt einen neuen Thread dazu eröffnen. Hat außerdem auch leicht was mit dem Theme zu tun.

Also, ich würde mein Loginsystem gerne so erweitern, dass man Zugriff auf bestimmte Dinge auf anderen Seiten hat, wenn man sich bereits eingeloggt hat. Dazu verwende ich Cookies.

Mein Problem ist nun, dass ich beim erfolgreichen Login Cookies setzen will und immer "Cannot modify header information - headers already sent by..." ausgegeben bekomme.

//Edit: Ok, warum diese Meldung kommt, weiß ich nun. Es liegt daran, dass ich Daten ausgebe, bevor ich die Cookies setze. Anderes Problem ist da nun aber, dass ich nicht unbedingt wieß, wie ich das lösen kann.

Edit Doppelpost zusammengeführt (Frank)
 
Zuletzt bearbeitet von einem Moderator:
Hm, ich komme leider nicht wirklich weiter. Hier mal ein Ausschnitt aus meinem Code.

PHP:
<div id="login">
<form action="index.php" method="post">
	<table>
		<tr>
			<td>Username: </td>
			<td><input type="text" name="username" /></td>
			<td>Passwort: </td>
			<td><input type="password" name="password" /></td>
			<td><input type="submit" name="submitbtn" value="Login" /></td>
		</tr>
	</table>
	</form>
</div>
<?php
if(isset($_POST['submitbtn'])) {
	$username = $_POST['username'];
	$password = $_POST['password'];
	$query = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'") OR die(mysql_error());
	
	if(mysql_num_rows($query) == 1) {
		setcookie("username", "test2", 3600, "/");
		setcookie("password", "test", 3600, "/");
		ob_end_flush();
		echo 'done';
	}
}
?>

Wie man sieht wird beim Absenden des Usernamen und des Passwörts geprüft, ob es diesen User gibt. Wenn ja, sollen die Cookies gesetzt werden, was nicht passiert. Ich hab eine index.php in der ich die einzelnen Elemente einbinde. Am Anfang von ihr steht folgendes:

PHP:
<?php
ob_start();
include 'header.php';
include 'inc/config.php';
include 'navigation.php';
?>

Hoffe ihr wisst, wieso die Cookies nicht gespeichert werden.
 
Warum benutzt du nicht Sessions? Die sind nicht so einfach manipulierbar wie Cookies ;)
 
Wäre auch eine Möglichkeit, müsste ich mich nun nochmal einlesen. Ich melde mich, wenn es Problem gibt xD

Also ich habe ziemliche Probleme mit den Sessions. Wäre wikrlich sehr nett, wenn sich jemand bei mir in ICQ, oder MSN, oder sonstwo melden kann. Möchte ungern nun den kompletten Code offen tun.

EDIT Doppelpost zusammengeführt (Frank)
 
Zuletzt bearbeitet von einem Moderator:
Sessions sind relativ einfach zu benutzen

Schreib auf jede Seite in die Erste Zeile (vor jeglicher Ausgabe)
PHP:
session_start()
Jetzt kannst du darin werte spiechern
PHP:
$_SESSION["xXx"] = "irgendwas"
auf einer anderen Seite kannst du dann
PHP:
echo $_SESSION["xXx"];
machen und du bekommst den wert.

Ein login kannst du z.B. so prüfen, dass du beim Login $_SESSION["login"] = true; machst und dann auf den anderen seiten if(!$_SESSION["login"]) die("nicht eingeloggt");

PS. Bitte keine Doppelposts mehr -.-
 
in den meisten fällen würde da nix passieren, denn du müsstest erstma den den Befehl davor und dahinter als ungültig darstellen, damit deiner Dann ausgeführt wird.

Die Grundidee die du hast ist 'MySQL Injection'.
Verhindert man aber ganz einfach über mysql_real_escape_string()
 
du musst mir nicht erklären worauf ich hinaus wollte, dennoch wäre es durchaus möglich bei dem vorhandenen skript.

es gibt diverse arten von "schwachstellen".

ich kann das buch "php - Sicherheit " empfehlen, ich meine es ist von dpunkt.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben