Hallo,

Ik heb een registratieformulier aangemaakt, en gebruikers kunnen hun gebruikersnaam en wachtwoord gewoon opgeven. En deze worden dan in de mysql database opgeslagen.

Ik gebruik niet meer dan volgende regel hiervoor.
mysql_query("INSERT INTO users (username, password) VALUES ('$username','$password')");

Maar de wachtwoorden worden gewoon als tekst opgeslagen in mijn mysql tabel(varchar). Hoe kan ik dit beter beveiligen zodat het wachtwoord gehashed word. En hoe unhash in het terug zodat ze nog wel steeds kunnen aanmelden?

Thanks!
Kijk. de twee waarschuwingen die je krijgt zijn omdat de $_POST['?'] variabelen niet altijd beschikbaar zijn.
Je moet daarom eerst isset() gebruiken om te controleren of ze aanwezig zijn

Daarnaast in het algemeen controleer je of een formulier verstuurd is door het volgende te gebruiken

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// ahhh de gebruiker heeft waarschijnlijk een gebruikersnaam en wachtwoord ingevuld en op Login geklikt
}
?>

Waar ik persoonlijk aan hekel is waarom je het formulier naar een ander PHP bestand laat sturen (checklogin.php)
Waarom laat je het attribuut action="" niet gewoon leeg zodat je op dezelfde pagina blijft? Je kunt dan namelijk direct het formulier nog een keer voorschotelen (met een foutmelding) als een gebruiker niet de goede combinatie username/password heeft ingevuld.

Eigenlijk komt het neer op mijn voorbeeld in dit topic: http://www.phphulp.nl/php/forum/topic/controle-email-adress/97365/

Kortom zorg eerst even dat je het formulier op de juiste wijze gaat afhandelen
Ik heb er altijd een hekel aan als PHP en html door elkaar staan.
Waarom doe je niet gewoon met Composer de bestanden binnehalen die je wilt zodat alles ook netjes te unittesten is.

Weg met procudurele PHP! En allemaal netjes OOP leren. Ookal ken je nog geen PHP, je hebt procedurele PHP niet nodig dat kan je ook leren terwijl je PHP OOP leert.

Wie is ervoor!
Ik, maar je kan het niemand natuurlijk verplichten. OOP is een behoorlijke leercurve en verder moet iemand er wel voor openstaan.

Iemand die zelden wat met PHP doet, en zijn tijd liever besteed aan andere zaken heeft weinig aan OOP. Daarom mogen we blij zijn dat PHP zowel procedureel als object-georienteerd kan, tot in tegenstelling van de meeste andere programmeertalen.
Ik snap Rickert ook wel.. Als je het OOP eenmaal in de vingers hebt dan zie de voordelen en wil je niet meer zonder.
Aan de andere kant is het absoluut geen vereiste om een correct werkend PHP script te verkrijgen. Je kunt met procedureel hetzelfde eindresultaat bereiken. Voor de beginners vind ik het persoonlijk belangrijker dat ze de logica gaan snappen van een aantal zaken die hier bijna dagelijks aan bod komen.
Ja om OO te leren zal ik nu geen tijd voor hebben.

Ik heb even gecheckt of die post iets verstuurd. Nu daar zit blijkbaar het probleem want er komt niets binnen.
Nochtans heeft dit script altijd gewerkt vooraleer ik begon met die hash en admin levels. Ja ik snap dat je de code ook in login.php zou kunnen maken, maar zou het nu graag zo afwerken.

Iemand een idee waarom er niets meer doorkomt?

Dit is mijn checklogin.php

<?php
include("password.php");
session_start();

$bool = true;


if($_SERVER['REQUEST_METHOD']=="POST")
{

print '<script>alert("niets verzonden!");</script>';
print '<script>window.location.assign("login.php");</script>';


mysql_connect("localhost", "root", "usbw") or die (mysql_error()); //Connectie naar de server
mysql_select_db("first_db") or die ("Cannot connect to database"); //Connect naar de database

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$query = mysql_query("Select * from users WHERE username='$username'"); // Query de users tabel
$exists = mysql_num_rows($query); //checked of de gebruikersnaam bestaat
$table_users = "";
$table_password = "";



if($exists > 0) //Als er geen resultaten zijn of geen bestaande username is
{
while($row = mysql_fetch_array($query)) // Toont alle rijen van de query
{
$table_users = $row['username']; // De eerste gebruikersnaam rij word doorgegeven naar $table_users, en hij doet dat tot heel de query is afgelopen
$table_password = $row['password']; // De eerste wachtwoorden rij word doorgegeven naar de $table_password, en hij doet dat tot heel de query is afgelopen
$admin = $row['admin'];
}
if ($admin == 'yes') {
if(($username == $table_users) && password_verify($password, $table_password) && ($admin == 'yes'))// checked of er een match is
{

if ($password == $table_password) {
$_SESSION['user'] = $username;
$_SESSION['admin'] = $admin;
header("location: home.php");



} else {
print '<script>alert("Incorrect username!");</script>';
print '<script>window.location.assign("login.php");</script>';
}
} else {
print '<script>alert("Incorrect Password!");</script>';
print '<script>window.location.assign("login.php");</script>';
}
} else {
print '<script>alert("Acces denied!");</script>';
print '<script>window.location.assign("login.php");</script>';
}
}
}
else
{
print '<script>alert("niets verzonden!");</script>';
print '<script>window.location.assign("login.php");</script>';

}
?>


