MySQL таблица настроек
[COLOR="Gray"]Задача: Создать таблицу настроек сайта, т.е. при инициализации происходит обращение к этой таблицы. Возможность расширения.[/COLOR]
Сначала думал о горизонтальной таблице, но пришел к выводу что вертикальная будет удобнее, а также разбить значение по типам, вот что получилось:
`name` VARCHAR( 15 ) NOT NULL ,
`valueInt` INT NULL ,
`valueBigInt` BIGINT NULL ,
`valueVarchar` VARCHAR( 255 ) NULL ,
`vatueText` TEXT NULL ,
`valueType` ENUM( 'Int', 'BigInt', 'Varchar', 'Text' ) DEFAULT NULL ,
`type` ENUM( 'const', 'var' ) DEFAULT 'const' NOT NULL ,
PRIMARY KEY ( `name` )
);
Вопрос, может проще сделать один тип поля
и всё хранить в нем? Или есть способ более экономичный и простой?
[COLOR="Gray"]Заранее спасибо за ответы.[/COLOR]
Топикстартеру:
Предлагаю такую таблицу, которая не сложна в обслуживании и удобно управляется:
id (int) primarykey autoincrement
param_name (tinytext)
param_value (tinytext)
param_text (tinytext) // для вывода русскоязычного описания в админке, например
---
таким образом поля могут принимать как численные значения, так и текстовые, нет никаких проблем с добавлением новых переменных, да и чтение просто.
Не знаю, каким языком программирования вы пользуетесь, но вот например ПХП нетипизированный язык, у вас одно и то же поле может быть и int и string и double (правда, некоторые это считают недостатком).
while($arr=mysql_fetch_array($res)) {
$system[$arr["param_name"]]=$arr["param_value"];
}
Всё, у вас есть массив системных данных.
В плане шаблонизации да. И многого другого тоже. А вот организация метаданных для постов, записей и пользователей мне как-раз таки понравилась.
Правда там по извращенней они global используют
Я, правда, отказался от хранения настроек (общих для всего сайта) в БД - храню в XML или INI, смотря по ситуации. Проще, быстрее, удобнее.
Я, правда, отказался от хранения настроек (общих для всего сайта) в БД - храню в XML или INI, смотря по ситуации. Проще, быстрее, удобнее.
А я создаю небольшой php файлик, в котором объявляю массив с настройками и определяю их там. Потом инклудю этот файлик куда мне надо и радуюсь. Так в друпале сделано.
Я так понимаю тут предполагаются те настройки, которые может менять пользователь.. В случае форума - админ.(Название форума, кол-во постов настраницу и т.д. и т.п.)
А такие как адресс мускуля, путь к рути-директори ... есно проще в файле задать. А формат файла, тот уже каждый себе сам выбирает. php,xml,yaml
ну вот тогда так, как в вордпрессе.
MySQL
таблица:
id (autoinc), type1, type2, text
записывается только type1, type2 и text. Если запись изменяется, то сначала делаю DEL WHERE type1=10 AND type2=3, и потом новый INSERT. В итоге 2 запроса.
Можно ли сделать сию операцию одним запросом?
а я же id не знаю, мне чтобы его получить нужно так же запрос делать... Если знать id то можно и ON DUBLICATE и REPLACE использовать.
?
/* Определяем значения переменным */
$hostname="localhost";
$username="root";
$password="";
/* Имя базы данных */
$dbName="test";
/* Таблица MySQL */
$usertable="test";
/* Создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу подсоединиться");
/* Выбор БД */
MYSQL_SELECT_DB($dbName) or die("Не могу выбрать БД");
/* Введение информации в БД */
$query="INSERT INTO $usertable VALUES ('$user_name','$phone','$job','$address')";
$result=MYSQL_QUERY($query);
/* Закрыть соединение */
MYSQL_CLOSE();
print "Запись введена в БД! <br>";
print "<a href='index.html'>Назад в меню</a>";
?>
но он не добавляет данные в базу, я думаю нет соединения
<head>
<title>form1</title>
<body>
<form method=post action="form1.php">
<br><b>Введите Ваше имя:</b>
<br><input name="user_name" value="" size=30>
<br><br><b>Введите номер Вашего телефона:</b>
<br><input name="phone" value="" size=10>
<br><br><b>Введите краткую характеристику:
<br><TEXTAREA NAME="job" ROWS=10 COLS=40></TEXTAREA>
<br><br><b>Введите свой адрес:</b>
<br><input name="address" value="" size=20>
<br><br><input type="submit" value="Зарегистрировать">
</form>
</body>
</html>
что нужно сделать чтобы данные заносились в базу данных
используйте mysql_errno() и mysql_error() для того, чтобы получить описание ошибки.
Также ошибок здесть может быть куча, начиная от того, что вместо $user_name следует юзать $_POST['user_name'] и т.д.
Кстати, для этого надо создавать отдельную тему + писать все в одном сообщении.
да, в этом фишка, они могут быть не уникальными, уникальный только id
Триггеры появились только в последних версиях этого жуткого MySQL (вроде как), поэтому не факт, что получится. Хотя и да, это вроде самое кошерное решение проблемы.
Не в таких уж и последних, единственное можно ли их на myISAM вешать...