Jump to content
- Werbung nur für Gäste -

IGNORIERT

Hab mehrere PHP Seiten Probleme auf meiner HP ...


JND3004

Recommended Posts

ich bin aber kein php profi... hab einfach mal kurz geschaut, kann sein das dass hier es richtige ist.

<?php

if(!isset($_POST['submit'])) return;


if(!isset($_POST['username']) || !isset($_POST['pass']) || !isset($_POST['email']) ||
empty($_POST['username']) || empty($_POST['pass']) || empty($_POST['email'])) {

$error_msg = "Das Formular wurde nicht vollständig ausgefüllt.";
return;

}

// EMAIL
if($_POST['email'][0] !== $_POST['email'][1]) {
$error_msg = "Die E-Mail-Adressen stimmen nicht überein.";
return;
}

// PASSWORT
if($_POST['pass'][0] !== $_POST['pass'][1]) {
$error_msg = "Die Passwörter stimmen nicht überein.";
return;
}

if(strlen($_POST['pass'][0]) > 30) {
$error_msg = "Das Passwort ist zu lang.";
return;
}

if(strlen($_POST['pass'][0]) < 8) {
$error_msg = "Das Passwort ist zu kurz.";
return;
}

$_POST['pass'] = hash('sha256', $_POST['pass'][0].$salt);


//USERNAME
if(strlen($_POST['username']) > 20) {
$error_msg = "Der Benutzername ist zu lang.";
return;
}

if(strlen($_POST['username']) < 3) {
$error_msg = "Der Benutzername ist zu kurz.";
return;
}

$_POST['username'] = trim($_POST['username']);

if(!filter_var($_POST['email'][0], FILTER_VALIDATE_EMAIL)) {
$error_msg = "Die E-Mail-Adresse ist ungültig.";
return;
}

$user_ip = ip2long ($_SERVER['REMOTE_ADDR']);

$sql = '
	INSERT INTO
				user
				(Username, Password, Email, IP, date)

	VALUES
				(?, ?, ?, ?, NOW())';

$stmt = $db->prepare($sql);
$pass = $_POST['pass'][0];
$email = $_POST['email'][0];
$stmt->bind_param('sssi', $_POST['username'], $pass, $email, $user_ip);

if(!$stmt->execute()) {

if(strpos($db->error, 'Duplicate') !== false) {
	$error_msg = "Der Benutzername oder die E-Mail wurde bereits verwendet.";
	} else {

$error_msg = "Es ist ein Fehler aufgetreten." . $db->error;
}
return;
}

$stmt->close();

$success_msg = "Das Benutzerkonto <b>".htmlspecialchars($_POST['username'])."</b> wurde erfolgreich angelegt";
?>

Link zu diesem Kommentar
Auf anderen Seiten teilen

- Werbung nur für Gäste -

<!-- FORMULAR -->
	<div style="border:2px solid black; padding: 15px; background: #678D0C">

<?php if(isset($error_msg) && !empty($error_msg)) : ?>
<div style="border:2px solid red; padding: 10px">
	<?php echo $error_msg; ?>
</div>

<?php endif; ?>

<?php if(isset($success_msg) && !empty($success_msg)) : ?>
<div style="border:2px solid lawngreen; padding: 10px">
	<?php echo $success_msg; ?>
</div>

<?php endif; ?>		

<form action="" method="post" >

<!-- USERNAME -->
<label for="username"> <b>Benutzername*:</b> </label><br/>
<input type="text" name="username" maxlength="20" size="50" id="username" value="" /><br/>
Der Benutzername muss mindestens 3 und darf maximal 20 Zeichen lang sein.<br/>

<br/>

<!-- PASSWORT -->
<label for="pass1"> <b>Passwort*:</b> </label><br/>
<input type="password" name="pass[]" maxlength="30" size="50" id="pass1" value="" /><br/>
Ein sicheres Kennwort sollte mindestens 8 Zeichen lang sein.</br>

<br/>

<!-- PASSWORT WDH. -->
<label for="pass2"> <b>Passwort wdh.*:</b> </label><br/>
<input type="password" name="pass[]" maxlength="30" size="50" id="pass2" value="" /><br/>
Bitte wiederholen Sie zur Sicherheit die Eingabe Ihres Kennworts!<br/>

<br/>

<!-- EMAIL ADRESSE -->
<label for="email1"> <b>E-Mail-Adresse*:</b> </label><br/>
<input type="text" name="email[]" size="50" id="email1" value="" /><br/>
Bitte geben Sie Ihre E-Mail-Adresse ein!<br/>

<br/>

