Jump to content
php.lv forumi

Par parolēm, reģistrējoties


pilots

Recommended Posts

Esmu redzējis, ka reizēm reģistrējoties, tiek norādīts - "parole nevar saturēt atstarpes". Tam ir kāds būtisks iemesls?

 

Un vai ar šādu kodu ir ok pie reģistrācijas, ko darīt savādāk?

$name = htmlentities($_POST['name'], ENT_QUOTES);
$email = htmlentities($_POST['email'], ENT_QUOTES);
$password = htmlentities($_POST['password'], ENT_QUOTES);	

if (!empty($name) && !empty($email) && !empty(password) && !empty($status)){
if ((
	(strlen(trim($name))>=3) && 
	(strlen(trim($name))<15) && 
	(strlen(trim($email))>=6) && 
	(strlen(trim($email))<100) && 
	(strlen($password)>=3) && 
	(strlen($password)<=35)){
		$md5_password = md5($password);
		$sql = "INSERT INTO db (name, email, password) VALUES ('$name', '$email', '$password')";
}
}

Link to comment
Share on other sites

Man liekas, ka būtiskas nozīmes tām atstarpēm nav.

 

Par kodu - htmlentities nu ir galīgi nevietā. Jāizmanto ir mysql_real_escape_string(). Un arī tikai pēc pārbaudēm nevis pirms.

 

Kā arī - kods nav īpaši lasāms (to daudzo trim() un lielā if dēļ).

 

Kā arī - kur notiek pārbaude vai lietotājvārds jau nav aizņemts ?

Link to comment
Share on other sites

Sorry, tas tika izņemts. Nelikās svarīgi to iekļaut. Jautājums vairāk akcentēts uz to ko iepostēju.

 

tur šādā stilā $sql = "SELECT * FROM db WHERE name = '$name' OR email = '$email'"; if $row .. tad nereģistrējam..

 

Vai vari palabot vai savu variantu uzrakstīt, lūdzams?

Link to comment
Share on other sites

Nu es būtu kaut kā šādi rakstījis. Lai nav tik daudz elementu vienā IF'ā.

 

$name = trim($name);
$email = trim($email);

if (!empty($status)) {

$error = false;

if (strlen($name) < 3 || strlen($name) > 15) {
	$error = true;
}

if (strlen($email) < 6 || strlen($email) > 100) {
	$error = true;
}

if (strlen($password) < 3 || strlen($password) > 35) {
	$error = true;
}

if ($error == false) {

	$md5_password = md5($password);

	// $sql, kur vērtības apstrādātajas ar mysql_real_escape_string()

}

}

Edited by andrisp
Link to comment
Share on other sites

andrisp: veicot insertu, kurš pārkāpj unikalitātes nosacījumu tiek atgriezta konkrēta kļūda.

Piemēram MySQL: http://dev.mysql.com/doc/refman/5.1/en/err...ges-server.html

Tad arī uz kļūdas numura (mysql_errno() fja) nr 1169 (ER_DUP_UNIQUE) tu varēsi rādīt savu jūzerfriendlī error mesidžu.

 

Šadā veidā tiek mazāk noslogota DB - select+insert vietā ir tikai viens insert. Un otrkārt, mazāks pārbaudes kodā - vieglāk uzturams kods. DB jau ir DB tapēc, ka tā uztur datus - tad lai arī tā rūpējas par datu integritāti (constrainti/trigeri/utt), nevis visas pārbaudes izmētāt pa kodu un vēl censties atcerēties, kur un kā tās pielietot.

 

Tāpēc vispareizāk būtu darīt kā Zandis saka - uzlikt unique constraintu uz vārda lauku.

Link to comment
Share on other sites

Par kodu - htmlentities nu ir galīgi nevietā. Jāizmanto ir mysql_real_escape_string(). Un arī tikai pēc pārbaudēm nevis pirms.

Man līdz šim likās, ka iekš db jāliek jau apstrādāti dati ar htmlentities vai specialchars utt., sanāk tā, ka to visu tomēr dara pie izvades..

Link to comment
Share on other sites

×
×
  • Create New...