| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Не выполняется INSERT INTO |
| Автор: thomas 27.10.2007, 00:05 | ||||
| Приветствую. Преамбула. Студент в вечерней вышке. По "нормальному" учусь писать на .NET(C# VB). В этом семестре должны были изучать ASP.NET. Но вмешались обстоятельства (наш штатный препод замещает заболевшего директора) и нам дали препода-"пацана" - учите мол пока PHP. "Пацан" толком ничего не обьясняет, а дает задания. Мол люди взрослые - сами разберетесь. Суть проблемы. Задали нам форум написать на PHP. Сделал три таблицы в БД (форумы, топики, посты). Так вот ни как не могу сделать INSERT поста в таблицу базы. Поле ID в таблице базы - автонумерация. На странице сделал несколько нужных форм. По идее из предыдущей страницы должен получить ID топика. Но обновления БД не происходит. Третий день читаю форум, но так ничего и не нашел. Просмотрел много тем касающихся БД и INSERT. Вроде все делаю правильно. НО ... Посмотрите код и направте на путь истинный. Заранее благодарю.
Да, соединение с базой есть, топики по форумам показываются, посты в топиках тоже (вносил в ручную через phpmyadmin) И после нажатия кнопки "Отослать" никаких сообщений об ошибке не выводиться, а просто переход на главную страницу форума. ЗЫ прежде чем создавать тему, честно пытался сам найти инфу на форуме и в инете. Не шмог. |
| Автор: Vaulter 27.10.2007, 02:44 |
| как обьявлена таблица? если автоинкремент поле - не вставляйте PostID (уберите из запроса вообще) |
| Автор: thomas 27.10.2007, 08:18 | ||||
Vaulter,
Таблица создана в phpmyadmin на сервере. Все файлы лежат там же. |
| Автор: HotHead 27.10.2007, 10:47 |
| Во-первых тег <form> пропущен. Он в скрипте есть? Во-вторых думаю, что до mysql дело вообще не дошло, т.к. чтобы отработала конструкция $_REQUEST[submit], надо иметь в форме что-нибудь с атрибутом name="submit". Если бы я обкатывал эту штуко то: 1) Взял бы таблицу в теги <form method="post"> ... </form> 2) Дал бы кнопке имя: <input type='submit' value='Versturen' name='submit'> 3) Почему на серверной части и $_POST и $_GET? Для избегания путаницы лучше использовать везде $_REQUEST, пока не разберётесь, когда $_POST, а когда $_GET. 4) Перед закрытием базы написал бы проверочку того, как прошёл запрос: echo ($result)?("Запрос прошёл"):("Запрос не прошёл"); Если добавив пункт 4 ничего не увидите, то значит до БД дело и не дошло. |
| Автор: flashaa 27.10.2007, 19:29 |
В смысле покажите show create table. У вас везде написано вот так... Но это же ошибка. Ключ должен быть заключен в кавычки, в противном случае PHP расценивает то, что в квадратных скобках как константу. http://ru2.php.net/manual/ru/language.types.array.php И вообще форум не такой информационно-содержательный источник, чтобы читать взапой. Лучше потратьте то же время на чтение документации. |
| Автор: thomas 27.10.2007, 19:48 | ||||
| HotHead, Приветствую. Теги формы не были пропущены, в них была заключена вся таблица на странице. А имя для submit я действительно пропустил. Заменил POST и GET на REQUEST. В общем пока то, что не получалось решил. Всем спасибо. flashaa,
Ну прежде чем вопросы задавать, предпочитаю сначала заюзать поиск по форуму. Думаю, так правильнее. А документация, да ЭТО СИЛА, согласен на 153% |
| Автор: thomas 27.10.2007, 20:30 | ||
В принципе проблему решил таким образом.
Для общего развития готов принять критику,дополнения и подсказки правильных решений. Еще раз всем спасибо за помощь. |
| Автор: HotHead 27.10.2007, 21:10 |
| flashaa, $_REQUEST[submit] - не смертельно, хотя так делать конечно не надо. Если скрипт не найдёт константы с таким именем, то выдаст предупреждение уровня E_NOTICE и продолжит работу так, как будто это строка. thomas, смотрите что написал flashaa. Гораздо лучше действительно брать ключ в кавычки (' или "). В будущем избавит от кучи неприятностей. Так же как и "<?php" вместо "<?". Не помню как называлась директива (кажется short_open_tag), но если она в php.ini не прописана, то при переносе на новое место вас может ждать такой сюрприз, что ничего работать не будет. Лучше заранее избавить себя от возможных проблем прописывая лишние три символа. Ну и по мелочи. В date текущая дата используется по умолчанию, так что можно писать просто $time = date("Y-m-d H:i:s"); В остольном вполне достойно для начала. |
| Автор: thomas 27.10.2007, 22:05 |
| HotHead, Рекомендации правильные и своевременные. |
| Автор: flashaa 29.10.2007, 17:50 | ||
| phpmyadmin это только php-оболочка для отправки запросов к серверу БД, поэтому суть не меняется, одни и те же запросы, только в данном случае через удобный интерфейс. show create table tbl_name; этот запрос выводит полное описание таблицы, т.е. если более точно - запрос create table для того чтобы создать таблицу, идентичную tbl_name. Будут указаны все поля, их типы, аттрибуты, значения по умолчанию, комментарии, ключи таблицы, её движок (ENGINE), кодировка всех текстовых полей и кодировка самой таблицы. Поскольку все характеристики таблицы видны, эта команда очень полезна для отладки, ну и для тех, кто хочет понять, как была сделана Ваша таблица. Очень полезная команда. В phpmyadmin можно запустить любой запрос, введя его во вкладке SQL, хотя вполне вероятно, что подобный вывод для любой таблицы можно получить через интерфейс phpmyadmin.
|
| Автор: Flat 28.7.2009, 20:26 | ||
народ сильно не бейте я с тем же вопросом...
дает ошибку 'Ошибка выполнения запроса'... че тока не пробовал... и яндекс замучил и форум ваш ) и ученики листал ... толи гдето чето проглядел ... толи че.. в базе запись не появляеться |
| Автор: Ипатьев 28.7.2009, 20:34 |
| Вместо 'Ошибка выполнения запроса' надо писать mysql_error() Тогда, к нашему удивлдению, мы сможем прочесть, в чем состоит проблема. It's a magic |
| Автор: Photon 29.7.2009, 03:26 | ||
Flat, это что?
Как я понимаю, $dbname - это имя базы данных. Так какого ж оно хрена делает вместо необязательного параметра указатель_на_соединение? С чего бы при таком раскладе что-то куда-то добавлялось? |