aanmeldformulier met username en password

Status
Niet open voor verdere reacties.

istiti

Gebruiker
Lid geworden
26 aug 2013
Berichten
50
Hallo,

Ik ben bezig met een aanmeldformulier. Alle vakjes moeten ingevuld worden, deze worden opgeslaan in de database. Dan wordt er een Username en password gegenereerd en per mail naar de aanmelder verstuurd.

Nu slaat hij alles op in de database uitgenomen de username en het passwoord. Ook controleert hij de velden niet allemaal of ze zijn ingevuld.

Zou er iemand dit script willen nakijken aub?

Alvast bedankt!

PHP:
<?php
function GeneratePassword() {
    $Password = '';
    $Password .= substr("bcdfghjkmnpqrstvwxz",mt_rand(0,18),1);
    $Password .= substr("aeuy",mt_rand(0,3),1);
    $Password .= substr("bcdfghjkmnpqrstvwxz",mt_rand(0,18),1);
    $Password .= substr("!#*&" ,mt_rand(0,4),1);
    $Password .= substr("bcdfghjkmnpqrstvwxz",mt_rand(0,18),1);
    $Password .= substr("aeuy",mt_rand(0,3),1);
    $Password .= substr("bcdfghjkmnpqrstvwxz",mt_rand(0,18),1);
    $Password .= substr("23456789" ,mt_rand(0,è),1);
    return($Password);
}


function valid_mail ($str) {
    return (preg_match('(^[0-9a-zA-Z_\.-]{1,}@([0-9a-zA-Z_\-]{1,}\.)+[0-9a-zA-Z_\-]{2,}$)' , $str));
}

function valid_name ($str) {
    return (preg_match('^[A-Za-z. -]+$' , $str));
}

function valid_voornaam ($str) {
    return (preg_match('^[A-Za-z. -]+$' , $str));
}

function valid_achternaam ($str) {
    return (preg_match('^[A-Za-z. -]+$' , $str));
}

function valid_adres ($str) {
    return (preg_match('^([A-Za-z-])+ [0-9]+([a-z0-9 -])*$', $str));
}

function valid_postcode ($str) {
    return (preg_match('^[1-9][0-9]{3}?[A-Za-z]{2}$', $str));
}

function valid_woonplaats ($str) {
    return (preg_match('([A-Za-z -])+$', $str));
}

$verzendbutton = $_POST["verzendbutton"];
$voornaam = $_POST["voornaam"];
$achternaam    = $_POST["achternaam"];
$adres = $_POST["adres"];
$postcode = $_POST["postcode"];
$woonplaats = $_POST["woonplaats"];
$mailadres = $_POST["mailadres"];
$telnr = $_POST["telnr"];

if (isset($_POST["url"])) {
    $url = $_POST["url"];
}
    
print "<p><div class=\"big\">Aanmelden</div><br>";
if ($verzendbutton != "verzenden" || !valid_mail($mailadres) || !valid_voornaam($voornaam) || !valid_achternaam($achternaam))
{
    print "<form action=\"".$_SERVER["PHP_SELF"]."\" method=\"post\">";
    if (!url) {
        $url = getenv("HTTP_REFERER"); // haal vorige url op
    }
    print "<input type=\"hidden\" name=\"url\" value=\"$url\">";
    if ($verzendbutton && !valid_voornaam($voornaam)) {
        print "<font color=\"red\" Vul hier uw voornaam correct in!</font>";
    }
    
?>
Voornaam: <input type="text" name="voornaam" value="<?php print $voornaam ?>"<br>
<?php 
if ($verzendbutton && !valid_achternaam($achternaam)) {
    print "<font color=\"red\"> Vul hier uw achterenaam correct in</font>";
}
?>
Achternaam: <input type="text" name="achternaam" value="<?php print $achternaam ?>" /> <br />

<?php 
if ($verzendbutton && !valid_adres($adres)) {
    print "<font color=\"red\" Vul hier uw adres correct in!</font>";
}
?>
Adres: <input type="text" name="adres" value="<?php print $adres ?>"><br>

<?php 
if ($verzendbutton && !valid_postcode($postcode)) {
    print "<font color=\"red\"> Vul hier uw postcode correct in</font>";
}
?>
Postcode: <input type="text" name="postcode" value="<?php print $postcode ?>"><br>

<?php 
if ($verzendbutton && !valid_woonplaats($woonplaats)) {
    print "<font color=\"red\"> Vul hier uw woonplaats correct in</font>";
}
?>
Woonplaats: <input type="text" name="woonplaats" value="<?php print $woonplaats ?>"><br>

<?php 
if ($verzendbutton && !valid_mailadres($pmailadres)) {
    print "<font color=\"red\"> Vul hier uw mailadres correct in</font>";
}
?>
Email: <input type="text" name="mailadres" value="<?php print $mailadres ?>"><br>

<?php 
if ($verzendbutton && !valid_telnr($telnr)) {
    print "<font color=\"red\"> Vul hier uw telefoonnummer correct in</font>";
}
?>
Tel: <input type="text" name="telnr" value="<?php print $telnr ?>"><br>
<input type="submit" value="verzenden" name="verzendbutton">
</form>
<?php 
} else {$password = GeneratePassword();
    $passwordmd5 = md5($password);
    $voorl = strtolower (ereg_replace("\.", "", $voorletters)); 
    $achtern = strtolower (ereg_replace(" ", "", $achternaam)); 
    $username = substr($voorl.$achtern, 0 ,15);
    $sql = "INSERT INTO klant (voornaam, achternaam, adres, postcode, plaats, telefoon, email, username, password) 
            VALUES ('$voornaam','$achternaam','$geslacht','$adres','$postcode','$woonplaats','$telnr','$mailadres','$reknr','$username','$passwordmd5')";
    $result = mysql_query($sql);
if ($result) {
    $boodschap = "Welkom in onze winkel\n\n";
    $boodschap .= "Uw gebruikersnaam is: $Username\n";
    $boodschap .= "Uw passwoord is : $password\n";
    $afzender = "website@pastel.com";
    $ok = mail($mailadres, "inloggegevens", $boodschap, 
    "From: $afzender");
    if (!$ok) {
        print "De mail kon niet verzonden worden.";
    }
    print "<br><p>U ontvangt uw inloggegevens op $mailadres<br>";
    print "Log <a href=\"$url\">nu</a>in"; // terug naar oorspronkelijke url
} else {
    print "De database kon niet aangesproken worden. Neem contact op met de webmaster.";
}
}
?>

Ik krijg van dit stuk een error "Undefined index...

$verzendbutton = $_POST["verzendbutton"];
$voornaam = $_POST["voornaam"];
$achternaam = $_POST["achternaam"];
$adres = $_POST["adres"];
$postcode = $_POST["postcode"];
$woonplaats = $_POST["woonplaats"];
$mailadres = $_POST["mailadres"];
$telnr = $_POST["telnr"];
 
Laatst bewerkt door een moderator:
Ik krijg van dit stuk een error "Undefined index...
juist wat na index komt is interessant daar staat wat en waar!
 
Daar staat :
Code:
Notice: Undefined variable: naam in /customers/c/4/d/pastelequipment.com/httpd.www/admin/aanmeldformulier.php on line 47
Notice: Undefined index: verzendbutton in /customers/c/4/d/pastelequipment.com/httpd.www/admin/aanmeldformulier.php on line 48
Notice: Undefined index: voornaam in /customers/c/4/d/pastelequipment.com/httpd.www/admin/aanmeldformulier.php on line 49
Notice: Undefined index: achternaam in /customers/c/4/d/pastelequipment.com/httpd.www/admin/aanmeldformulier.php on line 50
Notice: Undefined index: adres in /customers/c/4/d/pastelequipment.com/httpd.www/admin/aanmeldformulier.php on line 51
Notice: Undefined index: postcode in /customers/c/4/d/pastelequipment.com/httpd.www/admin/aanmeldformulier.php on line 52
Notice: Undefined index: woonplaats in /customers/c/4/d/pastelequipment.com/httpd.www/admin/aanmeldformulier.php on line 53
Notice: Undefined index: mailadres in /customers/c/4/d/pastelequipment.com/httpd.www/admin/aanmeldformulier.php on line 54
Notice: Undefined index: telnr in /customers/c/4/d/pastelequipment.com/httpd.www/admin/aanmeldformulier.php on line 55

en de volgende error :
Code:
Notice: Use of undefined constant url - assumed 'url' in /customers/c/4/d/pastelequipment.com/httpd.www/admin/aanmeldformulier.php on line 65
Notice: Undefined variable: url in /customers/c/4/d/pastelequipment.com/httpd.www/admin/aanmeldformulier.php on line 68
 
Laatst bewerkt door een moderator:
in vulleen van waarde

in vulleen van waarde en controlleren of goed is


PHP:
<?php
ob_start();

logged_in_redirect();


if (empty($_POST) === false) {
	$required_fields = array('username', 'password', 'password_again', 'first_name', 'email');
	foreach($_POST as $key=>$value) {
		if (empty($value) && in_array($key, $required_fields) === true) {
			$errors[] = 'Velden gemarkeerd met een sterretje zijn verplicht';
			break 1;
		}
	}
	
	if (empty($errors) === true) {
		if (user_exists($_POST['username']) === true) {
			$errors[] = 'Sorry, de Gebruikersnaam \'' . $_POST['username'] . '\' is al in gebruik';
		}
		if (preg_match("/\\s/", $_POST['username']) == true) {
			$errors[] = 'Uw gebruikersnaam mag geen spaties bevatten.';
		}
		if (strlen($_POST['password']) < 6) {
			$errors[] = 'Uw wachtwoord moet minstens 6 karakters';
		}
		if ($_POST['password'] !== $_POST['password_again']) {
			$errors[] = 'Uw wachtwoorden komen niet overeen';
		}
		if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
			$errors[] = 'Een geldig e-mailadres nodig';
		}
		if (email_exists($_POST['email']) === true) {
			$errors[] = 'Sorry, het emailaderss \'' . $_POST['email'] . '\' is al in gebruik';
		}
	}
}

?>
 
heel dit stuk er onder

heel dit stuk er onder zetten

PHP:
<h1>registreren</h1>

<?php
if (isset($_GET['success']) === true && empty($_GET['success']) === true) {
	echo 'U bent succesvol geregistreerd! Controleer uw e-mail om uw account te activeren.';
} else {
	if (empty($_POST) === false && empty($errors) === true) {
		$register_data = array(
			'username' 		=> $_POST['username'],
			'password' 		=> $_POST['password'],
			'first_name' 	=> $_POST['first_name'],
			'last_name' 	=> $_POST['last_name'],
			'email' 		=> $_POST['email'],
			'email_code'	=> md5($_POST['username'] + microtime())
		);
		
		register_user($register_data);
		header('Location: register.php?success');
		exit();
		
	} else if (empty($errors) === false) {
		echo output_errors($errors);
	}
?>

	<form action="" method="post">
		<ul>
			<li>
				Gebruikersnaam*:<br>
				<input type="text" name="username">
			</li>
			<li>
				wachtwoord*:<br>
				<input type="password" name="password">
			</li>
			<li>
				wachtwoordt opnieuw*:<br>
				<input type="password" name="password_again">
			</li>
			<li>
				Voornaam*:<br>
				<input type="text" name="first_name">
			</li>
			<li>
				Achternaam:<br>
				<input type="text" name="last_name">
			</li>
			<li>
				Email*:<br>
				<input type="text" name="email">
			</li>
			<li>
				<input type="submit" value="registreren">
			</li>
		</ul>
	</form>
 
register.php

PHP:
<?php
ob_start();
include 'core/init.php';
logged_in_redirect();
include 'includes/overall/header.php';

if (empty($_POST) === false) {
	$required_fields = array('username', 'password', 'password_again', 'first_name', 'email');
	foreach($_POST as $key=>$value) {
		if (empty($value) && in_array($key, $required_fields) === true) {
			$errors[] = 'Velden gemarkeerd met een sterretje zijn verplicht';
			break 1;
		}
	}
	
	if (empty($errors) === true) {
		if (user_exists($_POST['username']) === true) {
			$errors[] = 'Sorry, de Gebruikersnaam \'' . $_POST['username'] . '\' is al in gebruik';
		}
		if (preg_match("/\\s/", $_POST['username']) == true) {
			$errors[] = 'Uw gebruikersnaam mag geen spaties bevatten.';
		}
		if (strlen($_POST['password']) < 6) {
			$errors[] = 'Uw wachtwoord moet minstens 6 karakters';
		}
		if ($_POST['password'] !== $_POST['password_again']) {
			$errors[] = 'Uw wachtwoorden komen niet overeen';
		}
		if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
			$errors[] = 'Een geldig e-mailadres nodig';
		}
		if (email_exists($_POST['email']) === true) {
			$errors[] = 'Sorry, het emailaderss \'' . $_POST['email'] . '\' is al in gebruik';
		}
	}
}

?>
<h1>registreren</h1>

<?php
if (isset($_GET['success']) === true && empty($_GET['success']) === true) {
	echo 'U bent succesvol geregistreerd! Controleer uw e-mail om uw account te activeren.';
} else {
	if (empty($_POST) === false && empty($errors) === true) {
		$register_data = array(
			'username' 		=> $_POST['username'],
			'password' 		=> $_POST['password'],
			'first_name' 	=> $_POST['first_name'],
			'last_name' 	=> $_POST['last_name'],
			'email' 		=> $_POST['email'],
			'email_code'	=> md5($_POST['username'] + microtime())
		);
		
		register_user($register_data);
		header('Location: register.php?success');
		exit();
		
	} else if (empty($errors) === false) {
		echo output_errors($errors);
	}
?>

	<form action="" method="post">
		<ul>
			<li>
				Gebruikersnaam*:<br>
				<input type="text" name="username">
			</li>
			<li>
				wachtwoord*:<br>
				<input type="password" name="password">
			</li>
			<li>
				wachtwoordt opnieuw*:<br>
				<input type="password" name="password_again">
			</li>
			<li>
				Voornaam*:<br>
				<input type="text" name="first_name">
			</li>
			<li>
				Achternaam:<br>
				<input type="text" name="last_name">
			</li>
			<li>
				Email*:<br>
				<input type="text" name="email">
			</li>
			<li>
				<input type="submit" value="registreren">
			</li>
		</ul>
	</form>

<?php 
}
include 'includes/overall/footer.php';
ob_end_flush();
 ?>
 
core/init.php

PHP:
<?php
session_start();
//error_reporting(0);

require 'database/connect.php';
require 'functions/general.php';
require 'functions/users.php';

$current_file = explode('/', $_SERVER['SCRIPT_NAME']);
$current_file = end($current_file);

if (logged_in() === true) {
	$session_user_id = $_SESSION['user_id'];
	$user_data = user_data($session_user_id, 'user_id', 'username', 'password', 'first_name', 'last_name', 'email', 'password_recover', 'type', 'allow_email', 'profile');
	if (user_active($user_data['username']) === false) {
		session_destroy();
		header('Location: index.php');
		exit();
	}
	if ($current_file !== 'changepassword.php' && $user_data['password_recover'] == 1) {
		header('Location: changepassword.php?force');
		exit();
	}
}

$errors = array();
?>
 
core/dtabase/connect.php

PHP:
<?php
$connect_error = 'Sorry, we\'re experiencing connection problems.';
mysql_connect('localhost', 'GEBRUIKERSNAAM', 'wACHTWOORD') or die($connect_error);
mysql_select_db('DATABASENAAM') or die($connect_error);
?>
 
core/functions/general.php

PHP:
<?php
function email($to, $subject, $body) {
	mail($to, $subject, $body, 'From: JEEMAILADERSS');
}

function logged_in_redirect() {
	if (logged_in() === true) {
		header('Location: index.php');
		exit();
	}
}

function protect_page() {
	if (logged_in() === false) {
		header('Location: protected.php');
		exit();
	}
}

function admin_protect() {
	global $user_data;
	if (has_access($user_data['user_id'], 1) === false) {
		header('Location: index.php');
		exit();
	}
}

function array_sanitize(&$item) {
	$item = htmlentities(strip_tags(mysql_real_escape_string($item)));
}

function sanitize($data) {
	return htmlentities(strip_tags(mysql_real_escape_string($data)));
}

function output_errors($errors) {
	return '<ul><li>' . implode('</li><li>', $errors) . '</li></ul>';
}
?>
 
core/functions/users.php

PHP:
<?php
function change_profile_image($user_id, $file_temp, $file_extn) {
	$file_path = 'images/profile/' . substr(md5(time()), 0, 10) . '.' . $file_extn;
	move_uploaded_file($file_temp, $file_path);
	mysql_query("UPDATE `users` SET `profile` = '" . mysql_real_escape_string($file_path) . "' WHERE `user_id` = " . (int)$user_id);
}

function mail_users($subject, $body) {
	$query = mysql_query("SELECT `email`, `first_name` FROM `users` WHERE `allow_email` = 1");
	while (($row = mysql_fetch_assoc($query)) !== false) {
		email($row['email'], $subject, "Hello " . $row['first_name'] . ",\n\n" . $body);
	}
}

function has_access($user_id, $type) {
	$user_id 	= (int)$user_id;
	$type 		= (int)$type;
	
	return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `user_id` = $user_id AND `type` = $type"), 0) == 1) ? true : false;
}

function recover($mode, $email) {
	$mode 		= sanitize($mode);
	$email		= sanitize($email);
	
	$user_data 	= user_data(user_id_from_email($email), 'user_id', 'first_name', 'username');
	
	if ($mode == 'username') {
		email($email, 'U gebruikersaam', "Hallo " . $user_data['first_name'] . ",\n\nU gebruikersnaam is : " . $user_data['username'] . "\n\n-moffia.nl");
	} else if ($mode == 'password') {
		$generated_password = substr(md5(rand(999, 999999)), 0, 8);
		change_password($user_data['user_id'], $generated_password);
		
		update_user($user_data['user_id'], array('password_recover' => '1'));
		
		email($email, 'U wachtwoord is veranderd', "Hello " . $user_data['first_name'] . ",\n\nU nieuwe wchtwoord is: " . $generated_password . "\n\n-moffia.nl");
	}
}

function update_user($user_id, $update_data) {
	$update = array();
	array_walk($update_data, 'array_sanitize');
	
	foreach($update_data as $field=>$data) {
		$update[] = '`' . $field . '` = \'' . $data . '\'';
	}
	
	mysql_query("UPDATE `users` SET " . implode(', ', $update) . " WHERE `user_id` = $user_id");
}

function activate($email, $email_code) {
	$email 		= mysql_real_escape_string($email);
	$email_code = mysql_real_escape_string($email_code);
	
	if (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `email` = '$email' AND `email_code` = '$email_code' AND `active` = 0"), 0) == 1) {
		mysql_query("UPDATE `users` SET `active` = 1 WHERE `email` = '$email'");
		return true;
	} else {
		return false;
	}
}

function change_password($user_id, $password) {
	$user_id = (int)$user_id;
	$password = md5($password);
	
	mysql_query("UPDATE `users` SET `password` = '$password', `password_recover` = 0 WHERE `user_id` = $user_id");
}

