Автор |
|
anonymousНед, 09.06.13, 11:53 |
Здравейте правя регистрационна форма и се чудя как е най правилния начин за проверка за правилно въведени: Име (ник): Имейл адрес: Парола: Повтори парола: Код за защита: ...... Мислех си с if ове примерно проверява за съществуващ ник ако го има изкарва съобщение ако го няма продължава напред с мейл и т.н. Но кода ще стане доста дълъг и объркан и си мисля има ли други начини ? |
|
programingsНед, 09.06.13, 13:20 |
Какво те притеснява, ако стане прекалено дълъг? Мислиш, че ще стане по-бавен ли? Реално имаш 2 проверки (ник и емайл), които изискват заявка към базата данни, и евентуално биха били по-бавни. Другите (предполагам за дължина на паролата, валидност на емайла, captcha и т.н.) се изпълняват за милисекунди. В конкретната ситуация не те интересува колко ще е дълъг кода. Ако притесненията ти са от някакво друго естество, като например кодът да е по-прегледен, и да се обработва по-лесно, то може да си направиш проверките в един отделен файл, който на include-наш, но разлика реално няма да има (кодът ще си се зарежда все е едно е във файла от където е include-нат, просто е в отделен файл и не става прекалено дълго). По принцип всички разработчици използват if проверки. Друг сносен начин няма. |
|
insecteaterПон, 10.06.13, 08:25 |
Ако ще го пускаш в интернет пространството - нямаш избор, кода наистина да става колкото си иска дълъг. Просто не можеш да си позволиш компромис със сигурността. А и с удобството на потребителя също, ако гониш посещаемост. За това дали е объркан - вече там идва изкуството да си подредиш и форамтираш, че и коментираш кода така, че да не е объркан. Аз например в момента правя точно форма за регистрация на потребител, като проверката е двойна - веднъж от страна на клиента чрез JavaScript да му оцветява къде какво е сбъркал и втори път с PHP за същите грешки, както и някои допълниттелни, Няма да ти казвам общия код само за това колко реда е - към няколкостотин сигурно вече са се събрали . Само дето не ползвам AJAX за проверка в реално време дали потребителското име или email-а вече са заети. |
|
anonymousПон, 10.06.13, 12:16 |
Не не ме притеснява че ще стане бавно защото обработката наистина е бърза и дори няма да се усети просто ме дразни дългия код Но явно няма как ще е дълъг. Сега въпроса е няма ли на готово някъде тези проверки за да не ги пиша..... |
|
insecteaterПон, 10.06.13, 13:23 |
Ето примерен непълен код как си правя (засега) проверките. if ($_POST) {
//Check registration information
$err = '';
//Check for empty fields
if (!$_POST['usr'] || !$_POST['email'] || !$_POST['phone'] || !$_POST['fullname'] || !$_POST['address'])
$err=REG_ERROR;
//Check for valid username
if (!$err && preg_match('/[^a-zA-Z-_]/', $_POST['usr']))
$err=REG_INVALID_USERNAME;
//Check for password requirements
if (!$err && (($_POST['pwd'] !== $_POST['pwd1']) || (strlen($_POST['pwd']) < 7)) )
$err=REG_PASS_ERROR;
//Check if username is not already registered
if (!$err) {
$result = $db->query("SELECT COUNT(usr) FROM ".MYSQL_TABLEPREFIX."users WHERE usr='$_POST[usr]' ");
$result = $result->fetch_row();
if ($result[0] > 0)
$err=REG_USEREXISTS;
}
//Check if email address is not already registered
if (!$err) {
$result = $db->query("SELECT COUNT(email) FROM ".MYSQL_TABLEPREFIX."users WHERE usr='$_POST[email]' ");
$result = $result->fetch_row();
if ($result[0] > 0)
$err=REG_EMAILEXISTS;
}
//If registration was successful, redirect to the registered user page.
if (!$err && false) {
ob_clean(); ob_clean();
header('Location: registered.php');
die();
}
} |
|
|
anonymousПон, 10.06.13, 15:42 |
Ганчо проверките са много малко аз мислех проверка за: не въведен ник празно масто (интервал) ник на кирилица забранени символи дължина на ника да не е повече от... други не се сещам.... |
|
programingsПон, 10.06.13, 16:07 | RE: PHP проверка за правилно въведени данни как е най добре да се направи ?
<?php
if ($empty($_POST['nick')) {
echo 'Празен ник!';
} |
”
празно място (интервал) „ Просто trim-ваш въведеното, когато го записваш в БД. Прочети за trim. Например с регулярен израз: function iscyr($text) {
return preg_match('/[А-Яа-я]/u', $text);
} |
Също може с регулярен: $nick = $_POST['nick'];
if (preg_match('/['^£$%&*()}{@#~?><>,|=_+¬-]/', $nick))
{
// какво правим, ако има забранени символи в ника
} |
”
дължина на ника да не е повече от... „ Използваме функцията strlen. if(strlen($_POST['nick'])<=5) {
// какво правим ако ника е под 5 символа
} |
|
|
insecteaterПон, 10.06.13, 16:16 | RE: PHP проверка за правилно въведени данни как е най добре да се направи ?
Това с кирилицата и интервала не го схванах. //..
$err = '';
if (!$_POST['usr'])
$err='Празно поле за потребителско име';
if (!$err && strlen($_POST['usr']) < 6)
$err = 'Потребителското име трябва да е с дължина най-малко от 6 символа';
if (!$err && preg_match('/[^a-zA-Z0-9\-\_]/', $_POST['usr']))
$err = 'Непозволени символи в потребителското име';
if (!$err) {
//... Регистрираме потребителя ...
header('Location: registered.php');
die();
}
//...
echo '<div class="err">'.$err.'</div>'; |
Хехе, докато се наканя и ме изпреварили. |
|
phrozencrewПон, 10.06.13, 18:25 |
Ганчо, аз използвам подобен код, но правя запазване на всички съобщения за грешка в един масив. Нещо от сорта (използвам твоя код): $err = array();
if (!$_POST['usr'])
$err[]='Празно поле за потребителско име';
if (strlen($_POST['usr']) < 6)
$err[] = 'Потребителското име трябва да е с дължина най-малко от 6 символа';
if (preg_match('/[^a-zA-Z0-9\-\_]/', $_POST['usr']))
$err[] = 'Непозволени символи в потребителското име';
if (empty($err) {
//... Регистрираме потребителя ...
header('Location: registered.php');
die();
}
//...
foreach($err as $err_val){
echo '<div class="err">'.$err_val.'</div>';
} |
|
|
anonymousПон, 10.06.13, 18:34 | RE: RE: PHP проверка за правилно въведени данни как е най добре да се направи ?
” Това с кирилицата и интервала не го схванах. „ Ми ника да не е на кирилица но и да е пак не пречи де... А интервал примерно "nik" "n i k"... Но както разбирам е излишна такава проверка щом има такова условие... if (!$err && preg_match('/[^a-zA-Z0-9\-\_]/', $_POST['usr'])) $err = 'Непозволени символи в потребителското име'; редактиран от anonymous на 10.06.13 18:36 |
|
programingsПон, 10.06.13, 19:00 |
Да, но задължително trim-вай ника, преди да го запишеш в БД. Това трябва да ти е част от филтрацията. Никога не знаеш от къде ще ти дойде. |
|
anonymousПон, 10.06.13, 19:27 |
<?php $user = $_POST['usr']; $err = ''; if (empty($user)) $err ='Празно поле за потребителско име'; if (!$err && strlen($user) < 3) $err = 'Потребителското име трябва да е с дължина най-малко от 3 символа'; if (!$err && strlen($user) > 10) $err = 'Потребителското име не трябва да надвишава 10 символа'; if (!$err && preg_match('/[^a-zA-Z0-9\-\_]/', $user)) $err = 'Непозволени символи в потребителското име'; if (empty($err)) { $user = trim(addslashes($user)); echo 'okkkk '.$user; die(); } echo '<div class="err">'.$err.'</div>'; ?> |
|
insecteaterПон, 10.06.13, 20:33 | RE: PHP проверка за правилно въведени данни как е най добре да се направи ?
” Ганчо, аз използвам подобен код, но правя запазване на всички съобщения за грешка в един масив. ... „ Да, и аз съм правил слагане в масив и след това изплюване на всички възможни грешки. А този код (с леки изрязвания) го копирах от нещо, над което работя в момента, а там JavaScript-а в реално време показва на потребителя дали е сбъркал, в момента в който напусне input полето, и PHP проверката се явява по-скоро дебъг-ваща защита на данните. При нормални обстоятелства съобщенията от php-то не би трябвало да се връщат - JavaScript-а предварително не би трябвало да допусне формата да бъде изпратена. Разбира се трябва да работи сигурно и без наличен JavaScript, така че без проверка от страна на сървъра е немислимо. А иначе другите грешки ги обработвам със set_error_handler. |
|
phrozencrewПон, 10.06.13, 20:59 | |
|