Jump to content
php.lv forumi

Recommended Posts

Posted

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')";
}
}

Posted

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 ?

Posted

Pārbaudi vai aizņemts veicu iekš pirmā 'if'.

 

Vai tu vari, lūdzams, parādīt savu variantu kā realizēt šo kodu?

Posted

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?

Posted (edited)

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
Posted

Zandis, kādā ziņā vieglāk? Vispareizāk jau būtu gan manuāla pārbaude (lai varētu normālu jūzerfriendlī meseģu parādīt), gan lietotājvārda uzsetošana kā unikālu.

Posted

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.

Posted
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..

Posted

Nekādā gadijumā neliec neapstrādātus datus bāzē! Nonesīs visu.

andrisp rakstija lai pirms ievietošanas bāzē izmanto mysql_real_escape_string().

Posted

Jā, to es ņēmu vērā. Krietna labošana gan sanāks, bet tomēr jāpateicas vismaz, ka laicīgi to esmu uzzinājis. :)

Posted

Nemāku. Nesaprotu.

 

Tagad man ir <?=htmlentities($abc)?>, ..., ... pa visu lapu izmētāti, kur vajag. Kāds ir tavs ieteikums ar funkciju?

×
×
  • Create New...