Archief - MySQL error bij invoeren inlogformulier

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.

RobinVdB

Legacy Member
Nu zit ik toch even vast...
Code:
Notice: Undefined variable: used in C:\xampp\htdocs\Projecten\Forum\user\login.php on line 21
Er waren volgende errors: 
Het paswoord is langer dan 25 karakters!
Het paswoord is langer dan 25 karakters!

Notice: Undefined variable: vervuild in C:\xampp\htdocs\Projecten\Forum\user\login.php on line 49

Notice: Undefined variable: encpassword in C:\xampp\htdocs\Projecten\Forum\user\login.php on line 50

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Projecten\Forum\user\login.php on line 51

Notice: Undefined variable: id in C:\xampp\htdocs\Projecten\Forum\user\login.php on line 65
PHP:
<?php
session_start();
//Include
include("../settings.php");

//Verbinding maken met DB
mysql_connect($db['host'],$db['username'],$db['password']);
mysql_select_db($db['database']);


//Variablen instellen + beveiliging SQL-Injection.
$used = false;
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$salt = sha1("Veiligheidhier");
$pepper = md5(sha1("veiligheidhier"));
$encPassword = $salt.md5($password).$pepper;

//Functie om de errors weer te geven.
function error_display($error){
	if($used == false){
		echo "Er waren volgende errors: <br />";
		echo "<ol>".PHP_EOL;
		echo "<li>".$error."</li>".PHP_EOL;
		$used = true;
	}
	if($used == true){
		echo "<li>".$error."</li>".PHP_EOL;
	}
}

//If statements op alles de controleren.
if(strlen($password) > 25){
	if(empty($password)){
		if(strln($username)> 25){
			if(!empty($username)){
				$vervuild = false;
			}
			else{error_display("De gebruikersnaam is niet ingegeven.");}
		}
		else{error_display("De gebruikersnaam is langer dan 25 karakters!");}
	}
	else{error_display("Het paswoord is niet ingegeven.");}
}
else{error_display("Het paswoord is langer dan 25 karakters!");}


//Kijken of het overeenkomt met gegevens in de database.
if($vervuild == false){
	$link = mysql_query("SELECT * FROM users WHERE username=$username AND password=$encpassword");
	$rows = mysql_num_rows($link);
	if($rows = 0){
		error_display("Gebruikersnaam en/of paswoord zijn verkeerd.");
	}
	elseif($rows > 1){
		error_display("<span color='red'>Error 3</span>");
	}
	else{
		$correct = true;
	};
}

//Als het door alles is gegaan session ingeven.
if($correct == true){
	$_SESSION['UID'] = $id;
	$_SESSION['username'] = $username;
}
else{
	echo "</ol>";
	echo "<a href='../index.php'>Ga terug</a>";
}
?>
Toch vreemd dat dit simpel ding mij problemen geeft... xD

RobinVdB

Legacy Member
Shaddix zei:
Waarom doe je niet gewoon
PHP:
<?php 
function a_func($x){ 
echo $x; 
} 

if($this == true){ 
echo "This is true" 
}else{
a_func("This isn't true."); 
}
?>

Dat is toch veel logischer?

Gebruik ik toch ook. Zie hierboven. (Gewoon foutje in voorbeeld. :doh:)

Shaddix

Legacy Member
De error legt het eigenlijk al uit. Je gebruikt de variabele "Used" maar deze bestaat niet in de functie error_display(). Je moet deze variabele dus als parameter aan je functie meegeven.

RobinVdB

Legacy Member
Maar is ze dan nog bruikbaar als ik deze functie de volgende keer gebruik?

adrianhates

Legacy Member
meh das al messy code op zich .. :) if($orrect== true) slaagt op niks :D

notice errors afzetten is meestal ook wel wat overzichtelijker, tenzij ge echt altijd uw variabelen eerst wil initialiseren ..

RobinVdB

Legacy Member
Het probleem is ook dat het niet werkt. Zie 1 en 2. Terwijl het ingegeven paswoord op een test account ook maar 10 karakters lang is. En ook wordt er telkens al UID en Username in de sessie gezet, wat ik niet wil.

Shaddix

Legacy Member
adrianhates zei:
notice errors afzetten is meestal ook wel wat overzichtelijker, tenzij ge echt altijd uw variabelen eerst wil initialiseren ..

Maar kijk zijn code, hij vergelijkt variabele die niet beschikbaar zijn in de juiste scope. Notice errors afzetten zou nogal vuile code kunnen bezorgen in dit geval :)

RobinVdB