<!-- EMAIL ADRESSE WDH. -->
<label for="email2"> <b>E-Mail-Adresse wdh.*:</b> </label><br/>
<input type="text" name="email[]" size="50" id="email2" value="" /><br/>
Bitte wiederholen Sie zur Sicherheit die Eingabe Ihrer E-Mail-Adresse!<br/>

<br/>

<input type="submit" name="submit" value="Registrieren" />
	</div>
</form>

sonst habe ich keine anderen seiten für das registrieren außer die eine seite wo alles zusammen geführt wird. aber daran kann es ja nicht liegen

<?php

$db = new mysqli('localhost', '*********', '*********', '***********');
$salt = "************************************";

require_once('registration_logic.php');
require_once('registration_markup.php');

?>

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aber was ist dann der fehler weil er legt die Datensätze an oO, ich dacht er erkennt den login nicht oder habe ich das jetzt falsch verstanden?

Prinzipiell legt er nach deinen Script die user immer an, egal was sie eingeben, aus das was mit den returns drin ist ein function ansonsten habe diese null zweck ;).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aber was ist dann der fehler weil er legt die Datensätze an oO, ich dacht er erkennt den login nicht oder habe ich das jetzt falsch verstanden?

Prinzipiell legt er nach deinen Script die user immer an, egal was sie eingeben, aus das was mit den returns drin ist ein function ansonsten habe diese null zweck ;).

ich hatte geschrieben das er alles beim registrieren angelegt hat, nur beim registrieren der daten in der datenbank hat er die verschlüsselung falsch gemacht. da er nur eine 9 hingemacht hat. und ich glaube das hat weniger etwas mit dem login zu tun. und der login funktioniert. dort sindvl paar kleine fehler aber die kann man auch noch später machen

Link zu diesem Kommentar
Auf anderen Seiten teilen

- Werbung nur für Gäste -

alles schön und gut. aber was soll ich denn jetzt machen? denn die seite die du mir gegeben hast, ist für mich nicht gerade hilfreich. man könnte es ja so machen das man gleich das ergebnis vor augen hat, so das man weis was man genau gleich eintragen muss

Vorheriger Post um 21:17

Post hinzugefügt um 21:47

achja, und außerdem. bevor das mit dem login alles funktionierte bei mir hatte er das mit dem verschlüsseln auch schonmal geschafft. nur jzt möchte es ja nicht mehr klappen

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich werde nochmal zur kompletten übersicht meine aktuellen probleme zeigen

*******************************************

wenn man sich registriert dann verschlüsselt er das pw in der datenbank nicht, sondern setzt nur ein einziges zeigen z.b. 9

und wenn man sich einloggen möchte, meint er halt eben das der benutzername oder das pw falsch wäre. könnt ihr mir vl weiter helfen?

*******************************************

ich habe folgende php seiten zu folgenden funktionen - sagt mir bitte welches ihr dann braucht

Registration

registration.php - dort werden die folgenden 2 seiten zusammengeführt

registration_logic.php - dort ist die gesamte logik drinne für das registrieren

registration_markup.php - dort ist das registrierformular

Login/Logout

login.php - dort werden die nächsten 4 seiten zusammengeführt

login_logic.php - dort ist die login logik drinne

login_markup_logged_in.php - der text für das login und der weiterleitung auf eine seite sowie der "abmelde" button

login_markup_logged_out.php - das login-feld zum einloggen

function.php - die login funktion sowie das mit dem hash etc.

Link zu diesem Kommentar
Auf anderen Seiten teilen

- Werbung nur für Gäste -

entferne mal die Zeile

$_POST['pass'] = hash('sha256', $_POST['pass'][0].$salt);

und ersetzte die Zeile weiter unten

$pass = $_POST['pass'][0];

durch

$pass = hash('sha256', $_POST['pass'][0].$salt);

das Problem ist ist nämlich das du das Array $_POST['pass'] durch ein String ersetzt. Und dann weiter unten mit $_POST['pass'][0] nur das erste Zeichen des Strings nimmst. Das Überschrieben von $_POST Variable sollte für gewöhnlich eh nicht gemacht werten, besonders wenn man so auch den Datentyp ändert (letzteres gilt auch für anderen Variablen).

Link zu diesem Kommentar
Auf anderen Seiten teilen

:D vielen dank. jzt verschlüsselt er die pw's wieder.

aber wenn ich mich jzt einloggen möchte, dann meint er das der benutzername oder pw falsch wäre

Vorheriger Post um 15:44

Post hinzugefügt um 15:45

ich hoffe der login.logic.php kann helfen

