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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Загрузка изображений на сайт

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Andrey5555
Отправлено: 28 Октября, 2007 - 11:49:02
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




У меня есть поле "Название" и поле "Файл".
Название не должно превышать 25 символов. Можно вводить русский и анлийские буквы, пробел и тире.
Файл должен загружался на сайт методом POST и при этом размер файла не должен превышать 5 кб и быть форматов .gif, .jpg.

И еще:
Как добавлять изображение (ссылку на изображение) в бд и при выводе что бы оно отображалась, а не его ссылка.

Как это осуществить?

Заранее спасибо.
 
 Top
evgenijj
Отправлено: 28 Октября, 2007 - 17:54:27
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




http://www[dot]webmasterschool[dot]ru/ar[dot][dot][dot]es/article36.php

Andrey5555 пишет:

Название не должно превышать 25 символов

http://php.su/functions/?strlen
PHP:
скопировать код в буфер обмена
  1.  
  2. if ( strlen( $_FILES['uploadfile']['name'] ) > 25 ) die( 'Слишком длинное имя' );
  3.  

Andrey5555 пишет:

Можно вводить русский и анлийские буквы, пробел и тире.

Регулярные выражения
Andrey5555 пишет:

при этом размер файла не должен превышать 5 кб и быть форматов .gif, .jpg.

$_FILES['uploadfile']['size'] -- размер файла
Расширение файла можно получить с использованием функции strrchr
PHP:
скопировать код в буфер обмена
  1.  
  2. $ext = strrchr( $_FILES['uploadfile']['name'], "." );
  3. $extensions = array( ".jpg", ".gif", ".bmp", ".png" );
  4. if ( !in_array( $ext, $extensions ) ) die( 'Недопустимое расширение файла' );
  5.  
 
 Top
Andrey5555
Отправлено: 04 Ноября, 2007 - 18:23:06
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




А как вывести изображение, если в бд храниться ссылка на него?
 
 Top
evgenijj
Отправлено: 04 Ноября, 2007 - 18:49:17
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Andrey5555 пишет:
А как вывести изображение, если в бд храниться ссылка на него?


Зачем в БД хранить ссылку на файл? Ты же знаешь, где хранятся файлы. Достаточно хранить имя:
PHP:
скопировать код в буфер обмена
  1.  
  2. $query = "SELECT image FROM mytable WHERE id=".$id;
  3. $res = mysql_query( $query );
  4. $image = mysql_result( $res, 0, 0 );
  5. echo '<img src="/files/images/'.$image.'" alt="" />';
  6.  
 
 Top
Staind
Отправлено: 05 Ноября, 2007 - 09:50:29
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


Помог: 0 раз(а)

[+]


evgenijj, гений, точно. А я создавал в БД обычный линк, т.е. через который изображение открывается и технический линк, через который это изображение удолялось. Надо бы потом все переписать Улыбка
 
 Top
Andrey5555
Отправлено: 05 Ноября, 2007 - 16:42:37
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Регулярное выражение:

if (!eregi ("[а-яa-z0-9 -]$", $title)) die ("<b>Название имеет неверный формат !!!</b>");

Это выражение должно разрешать вводить русские и английские символы, но оно разрешает вводить только английские.

Если

if (eregi ("[а-яa-z0-9 -]$", $title)) die ("<b>Название имеет неверный формат !!!</b>");

Это выражение должно разрешать вводить русские и английские символы, но оно разрешает вводить только русские.

Как это совместить?

 
 Top
evgenijj
Отправлено: 05 Ноября, 2007 - 17:20:21
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. if ( !eregi("^[-а-яa-z0-9_.]+$", $title) )  die ("Название имеет неверный формат!");
  3.  

Здесь имя файла допускает русские и латинские буквы, дефис, точку и символ подчеркивания. Я убрал из допустимых символов пробел. И советую исключить русские буквы
 
 Top
