Проблемы по PHP

(Ответов: 9, Просмотров: 1594)
  1. Новичок
    • Регистрация: 13.02.2012
    • Сообщений: 20
    • Репутация: 0
    Просьба не удалять и не закрывать эту тему. Сюда я буду выкладывать проблемы которые у меня возникли в ходе работы с PHP.

    Вот кусок кода:
    Код:
    $login = mysql_escape_string ( trim ( $_POST[ 'login' ] ) );
    $password = mysql_escape_string ( trim ( $_POST[ 'password' ] ) );
    $password_copy = mysql_escape_string ( trim ( $_POST[ 'password_copy' ] ) );
    $email = mysql_escape_string ( trim ( $_POST[ 'email' ] ) );
    
    if ( (isset ( $login ) && $login != '' ) && ( isset ( $password ) && $password != '' ) && ( isset ( $password_copy ) && $password_copy != '' ) && ( isset ( $email ) && $email != '' ) )
    Есть ли смысл в этой записи?
    Код:
    isset ( $login )
    Или переменная $login уже существует не зависимо от того , находится что - то в $_POST[ 'login' ] или нет.
    • 0
  2. Дипломник Аватар для evpatiy
    • Регистрация: 08.10.2011
    • Сообщений: 105
    • Репутация: 29
    • Webmoney BL: ?
    Смысла записи условного цикла if в той подачи, что вы написали вообще нету.... напишите функция по типу такой и пропускаете каждую запись .. если запись = 0 (собираете и потом выводите что борода вы не ввели) ... конечно надо проверять существование пришла ли переменная... смысл проверять пустая ли строка если она не пришла, выведет ошибку.. т.к. потом в функцию усовершенствовать каждую для логина и пароля проверять минимальное коли-во символов...
    пришла ли постом переменная и сколько символов и нет ли запрещенных в ней символов....имейл надо проверять есть ли в нем символ @ и перед ним 1-2 буквы.. после него 1-2 буквы.. точка и опять две буквы... и насчет своя тема для своих вопрос это плохое решение.... и выкладыайте желательно полный код, а не кусок, и вопрос очень глупый... надо учиться.. а не просто вопросы задавать

    переменная логин уже существует вы же создали ее .. и ей присвоится по умолчания null если сделать такую запись $login; а если сделать запись как вы... то да она будет существовать но скорее всего пустая строка или 0 в ней будет просто

    function proverka ($name) {
    if (isset ($name and $name != null) {
    $name = mysql_escape_string ( trim ( $_POST[ '$name' ] );
    }
    else $name = 0;
    return $name;
    }

    $login = proverka ($login);
    $password = proverka ($password);
    $password_copy = proverka ($password_copy);
    $email = proverka ($email);
    Последний раз редактировалось evpatiy; 09.04.2012 в 03:21.
    • 0
  3. Новичок
    • Регистрация: 13.02.2012
    • Сообщений: 20
    • Репутация: 0
    То есть как я понял надо проверять регулярными выражениями ( preg_match( ) ), а то что у меня написано это лишний балласт в коде?
    • 0
  4. Студент
    • Регистрация: 06.04.2012
    • Сообщений: 32
    • Репутация: 4
    Присоединяясь к предыдущему посту...
    1. Я бы заменил mysql_escape_string() на mysql_real_escape_string() - приучайтесь программировать используя последние модификации встроенных функций, а не их устаревшие варианты. Даже если в вашем, конкретном, случае не подразумевается работа с разными кодировками - такой задел будет неплохой привычкой на будущее.

    2. Пароль хранить в не зашифрованном виде (имхо) не комильфо. Используйте $password=substr(md5($_POST['password']),0,9); Т.е каждому паролю будет присвоен хэш в 9 символов длинной - и не нужны никакие проверки валидности вводимых данных, таким образом в ваших паролях будут разрешены любые спец. символы, а в случае взлома базы данных, злоумышленник ровным счетом ничего не сможет сделать с вашими паролями.

    3. Больше совет для совсем уж начинающих программистов, тех, кто с формами работает и не имеет опыта в структурировании вывода. Создайте массив ошибок. К примеру, при отрицательных результатах проверки обязательных переменных дописывайте в него ошибку:

    //Если переменная не существует или пустая заносим в массив ошибок
    if (!isset($_POST['login']) && empty($_POST['login'])) {
    $errors=.$erros.'<Li>Вы не указали логин.</Li>';
    }
    elseif (..проверяем пароль и остальные переменные по аналогии...)

    Непосредственно перед записью в базу, текстовый файл или авторизацией проверяйте контрольно на наличие ошибок. Например:
    if (empty($errors)) { echo "OK!"; } else { echo $errors; }

    4. Preg_match - не используйте, регулярные выражения сложны, жрут больше ресурсов и вообще слишком неуместны для таких вот проверок.

    5. Разные данные, нужно проверять разными способами. Цифры, к примеру, проверяйте через intval(); А текст новости, добавляемый через админку, вполне можно проверить используя html_special_chars();

    6. Сперва делайте проверку на существование переменной if (isset($login))... затем проверяйте не пустая ли она if (!empty($login))..и только потом режьте длину $login = substr($login,0,20); ну и на последок уже более детальная проверка, к примеру $login = html_special_chars($login);

    7. Хоть и по пунктам попытался расписать, уже понимаю, что совсем не структурировано ответил)) Просто набор советов - глядишь кому-то пригодится.
    • 0
  5. Новичок
    • Регистрация: 13.02.2012
    • Сообщений: 20
    • Репутация: 0
    Здравствуйте, вот написал скрипт добавление файлов на сервер:
    HTML
    Код:
    <form action="gallery_add.php" enctype="multipart/form-data" method="post">
        <input name="image" type="file" />
        <input name="submit" type="submit" value="Отправить" />
        </form>
    PHP
    Код:
    <?php
    include( 'db.php' );
    session_start( );
    
    $max_image_wight = 800;
    $max_image_height = 600;
    $max_image_size = 150 * 1024;
    $dir = '/files/img';
    $file_e = array( "gif", "jpeg", "jpg", "png");
    
    if ( !is_uploaded_file( $_FILE[ 'image' ][ 'tmp_name' ] ) )
     {  echo $_FILE[ 'image' ][ 'error' ]; exit( "Ошибка" ); } 
    
    if( isset( $_FILE[ 'image' ][ 'tmp_name' ] ) )
     {
       if ( $_FILE[ 'image' ][ 'size' ] > 0 && $_FILE[ 'image' ]['size'] <= $max_image_size )
        {
    	  $W_and_H = getimagesize( $_FILE[ 'image' ][ 'size' ] );	
    	  if ( $W_and_H[ 0 ] <= $max_image_wight && $W_and_H[ 1 ] <= $max_image_height )
    	   {
    		 $flag = '';  
    	     $dir_w = opendir( $dir );
    		 while( $dir_date = readdir( $dir_w ) )
    		  {
    		    if ( $dir_date == date( 'Y:m:d' ) )
    			 { 
    			   $flag = true;
    			 }
    		  }
    		 	
             if ( $flag )
    		  $dir = $dir_date;
    		 else
    		 $dir = mkdir( "$dir/".date( 'Y:m:d' ) );
    		  
    		 $name = substr( $_FILE[ 'image' ][ 'name' ], 1 + strrpos( $_FILE[ 'image' ][ 'name' ], '.' ) );
    		 
    		 if ( in_array( $name, $file_e ) )
    		  {
    		    $file_name = date( 'H:i' ).'.'.$name;
    			move_uploaded_file( $_FILE[ 'image' ][ 'tmp_name' ], $dir.'/'.$file_name ); 
    		  }
    		 else
    		  {
    		    header( 'Location: gallery.php' );
    			$_SESSION[ 'error' ] = "Неверный формат файла!";
    		  }
    			   
    	   }
    	  else
    	   {
    	     header( 'Location: gallery.php' );
    		 $_SESSION[ 'error' ] = "Изображение не может быть больше чем 800x600 пикселей!";
    	   }
    	}
       else
        {
    	  header( 'Location: gallery.php' );
    	  $_SESSION[ 'error' ] = "Некорректный размер файла!";
    	}
     }
    else
     {
       header( 'Location: gallery.php' );
       $_SESSION[ 'error' ] = "Вы не выбрали изображение для загрузки!" ;
     }
    
    ?>
    Но он не работает. А точнее файл не загружается на сервер ( вроде бы ). Глобальные переменные $_FILE не создаются вообще, строчка
    Код:
    echo $_FILE[ 'image' ][ 'error' ];
    ничего не выводит. В чём может быть проблема?
    • 0
  6. Студент Аватар для PaulSchuher
    • Регистрация: 10.12.2011
    • Сообщений: 69
    • Репутация: 11
    Проверить загружаются ли файлы можно вызвав var_dump($_FILE) - эта функция выведет вам все данные содержащиеся в массиве. Если массив пустой - значит файлы действительно не грузятся, если все-таки он не пуст, значит вы где-то ошиблись в коде, будем искать
    • 0
  7. PHP Developer Аватар для HiNeX
    • Регистрация: 26.04.2012
    • Сообщений: 222
    • Репутация: 47
    • Webmoney BL: ?
    UPD. Тут был вопрос, есть ли права на запись у директории.

    ---------- Сообщение добавлено 17:43 ---------- Предыдущее 17:34 ----------

    Хотя как вариант, ошибка может быть в этом:
    $dir = '/files/img'; заменить на $dir = './files/img'; если папка в той-же директории где сам скрипт или использовать константу $dir = __DIR__.'/files/img';
    Если в "корне" $dir = $_SERVER['DOCUMENT_ROOT'].'/files/img';
    Последний раз редактировалось HiNeX; 26.04.2012 в 16:38. Причина: Ошибся. Увидел в коде проверку..
    • 0
  8. Новичок
    • Регистрация: 13.02.2012
    • Сообщений: 20
    • Репутация: 0
    Код:
    function Image_small( $mini_img_url, $url )
     {
       $max_small_image_height = 100;
       $max_small_image_weight = 70;
       $img = imagecreatefromjpeg( $mini_img_url );
       $WaH = getimagesize( $img );
       $small_img = imagecreatetruecolor( $max_small_image_weight, $max_small_image_height );
       $img_src = imagecopyresampled( $small_img, $img, 0, 0, 0, 0, $max_small_image_weight, $max_small_image_heigth, $WaH[ 0 ], $WaH[ 1 ] );
       imagejpeg( $img_src, $url );
     }
    Код:
    Warning: getimagesize() expects parameter 1 to be string, resource given in Z:\home\localhost\www\cms\gallery_add.php on line 19
    
    Warning: imagejpeg() expects parameter 1 to be resource, boolean given in Z:\home\localhost\www\cms\gallery_add.php on line 22
    Как это лечится?
    • 0
  9. Студент Аватар для knuckr
    • Регистрация: 13.04.2011
    • Сообщений: 46
    • Репутация: 15
    первая трабла изза параметра, сначала картинку сохраняеш потом адрес ее в функцияю, а вы объект картинки передаете
    • 1

    Спасибо сказали:

    na9ort(30.04.2012),
  10. Новичок
    • Регистрация: 13.02.2012
    • Сообщений: 20
    • Репутация: 0
    Код:
    function Image_small( $mini_img_url, $url )
     {
       $max_small_image_height = 150;
       $max_small_image_weight = 150;
       $img = imagecreatefromjpeg( $mini_img_url );
       $WaH = getimagesize( $mini_img_url );
       $small_img = imagecreatetruecolor( $max_small_image_weight, $max_small_image_height );
       imagecopyresampled( $small_img, $img, 0, 0, 0, 0, $max_small_image_weight, $max_small_image_heigth, $WaH[ 0 ], $WaH[ 1 ] );
       header("Content-type: image/jpeg");
       imagejpeg( $small_img );
     }
    Выводит чёрный квадрат, как лечить?
    Гуглил, долго гуглил не помогло. С GD всё в порядке.
    • 0

Похожие темы

Темы Раздел Ответов Последний пост
Проблемы с яндексом
Поисковые системы 10 22.01.2012 17:02
Проблемы со зрением
Оффтоп и свободные темы 12 15.01.2012 21:16
Проблемы с hostingru.net
Хостинг и Серверы 6 12.07.2011 19:53
Проблемы с hostingru.net
Прочее 2 25.06.2011 17:08
Проблемы с блогом на WP
Софт, скрипты, сервисы 6 27.08.2010 22:32

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры