Cum fac un formular de inregistrare a utilizatorilor?
Prin ce se caracterizează acest formular de înregistrare a utilizatorilor?
- scriptul PHP îşi creează singur tabelul în care va stoca utilizatorii dacă acesta nu există în baza de date
- toate datele introduse sunt validate server-side
- scriptul verifică în baza de date dacă există deja numele de utilizator ales şi adresa de email a noului utilizator
- fiecare mesaj de eroare este personalizat pentru fiecare eroare în parte
- câmpurile care conţin date invalide sunt evidenţiate
- scriptul păstrează datele introduse în câmpurile formularului atunci când detectează o eroare
- designul formularului este creat EXCLUSIV din CSS
- de protecţie antispam nu avem nevoie deoarece se presupune că formularul de înregistrare se află în interiorul unei secţiuni de administrare
Aşadar, ca să realizez un formular de înregistrare a utilizatorilor mai întâi creez în baza de date tabelul care va stoca toţi utilizatorii.
Cod:
<?php
$q = "CREATE TABLE IF NOT EXISTS ai_registrationform(
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARBINARY(30) NOT NULL,
email VARCHAR(30) NOT NULL,
password CHAR(40) NOT NULL,
registration_date DATETIME NOT NULL,
ip VARCHAR(16) NOT NULL,
PRIMARY KEY(user_id))";
mysql_query($q) or die(mysql_error());
?>Mai avem nevoie de connect_to_db.inc.php, fişierul care ne conectează la baza de date.
Cod:
<?php
/*
Titlu: Cum fac un formular de inregistrare a utilizatorilor?
Autor: Marian Barbu aka AccesInterzis
Website: http://www.accesinterzis.ro
2010 (c) Toate drepturile rezervate
*/
#1
include('includes/connect_to_db.inc.php');
#2
if (isset($_POST['add'])) {
#3
$errors = array();
#4
foreach($_POST as $k => $v) {
#4.1
$v = trim($v);
#4.2
/*
Cand bag datele in baza de date le infasor in mysql_real_escape_string().
Cand citesc datele din baza de date le infasor in stripslashes() si htmlentities().
*/
if (ini_get('magic_quotes_gpc')) {
$v = stripslashes($v);
}
$v = mysql_real_escape_string($v);
#4.3
$$k = $v;
#4.4
if (empty($v)) {
if ($k != 'retype_password') {
if ($k == 'email') {
$errors[$k] = 'The email address is required.';
}
else {
$errors[$k] = 'The '.$k.' is required.';
}
}
}
else {
if (strlen($v) > 30) {
if ($k == 'email') {
$errors[$k] = 'The email address is too long.';
}
else {
$errors[$k] = 'The '.$k.' is too long.';
}
}
else {
if ($k == 'username') {
if (!preg_match('/^[a-z0-9_. ]*$/i', $v)) {
$errors[$k] = 'The username isn\'t valid.';
}
else {
$q = "SELECT user_id FROM ai_registrationform WHERE
LOWER(username)='".strtolower($v)."'";
$result = mysql_query($q) or die(mysql_error());
if (mysql_num_rows($result) != 0) {
$errors[$k] = 'The username already exists in our database.';
}
}
}
if ($k == 'email') {
if (!preg_match('/^[a-z0-9_.]+@[a-z0-9-.]+\.[a-z]{2,4}$/i', $v)) {
$errors[$k] = 'The email address isn\'t valid.';
}
else {
$q = "SELECT user_id FROM ai_registrationform WHERE
LOWER(email)='".strtolower($v)."'";
$result = mysql_query($q) or die(mysql_error());
if (mysql_num_rows($result) != 0) {
$errors[$k] = 'The email address already exists in our database.';
}
}
}
if ($k == 'password') {
if(!preg_match('/^[a-z0-9]*$/i', $v)) {
$errors[$k] = 'The password isn\'t valid.';
}
else {
if (strlen($v) < 5) {
$errors[$k] = 'The password is too short.';
}
else {
/*
Daca parola aleasa este valida verific daca a fost retiparita corect.
*/
if ($k == 'retype_password' && ($password != $retype_password)) {
$errors['password'] = 'The two passwords don\'t match.';
$errors['retype_password'] = true;
}
}
}
}
}
}
}
#6
if(count($errors) == 0) {
#6.1
$q = "INSERT INTO ai_registrationform(`username`, `email`, `password`,
`registration_date`, `ip`)"
."VALUES('$username', '$email', SHA('$password'), NOW(),
'".$_SERVER['REMOTE_ADDR']."')";
#6.2
if (mysql_query($q)) {
$confirmation = 'The user <strong>'.$username.'</strong> was
succesfully registered in our databse.';
}
else {
$confirmation = 'Something is wrong with the server.
Your registration wasn\'t added.';
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>How do I make a registration form?</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="How do I make a registration form?" />
<meta name="keywords" content="registration,form,php,script,mysql,
database,user,backend,admin,section,cms" />
<meta name="abstract" content="How do I make a registration form?" />
<meta name="author" content="AccesInterzis" />
<meta name="copyright" content="AccesInterzis" />
<meta name="robots" content="index,follow" />
<meta name="revisit-after" content="7 days" />
<style type="text/css">
/*INCEPUT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE INREGISTRARE*/
form#registration_form {
width:335px;
margin:0px auto;
}
form#registration_form h1 {
color:black;
font: normal normal normal 24px Verdana;
/*font-style font-variant font-weight font-size font-family*/
padding-bottom:5px;
}
form#registration_form div {
margin:0 0 5px 0;
}
form#registration_form label {
width:130px;
float:left;
}
form#registration_form label span {
color:#c00;
}
form#registration_form input {
width:200px;
}
form#registration_form textarea {
width:300px;
height:150px;
}
form#registration_form input, form#registration_form textarea {
border:1px #ccc solid;
}
form#registration_form input:hover, form#registration_form textarea:hover {
border:1px #666 solid;
}
form#registration_form input#add {
width:auto;
color:#FFF;
background-color:#333;
border:1px #000 solid !important;
cursor:pointer;
}
form#registration_form input#add:hover {
color:#333;
background-color:#fff;
border:1px #333 solid;
}
/*Inceput - stilurile erorilor*/
form#registration_form p {
color:#c00;
padding:0 0 0 130px;
font-size:10px;
text-align:left;
}
form#registration_form div#username_field label,
form#registration_form div#email_field label,
form#registration_form div#password_field label,
form#registration_form div#retype_password_field label {
color:#c00;
}
form#registration_form div#username_field input,
form#registration_form div#email_field input,
form#registration_form div#password_field input,
form#registration_form div#retype_password_field input {
border:1px #c00 solid;
color:#c00;
}
form#registration_form div#username_field input:hover,
form#registration_form div#email_field input:hover,
form#registration_form div#password_field input:hover,
form#registration_form div#retype_password_field input:hover {
border:1px #c00 solid;
}
/*Sfarsit - stilurile erorilor*/
/*SFARSIT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE INREGISTRARE*/
</style>
</head>
<body>
<form action="<? php echo htmlentities(strip_tags('http://'.$_SERVER['HTTP_HOST'].
$_SERVER['PHP_SELF']), ENT_QUOTES, 'utf-8'); ?>" method="post" id="registration_form">
<h1>
<label> </label>
Register an user
</h1>
<?php if ($confirmation) echo '<p>'.$confirmation.'</p>'; ?>
<?php echo ($errors['username']) ? '<p>'.$errors['username'].'</p><div
id="username_field">' : '<div>' ; ?>
<label for="username">Username<span>*</span>:</label>
<input name="username" type="text" id="username" value="<?php
if ($username) echo htmlentities(stripslashes($username)); ?>" />
</div>
<?php echo ($errors['email']) ? '<p>'.$errors['email'].'</p><div
id="email_field">' : '<div>' ; ?>
<label for="email">Email<span>*</span>:</label>
<input name="email" type="text" id="email" value="<?php
if ($email) echo htmlentities(stripslashes($email)); ?>" />
</div>
<?php echo ($errors['password']) ? '<p>'.$errors['password'].'</p><div
id="password_field">' : '<div>' ; ?>
<label for="password">Password<span>*</span>:</label>
<input name="password" type="password" id="password" />
</div>
<?php echo ($errors['retype_password']) ? '<div id="email_field">' : '<div>' ; ?>
<label for="retype_password">Retype password<span>*</span>:</label>
<input name="retype_password" type="password" id="retype_password" />
</div>
<div>
<label> </label>
<input name="add" type="submit" id="add" value="add" />
</div>
</form>
</body>
</html>Pentru un mai bun managment al codului este indicat ca scriptul PHP de deasupra DOCTYPE-ului, care validează datele introduse în formular şi înregistrează utilizatorul în baza de date, să se bage într-un fişier include şi să fie apelat prin funcţia PHP include().
Cod:
<?php
@include('includes/register_user.inc.php');
?>De asemenea, este indicat ca liniile CSS, care creează skinul formularului de înregistrare, din secţiunea <head> </head> să fie băgate într-un fişier CSS extern şi apelate cu tagul HTML <link />.
Cod:
<?php
<link href="css/registration_form_design.css" type="text/css" rel="stylesheet" media="all" />
?>Articol preluat de la www.accesinterzis.ro
Exista 2 articole asemanatoare, apasati aici pentru lista.
buna ziua!!! am urmat instructiunile indicate mai sus. tot este ok dar cand am facut formularul de login am costat
ca<br />parola care o introduce in baza de date nu este de format md5 <br />spre exeplu
eea1f28317ac72f1a0a2078daa4f364474399b23 genereaza scriptul acesta de mai sus si cu scriptul mb5<br
/>cc1ed2b33c52b65edfc44a962ea0cbd6 va rog puteti careva sa ma ajute sa gasesc ce tip de parola este aceasta<br
/>eea1f28317ac72f1a0a2078daa4f364474399b23 multumesc!!!sau ce as putea face in acest script sa genereze parola cu
care sa<br />recunosc cu md5?????
[edit NR]
daca te uiti atent in script la linia unde se face insertul datelor in bd ai exact asa
SHA('$password')
inlocuiesti sha cu md5 si obtii ce vrei tu.