Legacy Member
Functions zijn nu inderdaad niet mijn beste vak. =( Ik ben meer voor alles de schrijven, maar ik wou het hier eens korter aanpakken. En dan krijg je dit. =C
Uit een ding ben ik nog niet uit, hoe sluit ik het dan in de scope. (En enkel op het laatste?)
Dit is mijn code nu trouwens:
PHP:
<?php
session_start();
//Include
include("../settings.php");

//Verbinding maken met DB
mysql_connect($db['host'],$db['username'],$db['password']);
mysql_select_db($db['database']);


//Variablen instellen + beveiliging SQL-Injection.
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$salt = sha1("lOxcPmLgomcDX");
$pepper = md5(sha1("xFmPlXGo"));
$encPassword = $salt.md5($password).$pepper;

//Functie om de errors weer te geven.
function display_errors($error){
	static $used = false;
	if($used == false){
		echo "Er waren volgende errors: <br />";
		echo "<ol>".PHP_EOL;
		echo "<li>".$error."</li>".PHP_EOL;
		$used = true;
	}
	if($used == true){
		echo "<li>".$error."</li>".PHP_EOL;
	}
}

//If statements op alles de controleren.
if(strlen($password) > 25){
	if(empty($password)){
		if(strln($username)> 25){
			if(!empty($username)){
				$vervuild = false;
			}
			else{display_errors("De gebruikersnaam is niet ingegeven.");}
		}
		else{display_errors("De gebruikersnaam is langer dan 25 karakters!");}
	}
	else{display_errors("Het paswoord is niet ingegeven.");}
}
else{display_errors("Het paswoord is langer dan 25 karakters!");}


//Kijken of het overeenkomt met gegevens in de database.
if($vervuild == false){
	$link = mysql_query("SELECT * FROM users WHERE username=$username AND password=$encpassword");
	$rows = mysql_num_rows($link);
	if($rows = 0){
		display_errors("Gebruikersnaam en/of paswoord zijn verkeerd.");
	}
	elseif($rows > 1){
		display_errors("<span color='red'>Error 3</span>");
	}
	else{
		$correct = true;
		$id = mysql_query("SELECT ID FROM users WHERE username=$username");
	};
}
//Als het door alles is gegaan session ingeven.
if($correct == true){
	$_SESSION['UID'] = $id;
	$_SESSION['username'] = $username;
}
else{
	echo "</ol>";
	echo "<a href='../index.php'>Ga terug</a>";
}
?>
Zoals je hierin zit heb ik $used= false verwijdert en in de function gezet als static $user = false.
Er waren volgende errors:
Het paswoord is langer dan 25 karakters!
Het paswoord is langer dan 25 karakters!

Notice: Undefined variable: vervuild in C:\xampp\htdocs\Projecten\Forum\user\login.php on line 49

Notice: Undefined variable: encpassword in C:\xampp\htdocs\Projecten\Forum\user\login.php on line 50

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Projecten\Forum\user\login.php on line 51

dJeez

Legacy Member
adrianhates zei:
Variable variables is wel een geestig stukske!
Gij moet kletsen krijgen, wijs hem er nog ff op zodat hij die ook nog kan gebruiken. Dan wordt de code soup nog erger...

Nooit ofte nimmer variable variables gebruiken is aangewezen.

@RobinVdB:
Die geneste ifs voor validatie zijn een ramp, strlen vs strln... OMG! Ponies! Neem dit niet verkeerd op, maar iemand moet echt wel dringend eerst de basis van PHP (en programmeren in het algemeen) aanleren alvorens crappy scripts online te gooien.

adrianhates

Legacy Member
dJeez zei:
Gij moet kletsen krijgen, wijs hem er nog ff op zodat hij die ook nog kan gebruiken. Dan wordt de code soup nog erger...

Nooit ofte nimmer variable variables gebruiken is aangewezen.

hahaha, ge moet da gewoon ne keer gebruiken :D daar leerde van!

RobinVdB

Legacy Member
dJeez zei:
Gij moet kletsen krijgen, wijs hem er nog ff op zodat hij die ook nog kan gebruiken. Dan wordt de code soup nog erger...

Nooit ofte nimmer variable variables gebruiken is aangewezen.

@RobinVdB:
Die geneste ifs voor validatie zijn een ramp, strlen vs strln... OMG! Ponies! Neem dit niet verkeerd op, maar iemand moet echt wel dringend eerst de basis van PHP (en programmeren in het algemeen) aanleren alvorens crappy scripts online te gooien.

Strln was gewoon een typfout... En ge moet niet zeggen dat ik niet kan programmeren, want dan zit je er naast.
(En variable variables trekt echt op niets! =') Geef is 1 scenario waar jij het zou gebruiken? Ik ben benieuwd.)

EDIT:
Fixed.

Zero Grav

Legacy Member
Ik ben uw houding eigenlijk serieus beu, RobinVdb. Ik kan al niet meer op twee handen tellen hoe vaak ge hier al zijt komen verkondigen dat ge dé PHP guru zijt om dan niet meer te reageren als iemand u op uw amateuristische fouten wijst of om, zoals in dit geval, de thread te wissen om het allemaal te verdoezelen.

Maanden geleden waart ge op 2 weken tijd zogezegd al volleerd in de kunst van xHTML/CSS/PHP en weet ik veel wat nog allemaal. En wat mensen ook zeggen, het maakt niet uit, ge blijft volharden. En met dat te doen geeft ge mensen ook voortdurend foute informatie zoals bijvoorbeeld het stellen dat Joomla/Drupal/.. niet bedoeld zijn als backbone van andere websites.

En als er één iemand is die kan bepalen of ge kunt programmeren of niet dan zal het dJeez wel zijn. Het zou u niet misstaan om een beetje respect te tonen.
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