За последние 24 часа нас посетили 17556 программистов и 1722 робота. Сейчас ищет 1681 программист ...

Хотел бы научиться работать с изображениями php+mysql

Тема в разделе "PHP для новичков", создана пользователем СергейЧИТА, 4 ноя 2014.

  1. СергейЧИТА

    СергейЧИТА Новичок

    С нами с:
    4 ноя 2014
    Сообщения:
    123
    Симпатии:
    0
    Здравствуйте!
    Вообщем я новичок в php программировании, решил написать сайт-в основном для получения навыка.
    Итак, что я для этого сделал:
    1) зарегистрировал домен в www.2domains.ru
    2)написал простейший style.css, index.html
    3) разместил их на хостинге www.fornex.com
    4)также зарегистрировал почту на www.yandex.ru

    Прочитал литературы по php и поcмотрел пару курсов лекции для новичков по php/

    вообщем наступил момент, когда мне нужно видеть на странице в <body> таблицу с тремя столбцами:1)картинка, 2)название места и её географические координаты 3)примечание, где я как пользователь могу ввести комментарий(нажав конопку применить)

    в Хостинге у меня тариф такой, что могу иметь одну БД в MySQL
    Причем к этой БД можно подключиться только так называемой cPanel, а не как я привык My SQL Manager'ом...
    вообщем на ряд форумах нашёл, что картинки (jpeg) можно хранить прямо в БД (в данном случае e18366_db), но для этого необходимо перед написанием соотв строк в php-скрипте для работы с изображением (загрузить, хранить, считать картинку через страницу) нужно подготовить БД, а именно создать соотв таблицу
    вот я пробую так создать, но никак не получается...подскажите что не так?
    Код (Text):
    1.  
    2. CREATE TABLE TB1 {
    3.     id_img int(11) NOT NULL auto_increment,
    4.     image longblog NOT NULL,
    5.     PRIMARY KEY (id_img)
    6. } ENGINE = MYISAM ;
    пишет вот такую ошибку:
    Код (Text):
    1.  
    2. Ответ MySQL: Документация
    3.  
    4. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{
    5.     id_img int(11) NOT NULL auto_increment,
    6.     image longblog NOT NULL,
    7.     PRIMARY' at line 1
    вот скриншот
    http://my-files.ru/z5gdi2

    И если не сложно можете посоветовать (ссылки или так словами) где вкратце описано как потом и что нужно прописывать в php-скрипте для работы с изображением при данных условиях (хостинг,домен).
    Заранее благодарен!
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    НЕ хранить изображения в БД. она не для этого создана. вернее никто не запрещает хранить изображения в БД. но не в том контексте который вы используете.

    а теория хранения изображений в бд проста.
    в таблице должно быть минимум два поля:
    id - числовой идентификатор и первичный ключ.
    и content - само тело картинки. содержимое файла.

    есть у вас страница допустим index.php. на ней вы выбираете идентификаторы картинок из таблицы и пишете на странице теги имг с атрибутом сурс указывающим на некий скрипт имг.пхп с указанием id картинки - <img src=/image.php?id=$id>
    в файле image.php вы принимаете идентификатор - $id = $_GET['id'] и делаете запрос к бд получая тело картинки.
    дальше отправляете заголовок что это картинка и просто печатаете значение ячейки content результата запроса.
    и всё. это и есть нужный минимум. дальше уже всякие красивости будут усложнять код и логику. но для начала осильте минимум. если очень надо. а вообще всё еще
     
  3. СергейЧИТА

    СергейЧИТА Новичок

    С нами с:
    4 ноя 2014
    Сообщения:
    123
    Симпатии:
    0
    Вот у меня такой основной index.php
    Код (Text):
    1.  
    2. <!DOCTYPE html>
    3. <html>
    4.     <head>
    5.         <meta charset="cp1251">
    6.         <meta name="description" content="">
    7.         <meta name="author" content="">
    8.         <link rel="stylesheet" href="style.css">
    9.         <title>официальный сайт</title>
    10.     </head>
    11.     <body>
    12.         <audio src="fon.mp3" autoplay loop controls></audio>
    13.         <div id="wrapper">
    14.                 <?php include 'include/header.php'; ?>
    15.             <?php include 'include/nav.php'; ?>
    16.             <div id="content">
    17.                 <h1>Авторизация</h1>
    18.                 <p><h2>Заполните форму</h2></p>
    19.     <form method="POST" action="index.php">
    20.             <h3>Фамилия</h3>
    21.             <input type="text" name="fam" value=""><br>
    22.             <h3>Имя</h3>
    23.             <input type="text" name="im" value=""><br>
    24.             <h3>Отчество</h3>
    25.             <input type="text" name="otch" value=""><br>
    26. <input type="button" name="btnpoisk1" onClick="alert" value="Enter">
    27.     </form>
    28.             </div> <!-- end #content -->
    29.             <div id="centecont">
    30.             <b>Текст</b>
    31.             </div> <!-- end #centecont -->
    32.            
    33.             <?php include 'include/sidebar.php'; ?>
    34.             <?php include 'include/footer.php'; ?>
    35.  
    36.            
    37.            
    38.         </div> <!-- End #wrapper -->
    39.     </body>
    40. </html>
    includ'ые скрипты особо не имеют интереса, но максимум на данный момент header.php:

    Код (Text):
    1. <?php include 'variables/variables.php'; ?>
    2. <div align="center" id="header" style="background: url('image/header.jpg')">
    3. <h1><?php echo $heading ?></h1>
    4. </div> <!-- end #header -->
    footer.php
    Код (Text):
    1.  
    2. <div id="footer">
    3. <p><?php echo $footer ?></p>
    4. </div> <!-- end #footer -->
    variables.php
    Код (Text):
    1. <?php
    2. $heading = 'Добро пожаловать на  сайт!';
    3. $footer = 'Копирайт &copy 2014 <a href=\"http://www.ya.ru\">Поиск</a>';
    4. ?>
    Я хотел бы в "centecont" создать 3 столбца:
    1)изображения jpg
    2) описание (некий текст к изображению)
    3) примечание (пользователь самостоятельно может подредактировать(оставить коммент))

    Причём с точки зрения безопасности не хотелось бы хранить в явном виде файлы jpeg на хостинге...т.е. я для чего выбрал храннение в бинарном виде-для того, чтобы администратор хостинга не смог просмотреть содержимое файла...т.е. хранение в шифрованном виде...
    можете на примере указать как это буте выглядеть?я прошу прощения за свой вопрос, ноя только начал изучение, но на примерах лучше воспринимаю.

    кроме того я создаю судя по Вашему отзыву таблицу www.fornex.org через cPanel->phpMyAdmin, допустим назовём её tablemesto c полями:
    -id_img
    -content_img

    http://my-files.ru/h9rrcj
    http://my-files.ru/6r1n38
    http://my-files.ru/5lipi0
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    несусветная чушь. какая может быть безопасность не хранить файлы в явном виде? при запросе к файловой системе вебсервер отдает контент или не отдает его снижая нагрузку на себя, на сеть и на клиента. динамическая раздача в простом виде будет гонять файл по сети постоянно. плюс для этого серваку придется запускать пхп машину а той в свою очередь подключаться к субд. обоснуйте ЗАЧЕМ вам держать файлы в субд. для всего остального я уже пояснил что это идиотизм.

    плюс шифрование. что за бред? мало того что нам придется гонять пхп машину и субд так еще мы нагрузим процессорное время на тупейшую операцию дешифрования. ЗАЧЕМ ВАМ ВЕСЬ ЭТОТ БРЕД? ЧТО И ОТ КОГО ВЫ ПРЯЧЕТЕ?

    да вы просто халявщик коих тут сотни. лучше всего на личном опыте информация усваивается и не пытайтесь меня переубедить. либо вы делаете и показываете наработки либо мы с вами на платной основе будем "учиться" или вы просто закажете готовые коды.
     
  5. СергейЧИТА

    СергейЧИТА Новичок

    С нами с:
    4 ноя 2014
    Сообщения:
    123
    Симпатии:
    0
    Да вроде никогда и не был халявщиком...ок, попробую сам разобраться, если что буду продолжать в эту ветку писать...
    по вопросу вида хранения-я лично хотел попробовать просто реализовать-набраться опыта как хранить прямо в БД-один вариант и второй вариант попробовать-хранить только ссылки на изображения(этот вариант я ещё не приступал)...пока пытаюсь реализовать первый вариант...
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    кстати о шифровании. ты себе вдруг представил злодея админа который ходит смотрит твои файлы. на то он и админ чтоб иметь право смотреть твои файлы. нас этому обязывает соответствующий действующий на территории рф закон. мы либо смотрим файлы (по запросу от органов) либо если человек не рад - идет за бугор хоститься. ок. спрятали файлы в субд. ну дык админ их и там тоже видит. облом, да? ладно, зашифровали. а как будет дешифрация происходить? ключик на сервере? ну дык админ применит ключик и получит файлик. всё ок. или ты собрался передавать ключик с каждым запросом? ну если это публичный сайт то этот ключик будет в каждом запросе. вот ведь лажа... а если ты для себя только то представляешь админ может поправить пару строк твоего кода и перехватить у тебя твой ключик и получить все файлики. или банально записать исходящий траффик ведь там уже расшифрованные фотки. прикинь сколько способов обойди паранойю в твоей голове... делай как все и не выпендривайся.
     
  7. СергейЧИТА

    СергейЧИТА Новичок

    С нами с:
    4 ноя 2014
    Сообщения:
    123
    Симпатии:
    0
    Ок))убедил)))но так а если не в БД хранить, то как подскажи более детально хоть какую инфу почитать по этому поводу?
    хранить ссылки на файлы, которые можно залить на хостинг в скажем отдельную директорию /img ?
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    можно при загрузке изображения складировать его в указанном каталоге с именем вида image_ID.jpg. где ID - идентификатор в базе. тогда ссылка будет <img src='/img/image_ID.jpg'> и все ок. это простейший путь. где читать? ну мануалы и читать. представить себе все действия которые нужно выполнить и найти нужные функции. в мануале есть для этого примеры. мозг+мануалы+грамотные_запросы_в_поисковике.
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    если ты еще не разобрался с ошибкой в SQL, то причина в фигурных скобках — там должны быть круглые, а не фигурные.
     
  10. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Ага, и тип поля должен быть не longblog, а longblob
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ага мы все каждый день работаем с изображениями по 4ГБ весом. mediumblob'а хватит за глаза хранить сурсы. правда если фотик сильно огромные файлы делает то не влезет конечно.

    Добавлено спустя 9 минут 22 секунды:
    а я про логическую. по сути я не Хыиуду поправляю а бедного тс которому религия не позволяет хранить файлы в обычной файловой системе обычного жесткого диска. тип поля в базе ведь тоже божественно выбран. dvd-образ в него не пропихнешь но вот 1.37-рипы влезут спокойно. только мы же не про видеохостинг а про фотогалерею тут говорим.

    Добавлено спустя 3 минуты 18 секунд:
    вот блин поудаляют комменты свои и я как сам с собой тут беседу веду...
     
  12. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Ну это же классика, "дайте мне таблеток от жадности, да побольше, побольше!". Поскольку ты уже объяснил всю ущербность хранения бинарных файлов в БД, я указал на грамматическую ошибку в определении таблицы. Без этого явно бы не стал, а то подскажешь, как картинку в таблицу записать, а потом пойдут вопросы по поддержке этого сайта-кадавра.