Andrey5555
Отправлено: 06 Ноября, 2007 - 17:43:43
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. mysql_connect ("localhost", "root","") or die ("<b>Невозможно подключиться к базе данных !!!</b>");
  4. mysql_select_db ("board") or die ("<b>Невозможно выбрать базу данных !!!</b>");
  5. $title = $_POST ['title'];
  6.    if (empty ($title)) die ("<b>Вы не ввели название !!!</b>");
  7.    if (strlen ($title) > 25) die ("<b>Слишком длинное имя !!!</b> ");
  8. mysql_query ("SELECT title FROM sections WHERE (title = '$title') LIMIT 1") or die ("<b>Раздел с таким названием уже существует !!!</b>");
  9. $image_name = $_FILES['image']['name'];
  10. $image_size = $_FILES['image']['size'];
  11.    if (empty ($image_name)) die ("<b>Вы не выбрали изображение !!!</b>");
  12.    if ($image_size > 5000) die ("<b>Размер изображения слишком большой !!!</b>");
  13.    if (!ereg ("^.+(.gif|.jpg)$", $image_name)) die ("<b>Изображение имеет неверный формат !!!</b>");
  14. mysql_query ("SELECT * FROM sections WHERE (image = '$image_name') LIMIT 1") or die ("<b>Такое изображение уже существует !!!</b>");
  15. mysql_query ("INSERT INTO sections (title,image) VALUES ('$title','$image_name')");
  16. echo "Раздел <b>$title</b> успешно добавлен !!!";
  17. ?>
  18.  

У меня что то неверно в строке 8, но я не знаю что.
В строке 7 тоже что то. Можно вводить только 3 символа русских, а английских до 25 (как и должно быть). Вообще че за прикол с русскими буквами?

Заранее спасибо!!!
 
 Top
evgenijj
Отправлено: 06 Ноября, 2007 - 18:38:07
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Еще раз - что за ошибку выдает PHP? Если ничего не выдает - выставляем в php.ini
display_errors = On
error_reporting = E_ALL

Зачем используется функция htmlspecialchars()? Ее имеет смысл использовать перед выводом в браузер. Да и используют ее по-другому
$title = htmlspecialchars( $title )
Тут более уместна функция mysql_real_escape_string()

Смысл вот этой строки
PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_query ("SELECT title FROM sections WHERE (title = '$title') LIMIT 1") or die ("<b>Раздел с таким названием уже существует !!!</b>");
  3.  

я вообще не понимаю. Выполнил запрос, запрос что-то вернул или не вернул -- ты об этом не узнаешь
PHP:
скопировать код в буфер обмена
  1.  
  2. $res = mysql_query ("SELECT title FROM sections WHERE (title = '$title') LIMIT 1");
  3. if ( mysql_num_rows( $res ) > 0 ) die ("<b>Раздел с таким названием уже существует !!!</b>");
  4.  

Аналогично
PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_query ("SELECT * FROM sections WHERE (image = '$image_name') LIMIT 1") or die ("<b>Такое изображение уже существует !!!</b>");
  3.  


Цитата:

Вообще че за прикол с русскими буквами?

Поставь себе дома FreeBSD или хотя бы попробуй в браузере обратиться по адресу
http://localhost/images/Водяные лилии.jpg
 
 Top
Andrey5555
Отправлено: 06 Ноября, 2007 - 18:45:19
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




htmlspecialchars( $title ) - для преобразовки хтмл символов (для безопасности).

Смысл вот этой строки
PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_query ("SELECT title FROM sections WHERE (title = '$title') LIMIT 1") or die ("<b>Раздел с таким названием уже существует !!!</b>");
  3.  

я вообще не понимаю. Выполнил запрос, запрос что-то вернул или не вернул -- ты об этом не узнаешь
PHP:
скопировать код в буфер обмена
  1.  
  2. $res = mysql_query ("SELECT title FROM sections WHERE (title = '$title') LIMIT 1");
  3. if ( mysql_num_rows( $res ) > 0 ) die ("<b>Раздел с таким названием уже существует !!!</b>");
  4.  

Аналогично
PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_query ("SELECT * FROM sections WHERE (image = '$image_name') LIMIT 1") or die ("<b>Такое изображение уже существует !!!</b>");
  3.  


