Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: что делает preg_match?
Форумы портала PHP.SU » » Вопросы новичков » что делает preg_match?

Страниц (2): [1] 2 »
 

1. android - 18 Марта, 2012 - 12:27:58 - перейти к сообщению
Всем привет, вот код:
PHP:
скопировать код в буфер обмена
  1. if(preg_match('/^[a-zA-Z0-9\_]{3,32}$/', $_POST["login"])) {
  2. return true;
  3. } else {
  4. return false;
  5. }


Он проверяет на корректность логина, я так понял?
2. OrmaJever - 18 Марта, 2012 - 12:34:26 - перейти к сообщению
да, только можно вот так
PHP:
скопировать код в буфер обмена
  1. return preg_match('/^[a-zA-Z0-9\_]{3,32}$/', $_POST["login"]);
3. android - 18 Марта, 2012 - 14:15:31 - перейти к сообщению
Спасибо, и вот небольшой вопрос с большим кодом ;)

Немогу запустить функцию.

Есть класс в котором нужно запустить функцию с другого класса:

Откуда запустить:
PHP:
скопировать код в буфер обмена
  1.  
  2. class user {
  3.         //xxxxxx
  4.        
  5.         public function __construct(){
  6.                 //xxxxxx
  7.         }
  8.  
  9.         public function auth() {
  10.                 if(empty($_SESSION['login'])) {
  11.                         if(isset($_POST['whet']) == 1) {
  12.                                
  13.                                 $_SESSION['login_auth_err'] = 0;
  14.                                 $login = functions::sql_inc($_POST['email']);
  15.                                 $pass  = functions::sql_inc($_POST['pass']);
  16.                                 if(empty($login) || empty($pass)) {
  17.                                         //header('location: /index.php?=login_err1');
  18.                                         $_SESSION['login_auth_err'] = 1;
  19.                                         die();
  20.                                 }
  21.                                
  22.                                 $pass = md5($pass);
  23.                                 $sql = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE email='$login'"));
  24.                                 if($pass == $sql['pass']) {
  25.                                         //ok
  26.                                 } else {
  27.                                         //err
  28.                                 }
  29.                         }
  30.                 } else {
  31.                         //xxxx
  32.                 }
  33.         }
  34. }
  35.  


вот они:
PHP:
скопировать код в буфер обмена
  1.  
  2. $login = functions::sql_inc($_POST['email']);
  3. $pass  = functions::sql_inc($_POST['pass']);
  4.  


Второй класс:
PHP:
скопировать код в буфер обмена
  1.  
  2. class functions {
  3.         static function sql_inc($d) {
  4.                 $text_to_check = mysql_real_escape_string($d);
  5.                 $text_to_check = strip_tags($text_to_check);
  6.                 $text_to_check = htmlspecialchars($text_to_check);
  7.                 $text_to_check = stripslashes($text_to_check);
  8.                 $text_to_check = addslashes($text_to_check);
  9.                 return $text_to_check;
  10.         }      
  11. }
  12.  
4. Okula - 18 Марта, 2012 - 14:24:28 - перейти к сообщению
android, метод sql_inc() класса functions просто ужасен. Как говорится напихал всё что знал.
5. android - 18 Марта, 2012 - 14:38:14 - перейти к сообщению
Okula Радость Так как решить проблему?
6. snikers987 - 18 Марта, 2012 - 14:38:54 - перейти к сообщению
Okula пишет:
android, метод sql_inc() класса functions просто ужасен. Как говорится напихал всё что знал.

Ага, экранирует->удаляет теги->преобразовывает спец. симолы->удаляет экранирование->снова экранирует..
(Добавление)
android класс functions подключен?
7. android - 18 Марта, 2012 - 14:50:18 - перейти к сообщению
Да подключен
(Добавление)
И еще забыл дописать, а это все дело 2 класса запускаются с главного:

PHP:
скопировать код в буфер обмена
  1.  
  2. class general {
  3.         //xxxx
  4.  
  5.         public function __construct() {
  6.                 session_start();
  7.                
  8. require_once('engine/users.php');
  9. require_once('engine/func.php');
  10.                 $this->user = new user;
  11.                 $this->user->auth();
  12.  
  13. //xxxx
  14.         }
  15.        
  16.         private function test() {
  17.                 return 'Привет я на test';
  18.         }
  19. }
  20.  


Так если писать вот так:
PHP:
скопировать код в буфер обмена
  1.  
  2. private function test() {
  3.                 return 'Привет я на test'.functions::sql_inc('sql');
  4. }
  5.  


то все работает....
8. Opposite - 18 Марта, 2012 - 15:34:07 - перейти к сообщению
Хотел бы такой вопрос задать ... разве не было бы логичнее вынести аутентификацию за класс в клиентский код? По моему мнению, аутентификация в классе юзверя нарушает приниципы метафоры => нарушает принципы ООП. Грубо говоря, юзверь - это ты, тебя сделали мама и папа, тебя сделал конструктор мамы, но, как ты там делался и как тебя отбирал наш Всевышний, тебе неизвестно, так почему же юзер должен знать, как он был создан?))
9. android - 18 Марта, 2012 - 15:38:22 - перейти к сообщению
Opposite немного не понял, авторизация и так находится в классе. Или вы имели ввиду функцию в general class?
10. Opposite - 18 Марта, 2012 - 15:39:14 - перейти к сообщению
Считай, что это был оффтоп
11. Okula - 18 Марта, 2012 - 15:45:04 - перейти к сообщению
Используй автоматическое подключение классов, что бы не писать requere внутри класса.
Функции spl_autoload_register() или более простоая функция __autoload()
12. android - 18 Марта, 2012 - 16:29:10 - перейти к сообщению
АаАаА руки крюки, неработает!!

general
PHP:
скопировать код в буфер обмена
  1.  
  2.         public function __construct() {
  3.                 session_start();
  4.                 if(!($db_conn = mysql_connect($this->db_host, $this->db_user, $this->db_pass))) $this->error = "Failed connection to database";
  5.                 mysql_select_db($this->db_name);
  6.                 mysql_query("SET NAMES utf8");
  7.                
  8.                 $scan_dir = scandir('engine');
  9.                
  10.                 /*foreach($scan_dir as $f) {
  11.                         if(preg_match('/^[a-zA-Z0-9\_]*\.class\.php$/', $f) && $f != 'general.class.php') {
  12.                                 require_once('engine/'.$f);
  13.                         }
  14.                 }*/
  15.                
  16.                 spl_autoload_register('autoload');
  17.                 function autoload ($className) {
  18.                         $fileName = 'engine/'.$className.'.class.php';
  19.                         include  $fileName;
  20.                 }
  21.  
  22.                
  23.                 user::auth();
  24.                
  25.         }
  26.  
  27.  
13. Opposite - 18 Марта, 2012 - 16:32:04 - перейти к сообщению
До
вывода на страницу нет, надеюсь?
14. android - 18 Марта, 2012 - 16:34:06 - перейти к сообщению
на индекс.пхп

include 'general.php';

$q = new general;
echo $q->show();
15. Opposite - 18 Марта, 2012 - 16:39:59 - перейти к сообщению
session_start отправляет кукисы, кукисы летят в заголовках, заголовки должны лететь раньше, чем содержимое страницы. Ты изменяешь заголовки после того, как вывел на страницу содержимое.

Грубо говоря, ты сам вырыл себе яму : уж слишком ты много вешаешь на объекты класса user. Сам подумай, что такое user? Это логин, пароль ( возможно ) и остальные данные касающиеся его личности ( icq, skype ), но никак не сессии, не запросы к БД. Я признаюсь, что сам не силен в ООП, но для меня это кажется уже очевидным, что тебе нужно сделать здесь что-то вроде механизма, который будет штопать этих юзеров, грубо говоря делать объекты. Почитай про паттерн "фабрика". Будет полезно Подмигивание

 

Powered by ExBB FM 1.0 RC1