WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




Работа с текстовыми и графическими данными совместно в PHP и MySQL


Прислал: Valery Kossarik [ 18.03.2002 @ 16:30 ]
Раздел:: [ Статьи по PHP ]


Я прочитал много документов посвященных этой теме, в результате попробовал десяток из них, и ничего не получив в ответ правильно работающего, решил сам написать более менее подходящий для моей задачи решение.
Итак, постановка задачи:
  1. Требуется хранить в базе данных такую информацию:
Фамилия, имя, отчество email, фотографию и краткое описание (или биографию) человека.
Для достижения поставленной цели выбран вполне распространенный комплект веб-сервера: Apache 1.3.20, PHP 4.1.0, MySQL 4.0.0.
Для начала создаем БД:
mysqladmin –p create testdb
затем делаем ее текущей:
use testdb.
Дальше создаем таблицу для хранения информации:
CREATE TABLE infouser (
  id_infouser int(7) unsigned NOT NULL auto_increment,
  lastname varchar(255) NOT NULL default '',
  firstname varchar(255) NOT NULL default '',
  patronym varchar(255) NOT NULL default '',
  imageinfouser mediumblob,
  filename1 varchar(50) default NULL,
  filesize1 varchar(50) default NULL,
  filetype1 varchar(50) default NULL,
  infoinfouser varchar(255) default NULL,
  emailinfouser varchar(100) default NULL,
  PRIMARY KEY  (id_infouser))
 
Сначала создадим файл для хранения функций, таких как, соединение с БД, и шаблонов, чтобы десять раз не переписывать одно и то же:
<?php
// tags for open html-docs
function html_begin($header)
{
    print("<html>\n");
    print("<head>\n");
    print("<META HTTP-EQUIV=\"Content-Type\" Content=\"text/html">");
    print("<title>Тестовая БД</title>\n");
    print("</head>\n");
    print("<body text = \"#000000\" bgcolor = \"#52FA90\">\n");
    print("<br><center><table width = \"90%\" border = \"1\" bgcolor = \"green\" cols = \"1\">");
    print("<tr><td><p style = \"text-align: justify; margin-left: 50 px; margin-right: 50 px\">");
    if ($header)
       print("<h3>$header</h3>\n");
       print("</p><hr width = \"100%\" size = \"1\" color = \"#c0c0c0\"><p>");
}
//
// tags for close html-docs
function html_end()
{
    print("</td></tr></table></center>");
    print("</body></html>");
}
//
// function for connect mysql and select database
function connect_mysql()
{
define("DBName","testdb");
define("HostName","localhost");
define("UserName","valery");
define("Password","");
if(!mysql_connect(HostName,UserName,Password))
{  echo "Сервер временно не работает, заходите позже.".DBName."!<br>";
   echo mysql_error();
   exit;
}
mysql_select_db(DBName);
}
?>
Делаем форму для ввода информации.
Файл с именем insert.php
<?php
include("function.inc");
$header = ("ввести нового человека");
html_begin ($header);
?>
<form action = "insert2.php" method = "post" enctype = "multipart/form-data">
Фамилия: <input type = "text" name = "lastname" size = "30" maxlenght = "30"><br>
Имя: <input type = "text" name = "firstname" size = "30" maxlenght = "30"><br>
Отчество: <input type = "text" name = "patronym" size = "30" maxlenght = "30"><br>
Email: <input type = "text" name = "email" size = "30" maxlenght = "30"><br>
Фотография: <input type = "file" name = "userfile"><br>
Информация о человеке:<br>
<textarea name = "infoinfouser" cols = "40" rows = "5"></textarea>
<br>
<input type = "submit" value = "Ввести нового человека"><br>
</form>
<?php
html_end();
?>
затем идет страница принимающая информацию имя файла достаточно очевидно insert2.php:
<?php
include("function.inc");
$header = ("ввод информации");
html_begin ($header);
//
//read file image
$fd = fopen ($userfile, "rb");
$userfile2 = fread ($fd, filesize ($userfile));
fclose ($fd);
$userfile2 = addslashes($userfile2);
//
// insert in db
//
connect_mysql();
mysql_query("SELECT * FROM infouser");
mysql_query("INSERT INTO infouser(id_infouser, lastname, firstname, patronym, imageinfouser, filename1, filesize1, filetype1, infoinfouser, email_infouser) VALUES('','$lastname', '$firstname', '$patronym', '$userfile2', '$userfile_name', '$userfile_size',  '$userfile_type',  '$infoinfouser',  '$email')");
echo "<br>";
print "Новый пользователь успешно введен";
mysql_close();
html_end();
?>
вот и все мы ввели данные, теперь их надо как-то прочитать.
Для этого используем еще три файла.
Первый файл выдает список пользователей.
prev.php
<?php
include("function.inc");
//
$header = ("просмотр записей");
html_begin ($header);
//
connect_mysql();
//
print ("<table cols =\"1\">");
// Выводим все записи
$r=mysql_query("SELECT * FROM infouser");
for($i=0; $i<mysql_num_rows($r); $i++)
{  $f=mysql_fetch_array($r);
print "<tr>";
print "<td align = \"center\">";
print "<a  target = \"_new\"  href = \"sample.php?id=$f[id_infouser]\">$f[lastname] $f[firstname] $f[patronym] </a>";
print "<p>";
//
print "</td>";
print "</tr>";
}
print "</table>";
mysql_close();
html_end();
?>
второй файл используется для выдачи данных по одному пользователю:
sample.php
<?php
//
include("function.inc");
$header = ("просмотр записей");
html_begin ($header);
//
connect_mysql();
//
reset ($HTTP_GET_VARS);
while (list ($key, $val) = each ($HTTP_GET_VARS)) {
//
$sql = "SELECT * FROM infouser WHERE id_infouser = '$val'";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
echo "<table border = \"0\" width = \"70%\">\n";
for ($i = 0; $i < $rows; $i++) {
$data = mysql_fetch_object($result);
echo " <tr>\n";
echo " <td><font color = \"red\" size = \"+1\">$data->lastname<br> $data->firstname<br> $data->patronym<br></font></td>\n";
echo " <td rowspan = \"2\"><center><img src = 'download.php?id=$data->id_infouser' border = '2' bgcolor = '#01cccc'></center></td>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td><font color = \"green\">$data->emailinfouser</font></td>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td colspan = \"2\">$data->infoinfouser</td>\n";
echo " </tr>\n";
}
mysql_free_result($result);
}
mysql_close();
//
html_end();
?>
следующий файл реализует обработку фотографий и выдачу их:
download.php
<?php
//
reset ($HTTP_GET_VARS);
while (list ($key, $val) = each ($HTTP_GET_VARS)) {
//
//
define("DBName","testdb");
define("HostName","localhost");
define("UserName","valery");
define("Password","");
if(!mysql_connect(HostName,UserName,Password))
{  echo "Сервер временно не работает, заходите позже.".DBName."!<br>";
   echo mysql_error();
   exit;
}
mysql_select_db(DBName);
//
//
$sql = "SELECT imageinfouser, filename1, filetype1 FROM infouser WHERE id_infouser='$val'";
$result = @mysql_query($sql);
$data = @mysql_result($result, 0, "imageinfouser");
$name = @mysql_result($result, 0, "filename1");
$type = @mysql_result($result, 0, "filetype1");
header("Content-type: $type");
echo $data;
}
mysql_close();
?>
если есть вопросы пишите: valery_lek@mail.ru



 :::::  Andrej пишет 18.03.2002 @ 21:45 
У меня на повестке дня стоит задача несколько иного характера:
Данные о человеке -в данном случае сотруднике института- вводит и редактирует по выданному поролю (у каждого он, естесственно, должен быть свой) не администратор, а сам человек. Администратор, впрочем, тоже наделен властью вмешиваться (универсальный пароль), но вся рутинная работа перенесена должна быть на тех, о ком странички. Если таких сотрудников около 200 человек, каждый из них в состоянии заполнить форму, то нафига тогда администратору так мучится? Да при этом еще и биографии сотрудников постоянно дополняются (вносятся сведения о новых публикациях и т.д.)
 :::::  Max пишет 19.03.2002 @ 01:07 
Сделай проверку данных, оптимизацию запросов и кода и будет вполне рабочий вариант. Хотя я не одобряю запись большого количества файлов в БД (MySQL) и имхо лучше ее делать через Load_File().

Версию php нужно ОБЯЗАТЕЛЬНО взять не ниже 4.1.2 - в предыдущих дыра с закачкой файлов.
Этот скрипт реально где-нибудь работает? Просто интересно посмотреть на подобную работающую систему, в которой бы было тысяч 100 записей.

 :::::  LexXai пишет 19.03.2002 @ 10:49 
Такое впечатление что кусочки взяты из разных приверов, казалось бы одно и тоже инициализвция базы, а в dowload она сделана самостоятельно не используя include("function.inc");
Да и каково назанчение применения while (list ($key, $val) = each $HTTP_GET_VARS)) если запрос идет по только по одной переменной одновреммено sample.php?id=$f[id_infouser] ?


 :::::  voban пишет 29.04.2002 @ 17:53 
Что-то я не догнал, где определяются $userfile_name,$userfile_size, $userfile_type
 :::::  vovan пишет 29.04.2002 @ 17:53 
Что-то я не догнал, где определяются $userfile_name,$userfile_size, $userfile_type
 :::::  AlieN пишет 29.04.2002 @ 19:19 
vovan,
если в поле ввода файла стоит <iput type=file name=super_file>,
то размер будет его храниться в переменной
$super_file["size"] или (для версии 4.2) $HTTP_POST_FILES["super_file"]["size"]
 :::::  Kostya пишет 14.12.2002 @ 20:14 
It doesnt work properly. I dont know why.
It shows the messsages stored in the DB in a random order.
And doesnt list the messages below the HR. Just shows some of them.
Answer me!
 :::::  user пишет 30.01.2003 @ 05:49 
них@я себе распространённый комплект веб-сервера: Apache 1.3.20, PHP 4.1.0, MySQL 4.0.0.! скажи, у кого из хостеров поставлен mysql 4 версии?

 :::::  user пишет 30.01.2003 @ 05:55 
И вот ещё что.. хранить фотографию в базе конечно можно, но это не оправданно расходами процессорного времени, гораздо продуктивнее создать каталог под фотографии, с этого будет много ++, в производительности, ведь не надо будет "напрягать" б.д. для выборки && вставки довольно большого массива данных=)
 :::::  не важно пишет 09.02.2003 @ 12:42 
