Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

PHP, SQL, SSI-Дневник ламера, превращающегося в ГУРУ :-)


Информационный Канал Subscribe.Ru

Выпуск номер 3   Рассылка: Дневник ламера, превращающегося в ГУРУ
http://subscribe.ru/catalog/comp.soft.prog.php1sql1ssi
 

Здравствуйте снова.

В прошлом выпуске ошибся в имени товарища, который посоветовал нажимать 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 форме ПРИМЕРА небольшой кусок, которого небыло в МОЕЙ форме на страничке:

<form ENCTYPE="multipart/form-data" name="form2" method="post" action="addtovar.php">

<input type="file" name="photo">

</form>

Эта недостающая часть выделена выше жирным. После её вставки, в скрипте стала инициализироваться $photo_name в которой содержалось имя ЗАГРУЖАЕМОГО файла.


На сегодня хватит. Надо работу работать :-) Досвиданья всем. Пишите если что:
IrkutskProject(Собака)yandex.ru

         

http://subscribe.ru/
http://subscribe.ru/feedback/
Адрес подписки
Отписаться

В избранное