Je zegt "kan maar niet inloggen". Waaruit blijkt dit? Krijg je een foutmelding? Is op andere pagina's $_SESSION['gebruikersnaam'] onbekend? Iets anders?
Geef de query eens weer op het scherm, en knip en plak deze in een tool waarmee met je met je database kunt praten (phpMyAdmin of rechtstreeks in de console) en kijk of je resultaat krijgt?
Bouw wat breekpunten in of geef wat tekst weer op het scherm als in code aan bepaalde condities is voldaan zodat je weet welk pad de code kiest om uitgevoerd te worden, dit stuurt je mogelijk richting enige fout die aanwezig kan zijn.
Wat opmerkingen:
- na een header('Location: ...'); hoort meestal een exit; te staan, omdat het zelden tot nooit de bedoeling is dat er daarna nog code wordt uitgevoerd, een header stuurt je niet meteen automagisch naar de nieuwe locatie
- elke pagina waar je een sessie wilt starten of voort wil zetten dient altijd te beginnen met session_start(), daarna kun je $_SESSION gebruiken
- password is een gereserveerd woord in MySQL, als je deze in een query wilt gebruiken doe je er verstandig aan om deze kolom te omvatten met `backticks`, of wellicht beter, om een andere naam voor deze kolom te kiezen
- SQL-injectie voorkom je niet door stripslashes(), de enige veilige combinatie in deze opzet is gebruikmaking van de real_escape_string() functie/methode in combinatie met 'quotes', het een is niet veilig zonder het ander
Dat staat er los van.
Ik zou eerder kijken wat er precies gebeurd, en welke stappen er wel en niet worden doorlopen.
Met andere woorden... debug je script eens door na elke gebeurtenis een echo te plaatsen, en kijk eens wat er precies gebeurd.
Je script is verder gezien de syntax correct.
Errors zou je ook moeten zien.
Het zou zelfs zoiets kunnen zijn als een sessie-directory die niet schrijfbaar is ofzo, maar ja, eerst moet er een soort van stapsgewijze analyse plaatsvinden zodat het probleem vastgesteld kan worden, daarna kan je gaan kijken naar oplossingen.
EDIT: bijvoorbeeld, als je na het verzenden van het loginformulier niet wordt doorgestuurd naar index.php houdt dit simpelweg in dat niet voldaan is aan de conditie dat er één resultaatrij voor de query was. Dat kan weer inhouden dat er géén resultaten waren, of méér dan één (staan er toevallig records dubbel in de logintabel?). Het is vaak een kwestie van uitzoeken waar het schip precies strandt, en dan terugwandelen om te zien waar deze precies op de rotsen liep :p.
Maar je zegt dat het niet werkt, maar waar blijkt dat nou uit?
name en ID zijn twee verschillende dingen. Met name identificeert je een formulierveld voor formulierafhandelingen.
if empty post gebruikersnaam is de naam van mijn textbox veld die hij moet uitlezen. en dan maak ik een variable aan waar ik de gebruikersnaam opsla in $username.
mijn code nu ik heb breaks gebruikt, boven aan een error check en jou functie erbij.
<?php
// Start de sessie
session_start();
error_reporting(E_ALL);
ini_set('display_errors', '1');
// Vereist config
require('config.php');
debugBreak(error);
// Variablen voor error bericht
$error=''; // Variable To Store Error Message
if (isset($_POST['submit'])) {
if (empty($_POST['gebruikersnaam']) || empty($_POST['password']))
{
$error = "Username or Password is invalid";
}
else
{
// Globale variablen
$username = trim($_POST['gebruikersnaam']);
$password = trim($_POST['password']);
// MySQl injectie beschermen
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysqli_real_escape_string($username);
$password = mysqli_real_escape_string($password);
// Select de database
$db = msqli_select_db($msqli, "studenten");
debugBreak(error);
// Query selecten
$query = mysqli_query($mysqli, "SELECT * FROM 'studenten' WHERE naam='$username'
AND password='$password'");
debugBreak(error);
$rows = mysqli_num_rows($query);
if($rows == 1){
// Redirect user to index.php
header("Location: index.php");
exit();
}
else
{
$error = "credentials not good";
}
mysqli_close($mysqli);
}
}
?>
<?php
// declareren
function escape($string) {
return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
function dump($array) {
?><pre><?php echo escape(print_r($array, true)); ?></pre><?php
}
// aanroepen
dump($_POST);
?>