<?php

if(isset($_POST['logout'])) {
unset($_SEESION);
session_destroy();
return;
}

if(!isset($_POST['submit'])) return;

if(!isset($_POST['username']) || !isset($_POST['password']) ||
empty($_POST['username']) || empty($_POST['password'])) {
$error_msg = "Das Formular wurde nicht vollständig ausgefüllt.";
return;
}

if(login($_POST['username'], $_POST['password'], $db, $salt)) {
header('Location: login.php');
} else {
$error_msg = "Der Benutzername oder das Passwort ist falsch.";
}	

?>

ich hatte selber auch schon rumgeschaut und probiert, aber nie den fehler gefunden

Link zu diesem Kommentar
Auf anderen Seiten teilen

wo kommt die login Funktion her?

also die von der zeile hier:

if(login($_POST['username'], $_POST['password'], $db, $salt))

diese war schon immer dort. es hatte ja auch schonmal funktioniert. ich habs ja alles aus dem vid tut abgeschrieben und je nach dem für mich verändert

Link zu diesem Kommentar
Auf anderen Seiten teilen

- Werbung nur für Gäste -

immer doch :D

login.php

<?php
session_start();
?>
<html>
<head>
<meta name="keywords" content="Games, Block, Entertainment, offiziell" />
<meta name="description" content="Die offizielle Homepage von BlockEntertainment" />
<meta name="robots" content="INDEX,FOLLOW" />

<link rel="stylesheet" type="text/css" href="../../css/layout.css" />

<title>Login/Logout - BlockEntertainment</title>

<?php include_once("../../phpinclude/bodyscript.php") ?>

</head>
<body>
<div id="headwrapper"><img src="../../img/titelbild.png" width="1000" height="210" /></div>

<?php include_once("../../phpinclude/games_navibar.php") ?><br/>

<!-- ANMELDEN -->
<h1><u>Anmelden</u></h1><br/><br/>

<?php

$db = new mysqli('localhost', '*********', '*********', '******************');
$salt = "**************************************************";

require_once('function.php');
require_once('login_logic.php');

if(check_login() == false) {
require_once('login_markup_logged_out.php');
} else {
require_once('login_markup_logged_in.php');
}

?>
</body>
</html>

function.php

<?php

function login($username, $password, $db, $salt) {
$password = hash('sha256', $password.$salt);

$sql = '
		SELECT
				COUNT(*)
		FROM
			user
		WHERE
			Username = ?
		AND
			Password = ?
						';

$stmt = $db->prepare($sql);
$stmt->bind_param('ss', $username, $password);
$stmt->execute();
$stmt->bind_result($result);
$stmt->fetch();
$stmt->close();

if($result == 1) {
	$_SESSION['logged_in'] = true;
	$_SESSION['username'] = $username;
	return true;

} else {
	return false;
}
}
function check_login() {
if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) {
	return true;
}
return false;
}
?>

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, de Fehler hat sich sehr gut versteckt. Das Problem deine Datenbank Feld Password ist zu kurz. Der Hash wert hat eine Länge von 64 Zeichen. Das Feld lässt aber nur 30 zu. Sprich du musst das Feld von Password varchar(30) auf Password varchar(64) ändern und die Passwörter noch einmal neu eintragen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

sry aber lern doch erstmal die grundkenntnisse bevor du dich an php machst

nach einen tutorial lernst du nichts ^^..

php kann ich eigentlich schon einigermaßen nur mit datenbanken hatte ich halt nur wenig zu tun

und noch dazu lese dir deine errors genau durch dort wird dir alles gesagt wo der fehler steckt ..

sry, aber errors werden nicht angezeigt, denn sonst hätte ich es wohl schon gefunden die fehler ;)

denn wenn du paar seiten zurück gehst siehst du das ich auch mal fehlermeldungen hinzugefügt hab, da sie auch angezeigt wurden ;)

Vorheriger Post um 17:07

Post hinzugefügt um 17:10

Ok, de Fehler hat sich sehr gut versteckt. Das Problem deine Datenbank Feld Password ist zu kurz. Der Hash wert hat eine Länge von 64 Zeichen. Das Feld lässt aber nur 30 zu. Sprich du musst das Feld von Password varchar(30) auf Password varchar(64) ändern und die Passwörter noch einmal neu eintragen.

ich würde es ja gerne ausprobieren, aber die datenbank möchte nicht geladen werden -.-

ist heute i-wie lahm :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.
Wende dich an einen Admin, wenn du in diesem Thema etwas posten möchtest.

×
×
  • Neu erstellen...