Если переменная $n приходит как POST данные, то потенциальные хакеры могут ее заменить на '1 OR n=2 OR n=3..... UNION ....'; Таким образом, они могут послать практически любой запрос к БД. Еще нужно экранировать данные в запросе. Правильно будет сделать так:
Не может быть 10 гигов кэша в день) Да, недостатком Smarty является медленное кэширование. Можете почитать эту статью, в которой хорошо изложен способ ускорения этого процесса: http://i-novice[dot]net/keshirovanie-v-smarti/ . Ну и, конечно, кэширование можно отключить:
Советую забыть идею писать свой шаблонизатор. Он в любом случае будет хуже известных ветеранов. Лучше начните досконально изучать Smarty. Там есть и циклы и всё остальное. работает быстро. Можно настроить кэширование. http://smarty[dot]net .
Целесообразно использовать шаблонизатор. Я использую Smarty. Верстальщик дизайнер делает свою работу, я вставляю минимальный Смарти синтаксис и всё. Потом просто меняешь подгружаемый файл css.
Здесь при клике на элемент с id visits элемент с id count-span показывается, если до этого был скрыт, или наоборот.
Пример у меня на сайте на всех страницах кроме главной в футере. "посещения". http://www[dot]web-making[dot]net/projects.php
Я больше как-то аналог использую - htmlspecialchars.
При занесении в базу нужно ОБЯЗАТЕЛЬНО использовать mysql_real_escape_string. Это безопасно и правильно. И в базе у нас не хранятся разные кавычки. А выводится в зависимости от настроек "магических кавычек".
Если они выключены - перед выводом обрабатывать строку не надо.
Если включены - stripslashes.
Но лучше отключайте. Все равно в php 6 их не будет.
Да, думаю будет несложно сделать 2 таблицы в БД.
1) Таблица товаров id | name | ...
2) Таблица посещений tovar_id | user
Сделать связь tovars - visits один-ко-многим.
Логика такова: заходим на страницу товара, делаем запрос к БД примерно таким