print("<html>\n");
print("<head>\n");
print("<META HTTP-EQUIV=\"Content-Type\" Content=\"text/html">");
print("<title>Тестовая БД</title>\n");
print("</head>\n");
print("<body text = \"#000000\" bgcolor = \"#52FA90\">\n");
print("<br><center><table width = \"90%\" border = \"1\" bgcolor = \"green\" cols = \"1\">");
print("<tr><td><p style = \"text-align: justify; margin-left: 50 px; margin-right: 50 px\">");


мда ..
echo ' <тут весь хтмл код с "кавычками"> ';
хранить картинку в базе ..
вы бы еще .ехе туда засунули

потом все удивляюца типа почему проги такие требовательные к ресурсам
 :::::  Sergey пишет 23.02.2003 @ 19:41 
Люди, помогите!!!

Есть база base.dbf , мне нужно сделать как бы онлайн базу на сайте, показывая из неё 4 поля. Подскажите, как это сделать? ОЧЕНЬ НУЖНО!

Спасибо.
 :::::  MaxleY пишет 07.03.2003 @ 19:47 
Фигня какая-то...

Parse error: parse error, unexpected '<' in D:\...неважно...\function.php on line 8

Fatal error: Call to undefined function: html_begin() in D:\...неважно...\prev.php on line 5

 :::::  MaxleY пишет 07.03.2003 @ 19:51 
Хммм... закоментил две строчки... заработало...

// print("<META HTTP-EQUIV=\"Content-Type\" Content=\"text/html">");
// print("<title>Тестовая БД</title>\n");
 :::::  MaxleY пишет 07.03.2003 @ 20:01 
инфу не сохраняет, хотя говорит все ок, вывод работает
 :::::  macik пишет 21.03.2003 @ 22:00 
Народ кто мне скажет, как мне из базы вытащить не весь текст, а только пару строк или байт (как кому нравится)?
очень надо!

 :::::  DeadAdmin пишет 25.03.2003 @ 01:06 
MaxleY:
можешь раскоментить и поменять на:

print("<META HTTP-EQUIV=\"Content-Type\" Content=\"text/html\">");
print("<title>Тестовая БД</title>\n");
 :::::  Drive пишет 26.04.2003 @ 12:11 
ЭЭЭ, народ, а кто-нить пробовал всё это великолепие в MySQL 3.23.47 ???
 :::::  Valery Kossarik пишет 08.05.2003 @ 18:50 
Я пробовал у меня на сайте работает, а 4 версия стоит на экпериментальном компьютере.
 :::::  MIS_525 пишет 21.07.2003 @ 15:05 
etot skript rabotaet na samom dele ili net?! vi mojete ukazat adres gde on rabotaet?
 :::::  Tony пишет 21.07.2003 @ 17:38 
Ребята, а можно с помощью этого прайс-лист делать? Как? как из ёкселя инфу брать или как из текстового файла? Если кто может помочь. напишите...
Ну не бесплатно конечно, но за разумные деньги.
пишите плз.
to-tosha@narod.ru
Ах да, если кто подскажет учебники, примеры то я буду очень благодарен!
 :::::  qtricker пишет 16.09.2003 @ 08:34 
все конечно прекрасно, но зачем кавычки и тем более \"
в хтмл их можно не использовать!
 :::::  автор пишет 20.11.2003 @ 17:52 
я пытался по науке на 16.9.
 :::::  samsungshop.ru пишет 04.03.2004 @ 16:00 
Итак, мы имеем: БД с описанием товаров примерно 500-600 позиций, в каждой записи 7 полей и каждая запись имеет фотографию 5-30кб. Обновление БД происходит сливанием ее на локальный компутер, обновлением и закачкой. Зачем добавлять еще 1 поле с графикой в БД, тормозя сервер + увеличивая объем информации в дампе БД??? По моему проще и практичнее реализовать так (а оно так и реализовано): в бд есть 2 поля: 1-название модели товара, 2-номер подкатегории, и при обращении к записи скрипт просто вставляет путь к картинке типа $категория/$модель.jpg . К тому же процесс замены самих картинок по-моему проще производить... Я не прав?
 :::::  автор пишет 04.03.2004 @ 17:41 
на 04.03.2004. прав... но у каждого свои задачи....
 :::::  Admi пишет 13.06.2004 @ 10:48 
to: MaxleY пишет 07.03.2003 @ 19:51

В строчке с text/html не стоит "\" перед предпоследней кавычкой.


to: Drive пишет 26.04.2003 @ 12:11
- Пробовал в 3.23.49, но скрипт только создает видимость работы, а на деле ни добавляет, ни показывает никаких данных из БД.
---------------
Мне бы хотелось узнать вот что: как быть с mySQL 3.23.49 - т.е., может быть возможно где-то упростить и адаптировать код? Хоть подскажите, где, а то я не в курсе, чем эти версии различаются...
Имя:
Email:
URL

Введите сумму двух чисел девять и шесть (девять+шесть=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0232401