Виртуальный магазин? Всего 3 часа работы и 5 Kb кода.
Что это?
Это так называемый виртуальный магазин, т.е. прайс лист некой организации с наименовнием товаров, часть из которых можно ПОМЕТИТЬ и занести в корзину, чтобы в дальнейшем можно было заполнить анкету (ФИО, адрес и т.д.) для покупки этих товаров. Все проще простого. Дизана нет никакого, только "скелет".
Требования: где ЭТО будет работать?
На win/unix в PHP версии не ниже 4.0 с поддержкой сессий. Включенных cookies от поcетителей не требуется. Надо лишь правильно настроить некоторые опции PHP, чтобы программа получила доступ к сессиям (будет написано ниже).
А почему размер файла 10Кб, а не 5Кб?
Если выкинуть все комментарии, вот и будет 5 кб :-) Программа (без комментариев) была написана за 3 часа в присутствии человека, изучающего ПХП. Комментарии, на самом деле были, но только устные :-)
Подготовка сервера
1. Возможный глюк: у вас не настроен временный каталог на сервере для размещения временных файлов.
2. Программа подразумевает, что PHP поместит в переменную $SID номер сесии. По умолчанию, возможно, этого не произойдет.
Для решения проблемы 1) и 2) пунктов надо изменить опции PHP. Это можно сделать в php.ini или файлах httpd.conf/.htaccess.
Вариант 1 - php.ini
Если править php.ini, то в нем уже есть те переменные, что надо изменить
ищем строку session.save_path и пишем путь к своему временному каталогу. В этот каталог Apache/PHP будут писать свои файлы, след. для них там должен быть доступ. Если у вас Unix, то пишем /tmp, если Windows, то \temp (не забудьте создать C:\TEMP или X:\TEMP, смотря где находится Апач)
ищем строку session.name и заменяем на SID (большими буквами)
Вариант 2 - .htaccess или httpd.conf
Если вносить те же измения в указанные файлы, то надо написать так:
вариант для unix: php_value session.save_path /tmp и для windows: php_value session.save_path \temp
и имя сессии: php_value session.name SID
Итак, нам надо для 1) и 2) пунктов подправить переменные PHP-процессора: session.save_path (временный каталог) и session.name (присвоить знаначение "SID").
Настройка каталога
создать файл shop.txt . Если вы захотите добавить новые колонки, то не забудьте, что первой кононкой должны идти ID товаров (например числа от 1 до ..), а последней - цена товара. Разделитель товаров - слеш (\).
создать файл shop.phtml (имя не принципиально), код программы приведен ниже.
Текст программы
// символы "" должны быть первыми(!) в файле. Т.е. ни пустых строк, ни
// пробелов до символов "" ставить нельзя, иначе не будет работать
// header - появятся warning'и
unset($t);
session_start();
/*
функция прибавляет в корзину новый товар, где $n - это номер строки
в shop.txt. Далее, в сессиях сохраняется не номер строки, а число ID
из shop.txt и используется повсеместно. Если товар уже существует,
то корзина никак не меняется.
*/
function tadd($n) {
global $t;
// открыли файл
$f=file("./shop.txt") or die("файл не найден");
// и получили нужную строку с товаром (в массив $o)
$o=explode("\\",$f[$n]);
$id=$o[0];
if (isset($t[all][$id])) return; // если товар уже в корзине - выход
$t[all][$id]=$id; // флаг, благодаря которому, двумя строчками выше
// мы определили, что товар уже есть в корзине
$t[$id][name]=$o[1]; // наименование
$t[$id][info]=$o[2]; // инфо
$t[$id][cena]=$o[3]; // и д.р. не значащие данные
$t[$id][kol]=1; // кол-во в начале равно "1 штуке"
session_register("t"); // записали переменную в сессию
}
/*
Рисует таблицу с товарами в корзине. Из файла shop.txt мы читаем только
названия колонок и не более. Названия товара (в данном случае только
название/цена/кол-во) берется из сессии.
*/
function korzina() {
global $t,$PHP_SELF,$SID;
$f=file("./shop.txt") or die("файл не найден");
$ogl=explode("\\",$f[0]);
echo "
";
}
/*
Выводит на экран таблицу с товарами. В таблице автоматом генериться новая
колонка с checkbox'асами, отметив которые и нажав "добавив", можно
занести товары в корзину.
*/
function price() {
global $t, $PHP_SELF,$SID;
$f=file("./shop.txt") or die("файл не найден"); // читаем файл
$ogl=explode("\\",$f[0]); // из него берем огравление
$x=count($ogl); // вычисляем число колонок
$y=count($f); // и число строк
// форма (не забываем вписать $SID) + начало таблицы:
echo "";
}
/*
Выводит на экран несколько чисел (написано). Подсчет значений происходит
при каджом вызове.
*/
function summa() {
global $t;
// традиционный проход массива товаров из корзины
$k=@array_keys($t[all]);
for ($i=0; $i",$summ);
}
/*
Объявление переменной post, которая содержит поля для заполнения
посетителем при оформление заказа. Т.к. этот список используется
2 раза, то описано это именно тут, а не ниже.
*/
$post=array(
"название организации",
"Ф.И.О. должностного лица",
"должность",
"ИНН организации",
"местонахождение организации",
"контактный телефон",
"e-mail");
/*****************************************************************************/
// основной код программы
// $c - основная переменная, указывающая на нужное действие
if (!isset($c)) $c='';
switch($c) {
case "":
// без параметров - рисуем прайс-лист
summa(); // статистика по корзине
price(); // прайс
// ссылка для перехода на корзину
echo "
Корзина покупок";
break;
case "korzina":
// вывод корзины
summa(); // см. выше
korzina(); // рисуем таблицу корзины
// пишем 2 ссылки
echo "
Очистить корзину (осторожно!)";
break;
case "add":
// добавление из формы прайса всех товаров
// в массиве $v скоплены номера строк товаров, которые функция ...
$k=@array_keys($v);
for ($i=0; $i".
"".
"
";
for ($i=0; $i
$post[$i]
";
}
echo "
";
break;
case "post":
// генерим и отправляем анкету посетителя, где указаны данные посетителя
// и список товаров из корзины
$msg="Анкета посетителя:\n\n";
for ($i=0; $i