Dit is mijn login.php

<html>
    <head>
        <title>Mijn restaurant</title>
    </head>
    <body>
        <h2>Login Pagina</h2>
        <a href="index.php">Terug naar home </a><br/><br/>
        <form action="checklogin.php" method="POST">
           Vul gebruikersnaam in: <input type="text" name="username" required="required" /> <br/>
           Vul wachtwoord in: <input type="password" name="password" required="required" /> <br/>
           <input type="submit" value="Login"/>
        </form>
    </body>
</html>

Op regel 11 is er juist wel iets verzonden.
regels 11, 12 eruit.

regel 19 : $password = $_POST['password'];
(liever nog in de rest van je script $_POST['password'] gebruiken, maar ik verwacht dat je dan nog grotere puinhoop maakt.

op regel 38

var_dump($password);
var_dump($table_password);

[size=xsmall]Toevoeging op 10/03/2015 11:31:30:[/size]

en die dump mag evt ook tussen regel 34 en 35, mocht het niets opleveren.
Thanks,

Nu krijg ik de volgende melding

Parse error: syntax error, unexpected 'else' (T_ELSE) in D:\USBWebserver v8.6\root\restaurant\checklogin.php on line 53





<?php
include("password.php");
session_start();

$bool = true;


if($_SERVER['REQUEST_METHOD']=="POST")
{



mysql_connect("localhost", "root", "usbw") or die (mysql_error()); //Connectie naar de server
mysql_select_db("first_db") or die ("Cannot connect to database"); //Connect naar de database

$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$query = mysql_query("Select * from users WHERE username='$username'"); // Query de users tabel
$exists = mysql_num_rows($query); //checked of de gebruikersnaam bestaat
$table_users = "";
$table_password = "";



if($exists > 0) //Als er geen resultaten zijn of geen bestaande username is
{
while($row = mysql_fetch_array($query)) // Toont alle rijen van de query
{
$table_users = $row['username']; // De eerste gebruikersnaam rij word doorgegeven naar $table_users, en hij doet dat tot heel de query is afgelopen
$table_password = $row['password']; // De eerste wachtwoorden rij word doorgegeven naar de $table_password, en hij doet dat tot heel de query is afgelopen
$admin = $row['admin'];
}
if ($admin == 'yes') {
if(($username == $table_users) && password_verify($password, $table_password) && ($admin == 'yes'))// checked of er een match is
var_dump($password);
var_dump($table_password);

{

if ($password == $table_password) {
var_dump($password);
var_dump($table_password);
$_SESSION['user'] = $username;
$_SESSION['admin'] = $admin;
header("location: home.php");



} else {
print '<script>alert("Incorrect username!");</script>';
print '<script>window.location.assign("login.php");</script>';
}
} else {
print '<script>alert("Incorrect Password!");</script>';
print '<script>window.location.assign("login.php");</script>';
}
} else {
print '<script>alert("Acces denied!");</script>';
print '<script>window.location.assign("login.php");</script>';
}
}
}
else
{
print '<script>alert("niets verzonden!");</script>';
print '<script>window.location.assign("login.php");</script>';

}
?>
even je accolades nakijken. Een goede PHP editor helpt ook
En fatosnelijk inspringen kan ook geen kwaad:


<?php

include("password.php");
session_start();

$bool = true;


if ($_SERVER['REQUEST_METHOD'] == "POST") {



    mysql_connect("localhost", "root", "usbw") or die(mysql_error()); //Connectie naar de server
    mysql_select_db("first_db") or die("Cannot connect to database"); //Connect naar de database

    $username = mysql_real_escape_string($_POST['username']);
    $password = $_POST['password'];
    $query = mysql_query("Select * from users WHERE username='$username'"); // Query de users tabel
    $exists = mysql_num_rows($query); //checked of de gebruikersnaam bestaat
    $table_users = "";
    $table_password = "";



    if ($exists > 0) { //Als er geen resultaten zijn of geen bestaande username is
	while ($row = mysql_fetch_array($query)) { // Toont alle rijen van de query
	    $table_users = $row['username']; // De eerste gebruikersnaam rij word doorgegeven naar $table_users, en hij doet dat tot heel de query is afgelopen
	    $table_password = $row['password']; // De eerste wachtwoorden rij word doorgegeven naar de $table_password, en hij doet dat tot heel de query is afgelopen
	    $admin = $row['admin'];
	}
	if ($admin == 'yes') {
	    if (($username == $table_users) && password_verify($password, $table_password) && ($admin == 'yes')) { // checked of er een match is
	    var_dump($password);
	    var_dump($table_password); 

		if ($password == $table_password) {
		    var_dump($password);
		    var_dump($table_password);
		    $_SESSION['user'] = $username;
		    $_SESSION['admin'] = $admin;
		    header("location: home.php");
		} else {
		    print '<script>alert("Incorrect username!");</script>';
		    print '<script>window.location.assign("login.php");</script>';
		}
	    } else {
		print '<script>alert("Incorrect Password!");</script>';
		print '<script>window.location.assign("login.php");</script>';
	    }
	} else {
	    print '<script>alert("Acces denied!");</script>';
	    print '<script>window.location.assign("login.php");</script>';
	}
    }
} else {
    print '<script>alert("niets verzonden!");</script>';
    print '<script>window.location.assign("login.php");</script>';
}
?>


De fout was dat je na je if op lijn 34 geen { had staan, en die op een losse plek twee regels verder had staan.

Reageren