Не добавляются данные в таблицу

Рейтинг: 0Ответов: 1Опубликовано: 14.12.2014
<?php
session_start();
include("db.php");
date_default_timezone_set("Europe/Moscow");

if (isset($_POST['send_message']))
{
    mysql_query("INSERT INTO messages (date, from, to, message) VALUES ('14.12.2014', '$_COOKIE[id]', '$_POST[id_to]', '$_POST[message]')");
}
if ($_COOKIE['login'] != null):
?>
<html>
<head>
    <style>
        #name_side_block {
            margin-bottom: 0px !important;
        }
    </style>
    <link rel="stylesheet" type="text/css" href="/styles/index.css"/>
</head>
<body>
    <center>
        <?php include("header.php"); ?>
        <div id="main_div">
            <?php include("left_blocks.php"); include("right_blocks.php");?>
            <div id="content">
                <center>
                    <span style="font-size: 18px; font-weight: bold; margin-bottom: 10px; display: inline-block;">Отправка сообщений</span><br />
                    <?php echo '<span style="font-weight: bold; color: red;">' . $_SESSION['error_inform'] . '</span>'; unset($_SESSION['error_inform']);?>
                    <form id="send_message" action="send_message.php" method="post">
                        <table>
                            <tr>
                                <td id='name_register_input'>Ид получателя:</td>
                                <td><input type="text" name="id_to"/></td>
                            </tr>

                            <tr>
                                <td id='name_register_input'>Текст:</td>
                                <td><textarea cols="70" rows="10" name="message"></textarea></td>
                            </tr>
                        </table>
                        <input type="submit" value="Отправить" name="send_message"/>
                    </form>
                </center>
            </div>
        </div>
    </center>
</body>
</html>

<?php
else: echo '<script>history.back()</script>';
endif;
?>

Ответы

▲ 2

Это скорее не ответ, а комментарий. Просто объемный комментарий, потому пишу здесь (комментарии ограничены по длине сообщения).

Во-первых, что именно не получается? "Не добавляются данные" - вы может кнопку "сабмит" забыли нажать, они поэтому и не добавляются.

Условие if (isset($_POST['send_message'])) ... выполняется? Если выполняется, попробуйте вывести ваш sql из mysql_query(...) и выполнить его ручками в клиенте mysql - узнаете, что за ошибка.

Во-вторых, есть функция mysql_error, которая как раз и говорит о том, какие ошибки у вас есть в sql.

В-третьих, это что за ужас? А если в шаблоне будет куча кода? Вы как отлаживать такой код собираетесь?

Если очень грубо, разбейте код на части: отдельно логика, отдельно вьюха. Выведите вашу страницу в отдельный файл-шаблон, уберите из нее все ваши $_SESSION. В зависимости от выбранного подхода, здесь могут быть либо placeholer`ы типа %message%, которые вы потом будете заменять, либо переменные типа $error, либо что-то еще.

Не помещайте определения функций там же, где и их вызовы. Т.е. будет отдельный файл, где определены нужные функции, будут отдельные файлы для шаблонов, будут отдельные файлы для логики.

Например, в файле func.php вы определили ваши функции, в файле template.php определили шаблон, в файле index.php задали нужную логику:

if (is_insert_data()) {
    insert_data();
} else {
    render_template();
}

Тогда если надо будет обновить шаблон, вам не надо будет искать, что отвечает за шаблон, что отвечает за логику. Вы сразу будете править шаблон. Если надо будет добавить в шаблон другие переменные - только тогда будете править соответствующие функции.

Кроме того, если возникнут проблемы, вы будете знать, где они: либо в is_insert_data (если условие не срабатывает), либо в insert_data (если условие срабатывает, но данные не вставляются) и т.д.

В шаблоне тоже никаких $_SESSION, $_POST и т.д. Есть функция, которая выводит шаблон, в этой функции присваиваете переменным нужные значения (хоть откуда, может быть из той же $_SESSION) и уже этими переменными орудуете в шаблоне. Тогда, если понадобится изменить какую-то логику (например, при определенных условиях вместо ошибки из SESSION надо отображать другое сообщение), можно будет очень просто изменить то, что действительно надо, а не все подряд.

И последнее, а кто сказал, что можно использовать в качестве имен переменных зарезервированные слова? from - это специальное имя mysql, по-любому на это слово и ругается. Если уж и добавили такое поле, то упоминать его надо в кавычках (типа `field`).