Очень распространенная ошибка при составлении таблиц MySQL и форм. Это использования названий, которые являются служебными (зарезервированные) и используются синтаксисом запросов или форм.
При совершении таких ошибок, можно долго не понимать причину неработающей формы или запроса/записи в базу данных. Ведь все сделано правильно, а не работает.
Пример ошибочной таблицы MySQL:
CREATE TABLE `my_table` (
`id` int(10) NOT NULL auto_increment,
`user` text NOT NULL,
`show` text NOT NULL,
PRIMARY KEY (`id`)
) ;
Тут мы сделали таблицу, в которую хотим записывать имя пользователя и в зависимости от show, показывать его или нет. Вроде все сделали верно, и назвали все своими именами. И без проблем сделаем запись в таблицу:
INSERT INTO my_table values (NULL, '$user', '$show')
Но при определенном запросе:
SELECT id, user FROM my_table WHERE show = '1'
Результата не будет и можно долго не понимать, почему же не работает. А не работает, потому что имя show используется в синтаксисе MySQL для построения запросов.
В этом случае проблему можно решить 2мя способами:
1. Это присвоить таблице и ее полям суффикс:
SELECT d.id, d.user FROM my_table as d WHERE d.show = '1'
2. Заключить имя show в ковычки.
SELECT id, user FROM my_table WHERE `show` = '1'
К именам, использующимися MySQL относятся : show, select, from, by, limit, update и т.д. Более подробно можно в справочнике по MySQL. И при использовании их, стоит добавлять суффикс или ковычки. В противном случае такой запрос работать не будет, и можно потратить массу времени на выяснении причины.
Теперь немного про формы.
Однажды столкнулся с проблемой (делая викторину на этом сайте), когда форма работала, но только находясь в корне. Т.е. несмотря на указанный путь (form action=”mod.php?n=Victorna”) вела на главную сайта. Проблему решал очень долго, консультируясь с разными людьми, спрашивая на форумах и перебирая весь код, дабы отыскать ошибку.
А проблема заключалась в поле ввода имени пользователя:
<input type="text" name="name">
Т.е. вот такой забавный баг, из-за присвоения текстовому полю служебного имени name.
Масса потраченного времени, всего из-за названия. Хотя на первый взгляд, кажется, что можно обзывать все любыми именами.
В других языках наверняка есть свои системные имена, которые нельзя или нежелательно использовать. Будьте внимательны. И если вы все сделали правильно, а результата нет, проверьте, не присвоили ли вы запрещенные имена в своем творении.