Мне надо при добавлении существует ли раздел с таким названием.

Никакой ошибки не выводит, он неверно работает.

if (strlen ($title) > 25) die ("<b>Слишком длинное имя !!!</b> ");
Русских букв можно только 3, а английских не более 25.

Помогите пожалуйста.

 
 Top
evgenijj
Отправлено: 06 Ноября, 2007 - 18:52:36
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Andrey5555 пишет:
htmlspecialchars( $title ) - для преобразовки хтмл символов (для безопасности).

Читаем здесь
http://www[dot]webmasterschool[dot]ru/php/ch3.php
А потом здесь
http://php.su/functions/?mysql-escape-string
http://php.su/functions/?mysql-r...al-escape-string

Вот это
PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_query ("SELECT title FROM sections WHERE (title = '$title') LIMIT 1") or die ("<b>Раздел с таким названием уже существует !!!</b>");
  3.  

НЕПРАВИЛЬНО!!! Функция die будет выполнена только если произошла ошибка при выполнении запроса. Т.к. функцию mysql_real_escape_string() ты не используешь, то это весьма вероятно. Например
$_POST['title'] = "Evgenijj's partition";
Правильно так
PHP:
скопировать код в буфер обмена
  1.  
  2. $res = mysql_query ("SELECT title FROM sections WHERE (title = '$title') LIMIT 1");
  3. if ( mysql_num_rows( $res ) > 0 ) die ("<b>Раздел с таким названием уже существует !!!</b>");
  4.  


А вот это поподробнее. Я не ясноводящий.
PHP:
скопировать код в буфер обмена
  1.  
  2. // Русских букв можно только 3, а английских не более 25.
  3. if (strlen ($title) > 25) die ("<b>Слишком длинное имя !!!</b> ");
  4.  
 
 Top
Andrey5555
Отправлено: 08 Ноября, 2007 - 17:04:36
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Цитата:

А вот это поподробнее. Я не ясноводящий.
PHP:
скопировать код в буфер обмена
  1.  
  2. // Русских букв можно только 3, а английских не более 25.
  3. if (strlen ($title) > 25) die ("<b>Слишком длинное имя !!!</b> ");
  4.  



Правильно работает только если вводить английские буквы, а если русские то после ввода 3 букв выводит сообщение.

Как это исправить?
 
 Top
evgenijj
Отправлено: 08 Ноября, 2007 - 19:03:25
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Блин, ну и вопросы у тебя. Я сам с этой проблемой не сталкивался, но слышал о ней. Что-то с кодировками. Эта проблема описана здесь
http://phpclub[dot]ru/faq/encodings/encodings4
К сожалению, этот раздел сейчас закрыт на профилактику, но можно посмотреть сохраненную копию на Yandex
Цитата:

Почему после субмита формы все данные приходят в виде &#1048;?
Такое происходит, если поля формы заполненны символами, отсутствующими в текущей кодировке страницы. Например, CHARSET у страницы указывает Windows 1252, а в форму вы вводите русские буквы. Браузер не может передать введенное правильно, потому что в указанной кодировке отсутствуют русские символы. Подобное кодирование помогает сохранить ваши данные в том виде, в каком вы их ввели. Символы зашифрованы в кодировке UNICODE. Про дешифрацию смотрите в одном из разделов данного FAQ.

АБВГ будут представлены &#1040;&#1041;&#1042;&#1043;
Длина этой строки - 28 символов. Поэтому три русские буквы проходят проверку, а четыре - нет.
 
 Top
Andrey5555
Отправлено: 12 Ноября, 2007 - 16:43:01
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Как можно выйти из этой ситуации? Данные в бд сохраняються так: &#1040;&#1041;&#1042;&#1043

Что делать?
 
 Top
evgenijj
Отправлено: 12 Ноября, 2007 - 19:26:12
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Добавить в раздел HEAD html-документа, содержащего форму
PHP:
скопировать код в буфер обмена
  1.  
  2. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  3.  
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB