Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как можно сократить код
 
 автор: Ванек2010   (23.07.2010 в 18:46)   письмо автору
 
 

Как можно сократить этот код проверки полей на символы и еще этот код не удобен тем, что если пользователь при регистрации в каком-то поле допустил ошибку, то ему не напишет где именно
<?php
if(
!
preg_match("/^[a-zA-Z0-9_-]+$/i"$login ) or
!
preg_match("/^[a-zA-Z0-9_-]+$/i"$password) or
!
preg_match("/^[a-zA-Z0-9_-]+$/i"$password2) or
!
preg_match("/^[a-zA-Z0-9_\.\_-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/"$mail) or
!
preg_match("/^[a-zA-Z0-9_\.\_-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/"$mail2)
) { echo 
"<p class='white' align='center'>Разрешены только след. символы: a-z, A-Z, 0-9, -, _, либо вы допустили лишние пробелы" ; }
else { 

идем дальше

}

И вот данный код еще, как его можно сократить?

<?php if (strlen($login) <or strlen($login) >10) {echo "<p align='center' class='white'>Логин должен быть не меньше 6 и не больше 10 символов</p>";} else {
    if (
strlen($password) <or strlen($password) >10) {echo "<p align='center' class='white'>Пароль должен быть не меньше 6 и не больше 10 символов</p>";}
    else {

  Ответить  
 
 автор: OLi   (23.07.2010 в 20:48)   письмо автору
 
   для: Ванек2010   (23.07.2010 в 18:46)
 

По второму:
if (strlen($password) and (strlen($login)) <6 or strlen($password) and (strlen($password)) >10) {
echo "<p align='center' class='white'>Пароль должен быть не меньше 6 и не больше 10 символов</p>";} 

Наверное так...

  Ответить  
 
 автор: Ванек2010   (23.07.2010 в 23:03)   письмо автору
 
   для: OLi   (23.07.2010 в 20:48)
 

Нет))

  Ответить  
 
 автор: neadekvat   (24.07.2010 в 00:33)   письмо автору
 
   для: Ванек2010   (23.07.2010 в 18:46)
 

1. Зачем вы ограничиваете перечень допустимых символов в пароле? Какая вам разница, какой пароль у пользователя?
2. Что вам мешает разделить проверку на несколько:
$error = '';
if(!preg_match("/^[a-zA-Z0-9_-]+$/i", $login ))
$error .= '<li>Ошибка в логине';

if(!preg_match("/^[a-zA-Z0-9_\.\_-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/", $mail))
$error .= '<li>Ошибка в e-mail'e';
И потом вывести эти ошибки?

3. Опять таки, какое вам дело до длины пароля пользователя?
4. Зачем сокращать код, объясните

  Ответить  
 
 автор: ols   (24.07.2010 в 00:44)   письмо автору
 
   для: neadekvat   (24.07.2010 в 00:33)
 

Ошибки лучше заносить в массив, например, $errors['error_login'], и.т.д

  Ответить  
 
 автор: neadekvat   (24.07.2010 в 00:48)   письмо автору
 
   для: ols   (24.07.2010 в 00:44)
 

Зачем именовоные индексы? Так ведь больше мороки себе добавляется
Не проще ли так:
//проверка 1
$errors[] = 'Плохой логин';
//проверка 2
$errors[] = 'Плохое мыло';

if (!empty($errors))
// вывод ошибок

  Ответить  
 
 автор: ols   (24.07.2010 в 16:44)   письмо автору
 
   для: neadekvat   (24.07.2010 в 00:48)
 

>Зачем именовоные индексы? Так ведь больше мороки себе добавляется
О какой мороке идет речь? Например, это удобно, если вывод ошибки конкретного поля происходит рядом с полем, а не обходом массива $errors. Да и потом если каждую ошибку определить в переменную, можно при помощи extract().

  Ответить  
 
 автор: neadekvat   (24.07.2010 в 16:54)   письмо автору
 
   для: ols   (24.07.2010 в 16:44)
 

О мороке, если выводить ошибки блоком, например, над формой.
У вас описаны другие ситуации, конечно.

  Ответить  
 
 автор: Гавриленко Дмитрий   (24.07.2010 в 00:45)   письмо автору
 
   для: neadekvat   (24.07.2010 в 00:33)
 

На счет пароля согласен...
И еще можно переде проверкой на корректность все переменные ($password, $password2, $login....) через trim пропустить... и убрать строку "либо вы допустили лишние пробелы" гг

  Ответить  
 
 автор: Ванек2010   (24.07.2010 в 09:55)   письмо автору
 
   для: neadekvat   (24.07.2010 в 00:33)
 

Просто это все хранится в MSSQL базе, и большая длина пароля в игре не допускается.
И если не делать проверку на символы в пароле, то так и снести базу можно, что уже в прочем и сделали один раз, поэтому в этот раз надо защитить все.

<?php 
if(!preg_match("/^[a-zA-Z0-9_\.\_-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/"$mail))
$error .= '<li>Ошибка в e-mail'e';

Да вот, то что надо, спасибо

  Ответить  
 
 автор: Гавриленко Дмитрий   (24.07.2010 в 11:17)   письмо автору
 
   для: Ванек2010   (24.07.2010 в 09:55)
 


<?php 
if(!preg_match("/^[a-zA-Z0-9_\.\_-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/"$mail))
$error .= '<li>Ошибка в e-mail'e';


Надо экранировать '


<?php 
if(!preg_match("/^[a-zA-Z0-9_\.\_-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/"$mail))
$error .= '<li>Ошибка в e-mail\'e';

  Ответить  
 
 автор: neadekvat   (24.07.2010 в 11:23)   письмо автору
 
   для: Ванек2010   (24.07.2010 в 09:55)
 

Вы что, пароли в открытом виде храните? Еще одни..

  Ответить  
 
 автор: tvv123456   (24.07.2010 в 13:39)   письмо автору
 
   для: Ванек2010   (24.07.2010 в 09:55)
 

>И если не делать проверку на символы в пароле, то так и снести базу можно, что уже в
>прочем и сделали один раз, поэтому в этот раз надо защитить все.

Есть такая штука MD5. С помощью этого вы всегда сможете получать пароль( точнее не сам пароль а его хеш) длиной 32 символа и не придеться ограничивать количество и набор символов

  Ответить  
 
 автор: Trianon   (24.07.2010 в 17:04)   письмо автору
 
   для: Ванек2010   (24.07.2010 в 09:55)
 

>Просто это все хранится в MSSQL базе, и большая длина пароля в игре не допускается.

пароли не хранят.
Ни в базе ни еще где либо.

  Ответить  
 
 автор: Ванек2010   (24.07.2010 в 19:40)   письмо автору
 
   для: Trianon   (24.07.2010 в 17:04)
 

Тоесть не хранят? В md5 вы имеете ввиду? Каким образом вы зайдете в игру если пароль в таблице будет в md5 , это только делать sql процедуру, в чем я пока не разбираюсь

  Ответить  
 
 автор: Trianon   (24.07.2010 в 19:43)   письмо автору
 
   для: Ванек2010   (24.07.2010 в 19:40)
 

Так. Хранят хеш.
Никакие процедуры для этого необязательны, хотя и их можно применить, если есть потребность.

md5 - не единственный хеш, между прочим.


Но я не про все про это.
Я про то, что пароли, которые Вы проверяете - не Ваши.
Какое, собственно, право Вы имеете определять, какими им быть, а какими - нет?

  Ответить  
 
 автор: neadekvat   (24.07.2010 в 21:49)   письмо автору
 
   для: Ванек2010   (24.07.2010 в 19:40)
 

Зачем процедуры? Когда пользователь логинится - хэшуруйте введенный пароль и сверяйте с хэшем, что лежит в базе.

  Ответить  
 
 автор: Ванек2010   (25.07.2010 в 10:33)   письмо автору
 
   для: neadekvat   (24.07.2010 в 21:49)
 

Блин еще один)) Игра не браузерная, а по типу Line Age2, вы понимаете, что при входе в игру пользователь вводит пароль и программа берет пароль из базы без MD5, если она будет брать с MD5 то она просто его не впустит, а чтобы брала с MD5, надо изменять процедуру впуска, в общем спасибо за помощь, меня интересовало только выдавание определенной ошибки в поле, то что дал неадекват)

  Ответить  
 
 автор: Trianon   (25.07.2010 в 11:17)   письмо автору
 
   для: Ванек2010   (25.07.2010 в 10:33)
 

Так изменяйте же эту самую процедуру, если без этого никак!
Какая нахрен разница, почему именно Вы делаете через жопу то что делаете?
Делайте нормально - доставать не будут.

  Ответить  
 
 автор: Ванек2010   (25.07.2010 в 11:55)   письмо автору
 
   для: Trianon   (25.07.2010 в 11:17)
 

Пока пхп учу, до процедур мне далеко, всему свое время, а пока и так норм
У меня другой вопрос возник, когда пароли летают по $_POST' у их переловить могут? Если да, тогда при полете надо в md5 их, а перед заносом в базу обратно в стандартный вид да?

  Ответить  
 
 автор: sim5   (25.07.2010 в 18:33)   письмо автору
 
   для: Ванек2010   (25.07.2010 в 11:55)
 

Конечно могут "переловить", так как пароли "летают" исключительно эшелонами 128-1500 метров, не более. При полете в режиме форсажа (md5), их ловля становится бессмысленной. )

  Ответить  
 
 автор: Ванек2010   (25.07.2010 в 20:42)   письмо автору
 
   для: sim5   (25.07.2010 в 18:33)
 

спс)

  Ответить  
 
 автор: oliss   (25.07.2010 в 21:22)   письмо автору
 
   для: Ванек2010   (25.07.2010 в 20:42)
 

On-line cервисы расшифровки md5
http://forum.antichat.ru/thread11028.html

  Ответить  
 
 автор: neadekvat   (25.07.2010 в 21:31)   письмо автору
 
   для: oliss   (25.07.2010 в 21:22)
 

Давайте будем честны - это не расшифровка, а просто поиск по базе хэшей.

  Ответить  
 
 автор: oliss   (25.07.2010 в 21:33)   письмо автору
 
   для: neadekvat   (25.07.2010 в 21:31)
 

Совершенно верно :))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования