Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не выполняется INSERT INTO, как добавить записи в базу данных 
V
    Опции темы
thomas
Дата 27.10.2007, 00:05 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: нет
Всего: 65



Приветствую.
Преамбула.
Студент в вечерней вышке. По "нормальному" учусь писать на .NET(C# VB). В этом семестре должны были изучать ASP.NET. Но вмешались обстоятельства (наш штатный препод замещает заболевшего директора) и нам дали препода-"пацана" - учите мол пока PHP. "Пацан" толком ничего не обьясняет, а дает задания. Мол люди взрослые -  сами разберетесь.

Суть проблемы.
 Задали нам форум написать на PHP.
Сделал три таблицы в БД (форумы, топики, посты). Так вот ни как не могу сделать INSERT поста в таблицу базы. Поле ID в таблице базы -  автонумерация.
На странице сделал несколько нужных форм. По идее из предыдущей страницы должен получить ID топика. Но обновления БД не происходит.
Третий день читаю форум, но так ничего и не нашел. Просмотрел много тем касающихся БД и INSERT. Вроде все делаю правильно. НО ...

Посмотрите код и направте на путь истинный. 
Заранее благодарю.
 
Код

<?
    session_start();
    session_name('vad');
    include('dbconnection.php');
    if(isset($_REQUEST[submit]))
    {
        $title=$_POST[title];
        $text=$_POST[text];
        $auteur=$_POST[auteur];
        define('NOW',time());
        $time = date("Y-m-d H:i:s",NOW);
        $topic=$_GET['id'];
        $result=mysql_query("INSERT INTO tblPosts (PostID, PostTitle ,PostText, PostAuteur, PostDatetime, PostTopicID) VALUES ('','$title','$text','$auteur','$time','$topic')");
        mysql_close();
    }
?>

Код

<table width='780' border='1' align='center'>
                <tr>
                    <td width='180' valign='top'>
                        Bericht van:</br>
                        <input type='text' name='auteur'></br>
                        Bericht titel:</br>
                        <input type='text' name='title'>
                    </td>
                    <td width='600'>
                        <textarea name="text" style="width: 580px; height: 80px;"></textarea>
                    </td>
                </tr>
                <tr>
                    <td>
                    </td>
                    <td>
                        <input type='hidden' name='page' value='3'>
                        <input type='submit' value='Versturen'>
                    </td>
                </tr>
            </table>


Да, соединение с базой есть, топики по форумам показываются, посты в топиках тоже (вносил в ручную через phpmyadmin) 
И после нажатия кнопки "Отослать" никаких сообщений об ошибке не выводиться, а просто переход на главную страницу форума.

ЗЫ прежде чем создавать тему, честно пытался сам найти инфу на форуме и в инете. Не шмог.  smile 

Это сообщение отредактировал(а) thomas - 27.10.2007, 00:09


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Vaulter
Дата 27.10.2007, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 3
Всего: 22



как обьявлена таблица?
если автоинкремент поле - 
не вставляйте PostID (уберите из запроса вообще)



--------------------
PM MAIL WWW ICQ   Вверх
thomas
Дата 27.10.2007, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: нет
Всего: 65



Vaulter
Цитата

если автоинкремент поле - 
не вставляйте PostID (уберите из запроса вообще)
 первоначально там его и не было, вставил потом, после штудирования форума. Без него тоже не работало.
Цитата

как обьявлена таблица?
В смысле?
Таблица создана в phpmyadmin на сервере. Все файлы лежат там же.



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
HotHead
Дата 27.10.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 26.10.2007

Репутация: нет
Всего: 4



Во-первых тег <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 ничего не увидите, то значит до БД дело и не дошло.
PM MAIL   Вверх
flashaa
Дата 27.10.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



Цитата(thomas @  27.10.2007,  08:18 Найти цитируемый пост)
Цитата

как обьявлена таблица?
В смысле?

В смысле покажите show create table.

Цитата(thomas @  27.10.2007,  00:05 Найти цитируемый пост)
$_REQUEST[submit]

У вас везде написано вот так... Но это же ошибка. Ключ должен быть заключен в кавычки, 
в противном случае PHP расценивает то, что в квадратных скобках как константу.
http://ru2.php.net/manual/ru/language.types.array.php

И вообще форум не такой информационно-содержательный источник, чтобы читать взапой. Лучше потратьте то же время на чтение документации. smile 

PM MAIL   Вверх
thomas
Дата 27.10.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: нет
Всего: 65



HotHead
Приветствую.
Теги формы не были пропущены, в них была заключена вся таблица на странице.
А имя для submit  я действительно пропустил. 
Заменил POST и GET на  REQUEST. 

В общем пока то, что не получалось решил.

Всем спасибо.


flashaa
Цитата

В смысле покажите show create table.
А это что? Таблицу делал ручками прямо на сервере через phpmyadmin.

Цитата

И вообще форум не такой информационно-содержательный источник, чтобы читать взапой. Лучше потратьте то же время на чтение документации. 

Ну прежде чем вопросы задавать, предпочитаю сначала заюзать поиск по форуму. Думаю, так правильнее. А документация, да ЭТО СИЛА, согласен на 153%

Это сообщение отредактировал(а) thomas - 27.10.2007, 20:34


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
thomas
Дата 27.10.2007, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: нет
Всего: 65



В принципе проблему решил таким образом.
Код

<?
if(isset($_REQUEST[submit]))
    {
        $title=$_POST[title];
        $text=$_POST[text];
        $auteur=$_POST[auteur];
        define('NOW',time());
        $time = date("Y-m-d H:i:s",NOW);
        $topic=$_POST['id'];
        mysql_query("INSERT INTO tblPosts (PostID, PostTitle ,PostText, PostAuteur, PostDatetime, PostTopicID) VALUES ('','$title','$text','$auteur','$time','$topic')");    
    }
    //tont inhoud van posts op pagina
    $sql="SELECT * FROM tblPosts WHERE PostTopicID = ".$_REQUEST['id']." ORDER BY PostDatetime";
    $result=mysql_query($sql);
?>
<table width='100%' border='0' align='center'>
    <tr>
        <td>
            <table width='780' border='1' align='center'>
                <tr>
                    <td width='180'>
                        Auteur
                    </td>
                    <td width='600'>
                        Bericht
                    </td>
                </tr>
                <?
                while($rows=mysql_fetch_array($result))
                {
                ?>
                    <tr>
                        <td>
                            <? echo $rows['PostAuteur'];?>
                        </td>
                        <td>
                            <? echo $rows['PostText'];?>
                        </td>
                    </tr>
                <?
                }
                ?>
            </table>
        </td>
    </tr>
    <tr>
        <td>    
            <!-- Post voor forum intevullen  -->
            <form action='index.php' method='post'>
                <table width='780' border='1' align='center'>
                    <tr>
                        <td width='180' valign='top'>
                            Bericht van:</br>
                            <input type='text' name='auteur'></br>
                            Bericht titel:</br>
                            <input type='text' name='title'>
                        </td>
                        <td width='600'>
                            <textarea name="text" style="width: 580px; height: 80px;"></textarea>
                        </td>
                    </tr>
                    <tr>
                        <td>
                        </td>
                        <td>
                            <input type='hidden' name='page' value='3'>
                            <input type='hidden' name='id' value='<?= $_REQUEST['id']?>'>
                            <input type='submit' name='submit' value='Versturen'>
                        </td>
                    </tr>
                </table>                
            </form>            
        </td>
    </tr>
</table>


Для общего развития готов принять критику,дополнения и подсказки правильных решений.
Еще раз всем спасибо за помощь.  smile 

Это сообщение отредактировал(а) thomas - 27.10.2007, 20:31


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
HotHead
Дата 27.10.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 26.10.2007

Репутация: нет
Всего: 4



flashaa
$_REQUEST[submit] - не смертельно, хотя так делать конечно не надо. Если скрипт не найдёт константы с таким именем, то выдаст предупреждение уровня E_NOTICE и продолжит работу так, как будто это строка.

thomas, смотрите что написал flashaa. Гораздо лучше действительно брать ключ в кавычки (' или "). В будущем избавит от кучи неприятностей. Так же как и "<?php" вместо "<?". Не помню как называлась директива (кажется short_open_tag), но если она в php.ini не прописана, то при переносе на новое место вас может ждать такой сюрприз, что ничего работать не будет. Лучше заранее избавить себя от возможных проблем прописывая лишние три символа. 

Ну и по мелочи. В date текущая дата используется по умолчанию, так что можно писать просто $time = date("Y-m-d H:i:s"); В остольном вполне достойно для начала.
PM MAIL   Вверх
thomas
Дата 27.10.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: нет
Всего: 65



HotHead
 smile  будет исполнено.
Рекомендации правильные и своевременные.



Это сообщение отредактировал(а) thomas - 27.10.2007, 22:21


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
flashaa
Дата 29.10.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



phpmyadmin это только php-оболочка для отправки запросов к серверу БД, поэтому суть не меняется, одни и те же запросы, только в данном случае через удобный интерфейс.
show create table tbl_name;
этот запрос выводит полное описание таблицы, т.е. если более точно - запрос create table для того чтобы  создать таблицу, идентичную tbl_name.
Будут указаны все поля, их типы, аттрибуты, значения по умолчанию, комментарии, ключи таблицы, её движок (ENGINE), кодировка всех текстовых полей и кодировка самой таблицы.
Поскольку все характеристики таблицы видны, эта команда очень полезна для отладки, ну и для тех, кто хочет понять, как была сделана Ваша таблица. Очень полезная команда. 
В phpmyadmin можно запустить любой запрос, введя его во вкладке SQL, хотя вполне вероятно, что подобный вывод для любой таблицы можно получить через интерфейс phpmyadmin.
Код

mysql> show create table proc;

| proc  | CREATE TABLE `proc` (
  `db` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
  `name` char(64) NOT NULL DEFAULT '',
  `type` enum('FUNCTION','PROCEDURE') NOT NULL,
  `specific_name` char(64) NOT NULL DEFAULT '',
  `language` enum('SQL') NOT NULL DEFAULT 'SQL',
  `sql_data_access` enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA') NOT NULL DEFAULT 'CONTAINS_SQL',
  `is_deterministic` enum('YES','NO') NOT NULL DEFAULT 'NO',
  `security_type` enum('INVOKER','DEFINER') NOT NULL DEFAULT 'DEFINER',
  `param_list` blob NOT NULL,
  `returns` char(64) NOT NULL DEFAULT '',
  `body` longblob NOT NULL,
  `definer` char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR
_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AU
TO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DI
VISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') NOT NULL DEFAULT '',
  `comment` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
  PRIMARY KEY (`db`,`name`,`type`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Stored Procedures' |

1 row in set (0.03 sec)


Это сообщение отредактировал(а) flashaa - 29.10.2007, 17:51
PM MAIL   Вверх
Flat
Дата 28.7.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 29.12.2003

Репутация: нет
Всего: нет



народ сильно не бейте я с тем же вопросом...
Код

$sql=mysql_connect($dbhost, $dbuname, $dbpass);
$sqlt=mysql_select_db($dbname);
if($sql)
        echo '';
    else
        die('Ошибка подключения к серверу баз данных');
if($sqlt)
        echo '';
    else
        die('База данных не найдена или отсутствует доступ');


    $sqlz="INSERT INTO users (lvl, login, passw, email) VALUES (0, '$login', '$pass', '$email')" ;
    $sqlr = mysql_query($sqlz,$dbname);
    if(!$sqlr)
    {
        die('Ошибка выполнения запроса') ;
    }
    echo "kuku";



дает ошибку 'Ошибка выполнения запроса'... че тока не пробовал... и яндекс замучил и форум ваш ) и ученики листал ... толи гдето чето проглядел ... толи че..

в базе запись не появляеться


Это сообщение отредактировал(а) Flat - 28.7.2009, 20:30
PM MAIL   Вверх
Ипатьев
Дата 28.7.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 3
Всего: 37



Вместо 'Ошибка выполнения запроса' надо писать mysql_error()
Тогда, к нашему удивлдению, мы сможем прочесть, в чем состоит проблема. It's a magic
PM MAIL   Вверх
Photon
Дата 29.7.2009, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Злобный программер
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 27.2.2009
Где: Таганрог

Репутация: 1
Всего: 12



Flat, это что?
Код

$sqlr = mysql_query($sqlz,$dbname);

Как я понимаю, $dbname - это имя базы данных.  Так какого ж оно хрена делает вместо необязательного параметра указатель_на_соединение?  С чего бы при таком раскладе что-то куда-то добавлялось?


--------------------
With best regards..
PM MAIL ICQ Skype GTalk Jabber   Вверх
Flat
Дата 29.7.2009, 04:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 29.12.2003

Репутация: нет
Всего: нет



Цитата(Photon @  29.7.2009,  03:26 Найти цитируемый пост)
код PHP1:$sqlr = mysql_query($sqlz,$dbname);highlightSyntax('php_2Y4ODA','php');Как я понимаю, $dbname - это имя базы данных.  Так какого ж оно хрена делает вместо необязательного параметра указатель_на_соединение?  С чего бы при таком раскладе что-то куда-то добавлялось?



Спасибо... насчет не обязательности как то странно... без него не работало, хотя селект есть.
установил правильный указатель и все получилось 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0988 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.