-1

с формы html вносится запись в таблицу SQL. Появляется только одна запись. При повторном введении данных с формы, таблица остается с первой записью.

Форма ввода:

<form action="scripts/addnews.php" method="POST" name="forma">
            <table>
                <tr>
                    <td>Дата новости</td>
                    <td><input type="text" size="30" name="date"></td>
                </tr>
                <tr>
                    <td>Заголовок</td>
                    <td><textarea name="title"></textarea></td>
                </tr>
                <tr>
                    <td>Контент новости</td>
                    <td><textarea name="content"></textarea></td>
                </tr>
                <tr>
                    <td>Картинка Новости</td>
                    <td><input type="text" size="30" maxlength="30" name="pic_link"></td>
                </tr>
            &lt;tr&gt;

                &lt;input type= "submit" value= "Разместить"&gt;
            &lt;/tr&gt;

            &lt;td&gt;&amp;nbsp;&lt;/td&gt;


        &lt;/table&gt;
    &lt;/form&gt;</code></pre>

Скрипт внесения в базу:

<?php
require 'connect.php';

//Кодировка для SQL mysql_query ("set character_set_client='utf8'"); mysql_query ("set character_set_results='utf8'"); mysql_query ("set collation_connection='utf8_general_ci'");

//Создаю переменные для извлечения из формы $date = $_REQUEST['date']; $title = $_REQUEST['title']; $content = $_REQUEST['content']; $pic_link = $_REQUEST['pic_link'];

//Заношу в таблицу полученные данные из переменных $insert_sql = "INSERT INTO news (date, title, content, pic_link)" . "VALUES('{$date}', '{$title}', '{$content}', '{$pic_link}');"; mysql_query($insert_sql);

?>

Файл connect.php:

<?php
mysql_connect("localhost", "root", "")//параметры в скобках ("хост", "имя пользователя", "пароль")
or die("<p>Ошибка подключения к базе данных! " . mysql_error() . "</p>");

mysql_select_db("lokalwork")//параметр в скобках ("имя базы, с которой соединяемся") or die("<p>Ошибка выбора базы данных! ". mysql_error() . "</p>"); ?>

Raz Galstyan
  • 8,258
  • 1
    можно структуру таблицы ? – Raz Galstyan Jun 13 '17 at 07:26
  • Вот вы при выборке данных на ошибки запросы проверяете. А при вставке записи почему то нет ... Без вывода ошибок вы никогда не поймете что могло пойти не так – Mike Jun 13 '17 at 07:30
  • А еще ваш сайт взломают минут через 10 после запуска, потому что sql-инъекции ... Никогда не подставляйте переменные непосредственно в запрос. Используйте привязку переменных http://php.net/manual/ru/mysqli-stmt.bind-param.php – Mike Jun 13 '17 at 07:32
  • @Tanya, читайте https://ru.stackoverflow.com/q/637185/186083 и используйте http://phpfaq.ru/pdo – Visman Jun 13 '17 at 07:34
  • 1
    Во-первых, как Вам уже сказали выше - проверяйте на ошибки каждую попытку вставки данных. Во-вторых, что Вы имеете ввиду под повторным введением данных? Это попытка повторно вставить одни и те же данные или речь идёт о вставке вообще любых данных без обновления страницы? Если первое, то скорее всего на каком-то столбце таблицы есть уникальный индекс и поэтому добавить строку невозможно. Ещё один вариант - нарушение ограничения первичного ключа. Если второе, и проблемы есть с любыми данными, то надо искать ошибку в PHP-коде, а не на стороне БД – Yury Plinto Jun 13 '17 at 11:32
  • Выводите сам запрос и ошибки от mysql в скрипте добавления записи в самом конце: echo $insert_sql; echo mysql_error();. Это хоть немного поможет в понимании что не так со скриптом. – DaemonHK Jun 13 '17 at 12:20

1 Answers1

-1

Подключитесь к БД так:

$pdo = new PDO('mysql:host=localhost;dbname=lokalwork', 'root', '');

Выполняйте запрос так:

$pdo->query("INSERT INTO news (date, title, content, pic_link) VALUES('{$date}', '{$title}', '{$content}', '{$pic_link}')");

Это будет так как вы хотите, а вообще прочитайте про инъекции и работу с PDO MySQL

Daniil
  • 278
  • 1
    Страх и ужас! А зачем вам PDO вообще при такой конструкции запроса? – Visman Jun 13 '17 at 10:51
  • 1
    Вопрос вроде бы был совсем не про защиту от инъекций и выбор метода подключения к базе. Почему автор вопроса выбрал небезопасный метод - это на его совести. Может он под древнюю версию PHP пишет. Тогда потом нужно будет добавлять всякий шаманизм с экранированием к имеющемуся коду, а не менять метод подключения на PDO. А может это вообще прототип и защита вовсе не требуется. Вопрос был о том, почему запись не добавляется повторно. – Yury Plinto Jun 13 '17 at 11:04
  • Тогда нужно уточнять для чего это нужно и насколько древняя версия используется. От этого уже и уровень шаманизма будет зависеть. Пример который я дал будет работать, и будет добавляться запись за записью как и следует. Дальнейшее развитие этого вопроса будет за автором – Daniil Jun 13 '17 at 12:07