В прошлом выпуске ошибся в имени товарища, который посоветовал нажимать Shift+Enter для переноса строк в Дреаме, его зовут: Русинов Владимир Прошу прощения.
Теперь продолжим тему о запросах к SQL базе.
В первом выпуске я указал команду для создания базы данных: mysql_create_db("Имя Базы типа string", $db);
Это из старой версии и сейчас лучше пользовать другую команду:
$query="create database ИМЯ;";
$result=mysql_query($query, $bd); // $db здесь идентификатор соединения, полученный командой $db=mysql_connect(); Такая будет работать нормально. Если значение $result=1 то зачит запрос выполнен успешно.
Далее, создав базу, надо выбрать её для работы mysql_select_db("Ия базы", $db); и создать таблицы, в которых будет храниться информация: $query="create table city (id int auto_increment primary key, title varchar(250), data text, enable bool)";
city - название таблицы, далее ID - название поля с автоматическим приращением, начинающимся с единицы(1). Это поле также является основным(primary key) в таблице, так как никакое другое поле не может быть таковым, тоесть поле с автоматическим приращением, если оно есть в таблице, должно быть (primary key), иначе таблица не будет создана. Cледующее поле (title) имеет символьный тип VARCHAR и имеет максимальную длину (250) символов, далее поле DATA имеет тип TEXT. Тут я в практике не сталкивался c ограничением на длину, хотя должно быть какое-то, но держит достаточно большие объёмы, хотя IMHO...
Не самый лучший выход держать в SQL базе действительно ЧУДОВИЩНЫЕ объёмы информации, лучше хранить название файла в поле длиной байтиков 20 и потом включать на странице текст оператором include "Имя Файла"; В который... и из котоорго передаются все переменные, имеющиеся в главном скрипте. Но в подгружаемом скрипте команда include уже не работает.
Дня два назад как-раз копался с загрузкой файлов на сервер. Нужно было класть в каталог картинки товаров, которые будут показываться в интернет-магазине. В теории всё было просто :-)
Есть команды: is_uploaded_file($photo); проверяет, загружен-ли файл. move_uploaded_file($photo, $dir); копирует загруженный файл куда надо, а точнее в файл $dir
Так-как люди ламеры и могут загружать в одну и туже директорию файлы с одинаковыми именами, то пришлось создать процедурку, которая вставляет в файл рандомное число:
$max="40000"; if(isset($photo) && filesize($photo)<=$max) // Если вообще фотография получена и если её размер ( filesize($photo)<=$max ) не больше 40000 байтов то идём дальше { $rand=rand(1, 999); // Генерируем случайное число, добавляющееся к имени картинки $file='a'."$rand".$photo_name; //добавляем рандом к имени картинки
Прошу обратить внимание на переменную $photo_name про неё расскажу позже.
$query="select * from tovar where photo='".$file."';"; // Проверяем таблицу на наличие картинки с таким-же именем
$result=mysql_query($query, $db); $updir="./image/"; // Директория для загрузки картинок на сервере. Символы ./ говорят о том, что каталог image находится уровнем выше. $count=mysql_num_rows($result); //Считаем количество строк в результате запроса while($count != 0) // пока не НОЛЬ гоняем цикл {
$rand=rand(1, 9999); $file='b'."$rand".$photo_name; //Опять генератор рандома, как и в начале
$query="select * from tovar where photo='".$file."';";
$result=mysql_query($query, $db); //Опять проверка базы, хоть вероятность теперь и совсем исчезающе мала, но бог любит тех, кто сам не лажается ;-)
$count=mysql_num_rows($result); } $dir=$updir.$file; // Путь загрузки картинки
move_uploaded_file($photo, $dir); // Happy End - Грузим картинку куда надо. В общем-то самая главнвя функция. Ради неё всё выше и придумано :-)
} else {$file=0;} // Если файл вообще небыл присоединён, то в таблице будет 0 вместо имени файла с картинкой товара.
Функция mysql_num_rows($result) даёт количество строк после запроса. В нашем случае, если есть хоть одна строка, значит картинка с таким именем уже загружена и надо менять имя. Для этого и гоняется цикл. Конечно вероятность даже совпадения в первом случае достаточно мала, но лучше сделать так, чтобы вероятность есовпадения была 100%
Это исключит в дальнейшем лишний геморрой вам :-)
Переменная: $photo как-раз то, что я получал из HTMLной формочки на странице. Выглядела она сначала так:
<form name="form2" method="post" action="addtovar.php">
<input type="file" name="photo">
</form>
Теперь о переменной: $photo_name Она НЕ инициализировалась в начале. Тоесть её и не должно было быть по идее, но в примере, в котором я копался БЫЛА и тоже нигде не инициализировалась. В начале была проблема с тем, что она и у меня не определялась, выдавая ошибку, но потом, порывшись подробнее, я заметил в HTML форме ПРИМЕРА небольшой кусок, которого небыло в МОЕЙ форме на страничке:
Эта недостающая часть выделена выше жирным. После её вставки, в скрипте стала инициализироваться $photo_name в которой содержалось имя ЗАГРУЖАЕМОГО файла.
На сегодня хватит. Надо работу работать :-) Досвиданья всем. Пишите если что: IrkutskProject(Собака)yandex.ru