Archief - PHP: login ( again )

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

little

Legacy Member
dag allemaal,

aangezien ik me aan het bijscholen ben in php, moet ik voor mijn avondlessen een loginsysteem maken. Velen onder jullie vinden dit natuurlijk heel gemakkelijk, maar toch zit ik ergens met een fout die ik niet kan vinden. ( en ja, ik heb de search functie gebruikt en al veel op google etc gezocht. Zelfs de bestanden van mijn leerkracht bieden geen uitweg. )

Dus moesten jullie me wat verder op weg kunnen helpen, zou ik dat enorm appreciëren.

alvast bedankt!

**CY**

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>

<?php

mysql_connect(" ** "," ** "," ** ") or die(mysql_error());
mysql_select_db(" ** ") or die(mysql_error());

$sqlresult = mysql_query("SELECT * FROM bf_users WHERE usernaam='".$_POST["gebruikersnaam"]."' && paswoord='".$_POST["paswoord"]."'");



if($sqlresult) {
	$record = mysql_fetch_assoc($sqlresult);
		
	if($_POST["gebruikersnaam"] == $record["usernaam"] && $_POST["paswoord"] == $record["paswoord"]) {
		if($_POST["gebruikersnaam"] > 0 && $_POST["paswoord"] > 0 ) {
			$loginok = 1;
		}
	}

}
	
if($loginok > 0) {
	echo "je bent nu ingelogd";
} else {	
	echo "je login was verkeerd, probeer opnieuw";
}


?>

</head>

<body>
<form action="" method="post">
naam: <br />
<input type="text" name="gebruikersnaam" /> <br />
paswoord: <br />
<input type="password" name="paswoord" /> <br />
<input type="submit" name="versturen" /> <br />
</form>

</body>
</html>

WHiSPy

Legacy Member
Doe eens aan deftige errorhandling en invoercontrole?

PHP:
$sqlresult = mysql_query("SELECT * FROM bf_users WHERE usernaam='".$gebruikersnaam."' && paswoord='".$paswoord."'") OR DIE(mysql_errorno.' : '.mysql_error);

Die gebruikersnaam en paswoord variablen zijn uiteraard eerst door de invoercontrole gehaald.

omfg

Legacy Member
ipv dit: (wat niet helemaal klopt)
PHP:
if($sqlresult) {
	$record = mysql_fetch_assoc($sqlresult);
		
	if($_POST["gebruikersnaam"] == $record["usernaam"] && $_POST["paswoord"] == $record["paswoord"]) {
		if($_POST["gebruikersnaam"] > 0 && $_POST["paswoord"] > 0 ) {
			$loginok = 1;
		}
	}

}
probeer eens dit:
PHP:
if(mysql_num_rows($sqlresult) != 0) {
	$loginok = 1;
}
aangezien je zeker bent dat de naam & wachtwoord kloppen als je query iets bevat..

Rvl

Legacy Member
vrij simpel na te gaan wat er mis is in je script,

controleer of je $_POST array de juiste gegevens bevat
controleer of u db connectie in orde is en je dus gegevens kunt ophalen
controleer daarna u input gegevens met u gegevens uit db en normaal zouden ze moeten overeenstemmen.
Je zou ook met een klasse (zoals bv simpletest) kunnen werken die controleert of je data klopt met de verwachte resultaten, zo ga je altijd kunnen nagaan waar de fout zich situeert.

Indien dit dan werkt zou ik naar de opmerking van whispy eens kijken en wat meer "veiligere" scripts maken.

little

Legacy Member
he probleem is dat

Code:
	echo "je bent nu ingelogd";

meteen wordt weergegeven... de db connectie , table etc zijn allemaal juist

zie : http://www.bubblefish.be/login.php

heb de code ondertussen veranderd naar

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>

<?php

mysql_connect("**","**","**") or die(mysql_error());
mysql_select_db("**") or die(mysql_error());

$gebruikersnaam = $_POST["gebruikersnaam"];
$paswoord = $_POST["paswoord"];

$sqlresult = mysql_query("SELECT * FROM bf_users WHERE usernaam='".$gebruikersnaam."' && paswoord='".$paswoord."'") or die(mysql_error());



if($sqlresult) {
	$record = mysql_fetch_assoc($sqlresult);
		
	if($gebruikersnaam == $record["usernaam"] && $paswoord == $record["paswoord"]) {
			$loginok = 1;
		}

}
	
if($loginok) {
	echo "je bent nu ingelogd";
} else {	
	echo "<form action=\"\" method=\"post\">";
	echo "naam: <br />";
	echo "<input type=\"text\" name=\"gebruikersnaam\" /> <br />";
	echo "paswoord: <br />";
	echo "<input type=\"password\" name=\"paswoord\" /> <br />";
	echo "<input type=\"submit\" name=\"versturen\" /> <br />";
	echo "</form>";
}



?>

</head>

<body>


</body>
</html>

omfg

Legacy Member
het probleem ligt bij je controle...
PHP:
$sqlresult = mysql_query("SELECT * FROM bf_users WHERE usernaam='".$gebruikersnaam."' && paswoord='".$paswoord."'") or die(mysql_error());



if($sqlresult) {
	$record = mysql_fetch_assoc($sqlresult);
		
	if($gebruikersnaam == $record["usernaam"] && $paswoord == $record["paswoord"]) {
			$loginok = 1;
		}

}
als je form niet gesubmit is zijn je $gebruikersnaam & $paswoord leeg, dus haalt hij niets uit de database, bijgevolg is $gebruikersnaam (leeg) gelijk aan $record["usernaam"] (ook leeg), idem met $paswoord & $record["paswoord"].

probeer het eens zoals ik hierboven zei:
PHP:
if(!empty($paswoord) && !empty($gebruikersnaam))
{
	$sqlresult = mysql_query("SELECT * FROM bf_users WHERE usernaam='".$gebruikersnaam."' && paswoord='".$paswoord."'") or die(mysql_error());
	if(mysql_num_rows($sqlresult) != 0) {
		$loginok = 1;
	}
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan