Ik heb een tijdje geleden al meer inglogscripts gemaakt, maar op de een of andere manier werkt het (niet meer) of maak ik ergens een klein foutje. Dit is de code:

<?php
$username = $_POST['username_box'];
$password = $_POST['password_box'];

// Login data webmaster:

$username_webmaster = "webmaster";
$password_webmaster = "mypass";

if ($username == $username_webmaster && $password == $password_webmaster) {
header('Location: de pagina waar je naartoe wordt gestuurd'); // De pagina waar je naartoe wordt gestuurd wanneer er goed is ingelogd.
}
?>

Ik heb in de map "cp" het bestand "login.php" staan. Hier staat het html form met een textbox passwordbox en een submit button.
de textbox heet username_box en de passwordbox heet password_box

Ik weet dat het script niet echt veilig is maar ik wil toch graag weten wat ik nou precies fout gedaan heb.
Wat werkt er niet?

Error-reporting aanzetten.
Waar controleer je of het formulier verzonden is?
Waar controleer je of de $_POST-variabelen bestaan?
Waarom kopieer je de $_POST-variabelen?
Je header klopt niet.
Als de combinatie onjuist is, gebeurt er niets (je hebt geen else)
Mijn header klopt niet, dat is zo, het is onduidelijk ik zal het veranderen maar met "other page" bedoelde ik dat je naar de andere pagina gaat. In mijn echte script staat wel de goede pagina.

Ik maak PHP scripts met Microsoft WebMatrix die heeft automatische error reporting en geeft geen errors aan.

Obelix en Idefix op 26/06/2013 20:58:02

Waar controleer je of het formulier verzonden is?

Hoe moet ik dit controleren? Ik heb de 2 bestanden doorgezocht of het goede bestand wel is ingevuld bij "form_action=" en dat klopt allemaal. Er is ook een "POST" methode in het html form.
Obelix en Idefix op 26/06/2013 20:58:02

Waar controleer je of de $_POST-variabelen bestaan?

Ik snap dit niet helemaal, hoe moet ik dit controleren? In het PHP bestand staan de $_POST variabelen gewoon net zoals in het voorbeeld in het script.
Obelix en Idefix op 26/06/2013 20:58:02

Waarom kopieer je de $_POST-variabelen?

Hoezo heb ik deze gekopieerd?
Obelix en Idefix op 26/06/2013 20:58:02

Als de combinatie onjuist is, gebeurt er niets (je hebt geen else)

Nee, dat weet ik heb ik ook bewust gedaan, dit voeg ik later toe.
Controleren of formulier als POST verzonden is:

if($_SERVER['REQUEST_METHOD'] == 'POST') {
//Formulier verzonden...
}


Controleren of variabelen bestaan:

if(isset($_POST['var'])) {
// $_POST['var'] bestaat!
}


Met kopiƫren bedoelt hij dat je een extra variabelen ($username en $password) maakt, terwijl je ook gewoon $_POST['username'] kunt gebruiken.
Met isset() controleer je of $_POST variablen niet leeg zijn,
Dus <input type="text" name="username_box" value="vul gebruikersnaam in">

If (isset($_POST['username_box']))


Het is <form action="login.php" method="post"> zonder underscore


Het is allemaal wel vreemd. Ik heb nog steeds hetzelfde staan als eerst (zoals ik plaatste bovenaan topic) behalve de header() dan. Ik heb er else() bij gezet en weer een header() dat je bijvoorbeeld naar een pagina gaat die aangeeft dat je inloggegevens niet correct zijn. Naar deze pagina leiden doet hij dus wel, dat betekent dat ik volgens het script de verkeerde wachtwoord en/of gebruikersnaam heb ingevoerd terwijl die helemaal niet waar is. Ik heb gewoon de goede inloggegevens ingevoerd en toch denkt hij dat dit niet zo is? waar ligt dit dan aan?
Dan ligt het waarschijnlijk aan je formulier, kan je deze eens posten? Ik heb trouwens je code wat verbeterd:

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['username_box']) && isset($_POST['password_box'])) {
	if ($_POST['username_box'] == 'webmaster' && $_POST['password_box'] == 'mypass') {
		header('Location: de pagina waar je naartoe wordt gestuurd'); // De pagina waar je naartoe wordt gestuurd wanneer er goed is ingelogd.
	} else {
		echo 'Verkeerde gegevens!';
	}
}
?>
Dit is de code van mijn form:

<form id="form_2" name="frm01" action="../scripts/login_check.php" accept-charset="UTF-8" method="post" target="_self" enctype="text/plain" style="margin:0;position:absolute;left:321px;top:189px;width:318px;height:106px;">
<div style="position:absolute;left:8px;top:8px;width:95px;height:18px;overflow:hidden;">
<p class="Wp-Body-P"><label for="edit_3"><span class="Body-C-C0">Username:</span></label></p>
</div>
<input type="text" id="edit_3" name="username_box" value="" style="position:absolute; left:119px; top:8px; width:181px;">
<div style="position:absolute;left:8px;top:38px;width:90px;height:18px;overflow:hidden;">
<p class="Wp-Body-P"><label for="edit_4"><span class="Body-C-C0">Password:</span></label></p>
</div>
<input type="password" id="edit_4" name="password_box" value="" style="position:absolute; left:119px; top:38px; width:181px;">
<input type="submit" style="position:absolute; left:8px; top:68px; width:58px; height:22px;" name="btn_01" value="OK">
</form>
Haal enctype="text/plain" weg, dat is het probleem.

Ook is accept-charset en target="_self" onnodig.
Bij nagenoeg alle opmerkingen die ik plaats geef je aan niet te begrijpen wat ik bedoel. Misschien handig om (nog eens) een basistut door te nemen (over formulieren).

Code aub tussen code-tags. Dan is het leesbaar ;-)

Inline-css is niet meer van deze tijd.

Debuggen: echo in login_check.php eens de beide $_POST-waarden. Kloppen die wel met wat je invult in het formulier?

De html bestanden worden automatisch gemaakt door de website builder die ik gebruik nl. Serif WebPlus X6.
de PHP scripts maak ik wel zelf. Ik heb het altijd zo gedaan en werkte ook altijd tot nu dan. Ik zal proberen de code van het form de veranderen zoals me is verteld en kijken wat het resultaat is.

Reageren