function register_user($register_data) {
	array_walk($register_data, 'array_sanitize');
	$register_data['password'] = md5($register_data['password']);
	
	$fields = '`' . implode('`, `', array_keys($register_data)) . '`';
	$data = '\'' . implode('\', \'', $register_data) . '\'';
	
	mysql_query("INSERT INTO `users` ($fields) VALUES ($data)");
	email($register_data['email'], 'Activeer uw account', "Hallo " . $register_data['first_name'] . ",\n\nJe moet je account nog acitiveren met de onderstaande link:\n\nJE EIGEN WEBSITE LINK OF JE IP VAN JE PROVIDER/lr/activate.php?email=" . $register_data['email'] . "&email_code=" . $register_data['email_code'] . "\n\n - moffia.nl");
}

function user_count() {
	return mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `active` = 1"), 0);
}

function user_data($user_id) {
	$data = array();
	$user_id = (int)$user_id;
	
	$func_num_args = func_num_args();
	$func_get_args = func_get_args();
	
	if ($func_num_args > 1) {
		unset($func_get_args[0]);
		
		$fields = '`' . implode('`, `', $func_get_args) . '`';
		$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));
		
		return $data;
	}
}

function logged_in() {
	return (isset($_SESSION['user_id'])) ? true : false;
}

function user_exists($username) {
	$username = sanitize($username);
	return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'"), 0) == 1) ? true : false;
}

function email_exists($email) {
	$email = sanitize($email);
	return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `email` = '$email'"), 0) == 1) ? true : false;
}

function user_active($username) {
	$username = sanitize($username);
	return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `active` = 1"), 0) == 1) ? true : false;
}

function user_id_from_username($username) {
	$username = sanitize($username);
	return mysql_result(mysql_query("SELECT `user_id` FROM `users` WHERE `username` = '$username'"), 0, 'user_id');
}

function user_id_from_email($email) {
	$email = sanitize($email);
	return mysql_result(mysql_query("SELECT `user_id` FROM `users` WHERE `email` = '$email'"), 0, 'user_id');
}

function login($username, $password) {
	$user_id = user_id_from_username($username);
	
	$username = sanitize($username);
	$password = md5($password);
	
	return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) == 1) ? $user_id : false;
}
?>
 
@ Ciske de rat : Bij het inloggen krijg ik dit:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /customers/c/4/d/pastelequipment.com/httpd.www/registerLogin/core/functions/users.php on line 98 Warning: Cannot modify header information - headers already sent by (output started at /customers/c/4/d/pastelequipment.com/httpd.www/registerLogin/core/functions/users.php:98) in /customers/c/4/d/pastelequipment.com/httpd.www/registerLogin/core/init.php on line 19
 
Bij het inloggen krijg ik dit:


Dat is een standaardfout, je controleert niet of de query is gelukt en als een query mislukt geeft mysql_query() een FALSE terug en dat kun je niet an de fetch geven. Dit staat ook in geuren en kleuren uitgelegd in de handleiding en elke tutorial over werken met MySQL.

ps: dit moet je niet doen:

return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `user_id` = $user_id AND `type` = $type"), 0) == 1) ? true : false;

Het is wel lekker kort maar het is één grote bug in wording; er is geen foutcontrole, geen SQL-injectiebescherming, het is gewoon helemaal fout :-)
 
return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `user_id` = $user_id AND `type` = $type"), 0) == 1) ? true : false;

Door wat vervang ik deze dan?
 
row type moet je verandere in in php myadmin die geen jou bevoegheid tot admin 0 is gebruiker 1 is admin website
 
Ciske de rat : Ik ben mee met de code waar je mij naartoe verwees, maar het een en ander klopt nog niet bij mij.
Ik ben nu aan het zoeken voor die standaardfout.

Dat is een standaardfout, je controleert niet of de query is gelukt en als een query mislukt geeft mysql_query() een FALSE terug en dat kun je niet an de fetch geven. Dit staat ook in geuren en kleuren uitgelegd in de handleiding en elke tutorial over werken met MySQL.
 
row type moet je verandere in in php myadmin die geen jou bevoegheid tot admin 0 is gebruiker 1 is admin website

Gebeurd dit dan niet door te activeren viade link die je dan toegestuurd krijgt per mail?
 
Kan ik hier ergens het volledige script in een zipmapje plaatsen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan