pilots Posted May 8, 2008 Report Share Posted May 8, 2008 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 More sharing options...
andrisp Posted May 8, 2008 Report Share Posted May 8, 2008 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 More sharing options...
pilots Posted May 8, 2008 Author Report Share Posted May 8, 2008 Pārbaudi vai aizņemts veicu iekš pirmā 'if'. Vai tu vari, lūdzams, parādīt savu variantu kā realizēt šo kodu? Link to comment Share on other sites More sharing options...
andrisp Posted May 8, 2008 Report Share Posted May 8, 2008 Pārbaudi vai aizņemts veicu iekš pirmā 'if'. Neredzu, kur. Link to comment Share on other sites More sharing options...
pilots Posted May 8, 2008 Author Report Share Posted May 8, 2008 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 More sharing options...
andrisp Posted May 9, 2008 Report Share Posted May 9, 2008 (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 May 9, 2008 by andrisp Link to comment Share on other sites More sharing options...
Zandis Murāns Posted May 12, 2008 Report Share Posted May 12, 2008 A nav vieglāk uztaisīt tabulā unikālu lietotāja vārda kolonnu? Link to comment Share on other sites More sharing options...
andrisp Posted May 12, 2008 Report Share Posted May 12, 2008 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. Link to comment Share on other sites More sharing options...
bubu Posted May 12, 2008 Report Share Posted May 12, 2008 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 More sharing options...
andrisp Posted May 12, 2008 Report Share Posted May 12, 2008 Nujā - tā noteikti būtu labāk. :) Es tikai gribēju uzsvērt, ka nepietiek ar vienkārši unique key. Link to comment Share on other sites More sharing options...
pilots Posted May 18, 2008 Author Report Share Posted May 18, 2008 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 More sharing options...
mounkuls Posted May 18, 2008 Report Share Posted May 18, 2008 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(). Link to comment Share on other sites More sharing options...
pilots Posted May 18, 2008 Author Report Share Posted May 18, 2008 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. :) Link to comment Share on other sites More sharing options...
Kristabs Posted May 19, 2008 Report Share Posted May 19, 2008 Raksti vienu funkciju, kurai padod value un tā atgriež eskeipotus rezultātus, lai nav visās vietās pēc tam jālabo. Link to comment Share on other sites More sharing options...
pilots Posted May 20, 2008 Author Report Share Posted May 20, 2008 Nemāku. Nesaprotu. Tagad man ir <?=htmlentities($abc)?>, ..., ... pa visu lapu izmētāti, kur vajag. Kāds ir tavs ieteikums ar funkciju? Link to comment Share on other sites More sharing options...
Recommended Posts