Mysql Insert одним запросом записывает две строки

  • Автор темы Автор темы picachu
  • Дата начала Дата начала

picachu

Новичок
Доброго всем.

Подскажите в чем может быть проблема.
Следующий код при выполнении пишет в базу данные два раза.

  1. <?PHP
  2. require_once './cons.php'; //Файл с параметрами базы данных
  3. $client_ip = $_SERVER['REMOTE_ADDR']; //IP клиента
  4. $take_id = $_GET["dev"]; // ID устройства
  5. $take_vol = $_GET["val"]; // Переданый параметр
  6. $dcb = mysqli_connect($dbhost, $dbuser , $dbpass , $dbname); //устанавливаем подключение к MySQL
  7. //Формируем запрос
  8. $query = "INSERT INTO w_logger SET i_data = CURDATE(), i_time = CURTIME(), i_sensor = '$take_id', i_mane = '$take_name', i_vol = '$take_vol', i_client = '$client_ip'";
  9. mysqli_query($dcb, "SET NAMES 'utf8'"); // Установим кодировку
  10. $result = mysqli_query($dcb, $query); //Отправим данные в таблицу
  11. // Обработка ошибок
  12. if (mysqli_connect_errno()) {
  13. printf("Сбой подключения: %s\n", mysqli_connect_error());
  14. exit();
  15. }
  16. if (!mysqli_query($dcb, $query)) {
  17. printf("Ошибка запроса: %s\n", mysqli_error($dcb));
  18. }
  19. mysqli_close($dcb); //Закрываем подключение к базе
  20. ?>
Это весь код. И это единственный файл на локальном сервере
Вызывается скрипт пока через F5 в браузере следующей командой.
http://172.16.10.150/zway1.php?dev=ZWayVDev_zway_14-0-37&val=on

Всё работает, в базу всё пишется правильно, но каждый раз запрос записывает две полностью идентичные строки.
Без имени.png
На сервере стоит apach2, php7, mysql. Устанавливалось все по умолчанию.
В error.log ошибок нет, в access.log видно что скрипт вызывался один раз.

В отладчике браузера смотрел. Скрипт вызывается один раз.

Пробовал лисой, хромом, ие11, эдж. Скрипт вызывается один раз, записей в таблице записывается две.
1.png
Примерную тему в на форуме видел. Выполнил все рекомендации.
Никаких расширений в браузерах нет.
Это прочитал - "ответ на этот вопрос (очень подробный, с примерами и пояснениями) лежит здесь: PHP FAQ: Ничего не работает! Что делать???"

В базе смотрел и phpmyadmin и HeidiSQL и посредством запроса из консоли. Пишется всегда две строки.

PS. На всякий случай, уважаемый гуру, я не программист, то есть от слова совсем. Это мелкое хобби, которым занимаюсь для себя в свободное время. Поэтому. пожалуйста, поэтому отправляя меня по ссылкам пишите хоть ключевые слова, по котором искать ответ.
 
Ээээ, уважаемы VMix, Вы не могли бы пояснить смысл ответа.
По Z10 + Z16 гугл нашел двигатель от минивэна, фрезы, дома и вентилятор от корса.
По РНР, SQL никакой информации.
 
Аааа, понял. Исправилось.
Я брал пример с какого то сайта, там так ошибки выводились.
Огромное спасибо.
Как всё просто оказывается, когда тебя ткнут носом :(
 
Аааа, понял. Исправилось.
Я брал пример с какого то сайта, там так ошибки выводились.
Огромное спасибо.
Как всё просто оказывается, когда тебя ткнут носом :(
Если не трудно скажи в чем была проблема. Тоже самое (только в другом коде немного ) и не могу понять в чём дело. ?
 
mysqli_query вызванна 2 раза в стоках 10 и 16
 
Если не трудно скажи в чем была проблема. Тоже самое (только в другом коде немного ) и не могу понять в чём дело. ?

Если посмотреть на мой код, то в 10 строке данные записываются в базу.
А в 16 строке идет проверка на ошибку в запросе. Вернее должна идти. Но вместо этого почему то записываются данные второй раз. Почему я не понял. Убрал, заработало и ладно.
 
Если посмотреть на мой код, то в 10 строке данные записываются в базу.
А в 16 строке идет проверка на ошибку в запросе. Вернее должна идти. Но вместо этого почему то записываются данные второй раз. Почему я не понял. Убрал, заработало и ладно.
Хм ,и после того как ты убрал у тебя данные записываются в базу ?
 
Хм ,и после того как ты убрал у тебя данные записываются в базу ?
Да. А что то не так?
Естественно я убрал только 16 строку а не обе. Либо чуть выше уважаемый @WMix, подсказал как сделать.

Но так как я не пишу программы коммерческие для кого то и запрос работает то я просто убрал одну строку.
 
$success = mysqli_query(...)
...
if (!$success ) {
Извините что туплю , но все же если возможно расскажите в чем дело:
$result= mysqli_query($db,$query); \\ Выполняем запрос к базе , в нее прийдет true или false .
//Test if there was a query error
if($result) {
//Successfuly
//redirect_to("somepage.php");
echo "Success";
}else{
//Failure
//$message= 'Creating object failed';
die("Database query failed " . mysqli_error($connection) );
}
И после запроса проверяем на успех. Мб я тупой , но я не могу понять,из за чего вдруг мы получаем вторую строку -_- Расскажите если не сложно.
 
Если посмотреть на мой код, то в 10 строке данные записываются в базу.
А в 16 строке идет проверка на ошибку в запросе. Вернее должна идти. Но вместо этого почему то записываются данные второй раз. Почему я не понял. Убрал, заработало и ладно.
То есть ты не понял, что если функцию записи вызвать два раза, то данные запишутся два раза?
Давай я порпробую намекнуть. Если mysqli_query с одним и тем же запросом вызвать три раза - сколько раз данные запишутся в базу?
 
То есть ты не понял, что если функцию записи вызвать два раза, то данные запишутся два раза?
Давай я порпробую намекнуть. Если mysqli_query с одним и тем же запросом вызвать три раза - сколько раз данные запишутся в базу?

Нет, почему записывается две строки я понял, я все таки не совсем идиот. Из за вызова функции два раза.
Я не понял почему она, эта функция так работает. На каком то сайте так было написана функция проверки ошибок.
Я ее скопировал как есть и почему она так работает мне нет причины разбираться. Меня ткнули носом знающие люди, я осознал в чём неправ.
Теперь если мне это когда нибудь понадобиться, я буду разбираться почему. Но это вряд ли, так как моё хобби с РНР заключается в написании одного файла максимум раз в год.
 
Всем спасибо за ответы , у меня проблема в хроме оказалась . Так как код другой .
 
Всем спасибо за ответы , у меня проблема в хроме оказалась . Так как код другой .
проблема не в "хроме", а в кривом роутинге.
если у тебя скрипт обрабатывает вообще любой запрос который приходит на сайт, то хром здесь как бы не при чем. На живом сайте это будет не двойная вставка, а пятидесятикратная.
 
Сверху