Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2014, 23:38   #1
poroshin
 
Регистрация: 04.02.2014
Сообщений: 5
По умолчанию Некорректная вставка в базу, SQLite

Приветствую!

По неизвестной мне причине этот код:

Код:
$test = sqlite_exec($db, "INSERT INTO table1(field1, field2) VALUES ('text1', 'text2');");
вместо одной записи вставляет две одинаковых. Как заставить вставлять как надо, по одной?

Заранее благодарен, с уважением.
poroshin вне форума Ответить с цитированием
Старый 05.02.2014, 07:30   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,180
По умолчанию

чудес не бывает - одна команда вставит 1 раз
телепатов тоже не бывает - поэтому покажите весь код кроме этой строки,
99.9% строка вызывается два раза
ADSoft вне форума Ответить с цитированием
Старый 05.02.2014, 09:05   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я думаю что этот код просто выполняется дважды
Нужно искать в исходниках ошибку, почему так.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.02.2014, 11:09   #4
poroshin
 
Регистрация: 04.02.2014
Сообщений: 5
По умолчанию

Эх, было бы все так просто... Код минимален:

Код:
$db = sqlite_open("db/my_database.db");

$query_table = sqlite_query($db, "CREATE TABLE table1(id INTEGER PRIMARY KEY, field1 TEXT, field2 TEXT);");

$test = sqlite_exec($db, "INSERT INTO table1(field1, field2) VALUES ('text1', 'text2');");
Естественно, создание таблицы вызывалось только раз, в последующих итерациях было закомментировано.

А вставляет по прежнему, по две идентичных строки =((
poroshin вне форума Ответить с цитированием
Старый 05.02.2014, 12:06   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,180
По умолчанию

значит вы вызываете данный код два раза
для проверки запустите сессию в начале файла
Код:
session_start();
и после вставки в табл увеличивайте значение переменной
например
Код:
$_SESSION['count']++;
а в конце скрипта смотрите
Код:
echo  $_SESSION['count']
и вы поймете сколько раз вызывается ваша строка

Последний раз редактировалось ADSoft; 05.02.2014 в 12:08.
ADSoft вне форума Ответить с цитированием
Старый 05.02.2014, 13:52   #6
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от poroshin Посмотреть сообщение
Эх, было бы все так просто... Код минимален:

Код:
$db = sqlite_open("db/my_database.db");

$query_table = sqlite_query($db, "CREATE TABLE table1(id INTEGER PRIMARY KEY, field1 TEXT, field2 TEXT);");

$test = sqlite_exec($db, "INSERT INTO table1(field1, field2) VALUES ('text1', 'text2');");
Естественно, создание таблицы вызывалось только раз, в последующих итерациях было закомментировано.

А вставляет по прежнему, по две идентичных строки =((
То есть ты запускаешь этот код, затем комментишь создание таблицы, а потом еще раз вызываешь... и очудо там две строки?
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 05.02.2014, 15:32   #7
poroshin
 
Регистрация: 04.02.2014
Сообщений: 5
По умолчанию

Naive, Нет, за одну перезагрузку страницы (с уже закомментированным созданием таблицы), вставляется две строки.

ADSoft, по вашему методу строка вызывается действительно дважды. Но в коде дубля нет, откуда такой глюк?
poroshin вне форума Ответить с цитированием
Старый 05.02.2014, 16:20   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Браузер вполне может рефрешить страницу в фоновом режиме, например FF и Chrome иногда так делают из-за отсутствия favicon.ico в корне проекта.
Хорошей практикой является обязательный редирект после успешного|неудачного добавления данных в БД.
Ну и, конечно же, проверка наличия и корректности самих данных перед добавлением:
PHP код:
if(!empty($_POST['some_data'])){
    
// insert some POST data into DB
    
header('Location: success_page.php');
}
else{
    
header('Location: error_page.php');

Andkorol вне форума Ответить с цитированием
Старый 05.02.2014, 21:15   #9
poroshin
 
Регистрация: 04.02.2014
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Браузер вполне может рефрешить страницу в фоновом режиме, например FF и Chrome иногда так делают из-за отсутствия favicon.ico в корне проекта.
Хорошей практикой является обязательный редирект после успешного|неудачного добавления данных в БД.
Ну и, конечно же, проверка наличия и корректности самих данных перед добавлением:
PHP код:
if(!empty($_POST['some_data'])){
    
// insert some POST data into DB
    
header('Location: success_page.php');
}
else{
    
header('Location: error_page.php');

Так если обновлять руками - все равно, за одно обновление получаю две вставленные строки.
poroshin вне форума Ответить с цитированием
Старый 05.02.2014, 21:18   #10
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от poroshin Посмотреть сообщение
Так если обновлять руками - все равно, за одно обновление получаю две вставленные строки.
Ага, а "руками" ты не в браузере обновляешь..?
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi2010 DBGrid win1251 вставка русских символов в базу (interbase) maLoy*508 Общие вопросы Delphi 5 02.12.2012 23:09
Вставка видео в базу mistx Microsoft Office Access 1 08.06.2012 14:02
Вставка информации в базу данных Anubys C/C++ Базы данных 6 07.11.2011 14:19
Импорт тегов из файлов формата mp3 в базу данных sqlite antonych SQL, базы данных 2 06.12.2009 21:06
Некорректная печать Natalie Microsoft Office Word 5 29.08.2008 11:08