Перейти к содержанию
Форум поддержки пользователей VamShop

ошибка БД при повторной регистрации


Иван Юрченко

Рекомендуемые сообщения

Иван Юрченко

Здравствуйте!

Сегодня обнаружил такую проблемку при оформлении заказа: при вводе имени и фамилии (новая регистрация с другим паролем), которые уже есть в клиентской базе, магазин выдает стандартную ошибку базы данных. В логе такое:

1062 - Duplicate entry '0' for key 'PRIMARY' | insert into customers_info (customers_info_id, customers_info_number_of_logons, customers_info_date_account_created) values ('0', '0', now()) | /create_account.php

Можно это отключить? - иначе теряются старые клиенты, которые плохо дружат с интернетом.

Ссылка на сообщение
Поделиться на другие сайты
Иван Юрченко

Это про какую страницу речь, на какой странице ошибка?

после заполнения формы на create_account.php или create_guest_account.php - ошибка типа "магазин закрыт на техобслуживание"

Ссылка на сообщение
Поделиться на другие сайты

Видимо, переменная $_SESSION['customer_id'] почему-то равна нулю.

Попробуйте в /create_account.php закомментировать строку:


$_SESSION['customer_id'] = vam_db_insert_id();
[/code] либо поменять на:
[code]
$_SESSION['customer_id'] = mysql_db_insert_id();

Вообще при регистрации имеет значение email адрес, он должен быть уникальным, а остальные данные любые могут быть.

Ссылка на сообщение
Поделиться на другие сайты
Иван Юрченко

У меня вчера БД запортилась: пропал столбик customers_id таблицы customers. Восстановил с резервной копии. Теперь почему-то реагирует на фамилию: при вводе уже существующей в базе выдает ошибку, указанную в первом посте. Если ввести новую несуществующую фамилию, то все проходит гладко, но в БД вместо следующего порядкового номера customers_id почему-то вносит 0. Подозреваю что может еще что-то запортилось в БД, не подскажете что может влиять?

Ссылка на сообщение
Поделиться на другие сайты

А что у Вас прописано у разных пользователей в customers_id колонке?!

Я надеюсь у каждого своё число?!

Сделайте backup базы и посмотрите в таблицы customers AUTO_INCREMENT не нулевой случайно?

Ссылка на сообщение
Поделиться на другие сайты
Иван Юрченко

А что у Вас прописано у разных пользователей в customers_id колонке?!

Я надеюсь у каждого своё число?!

Сделайте backup базы и посмотрите в таблицы customers AUTO_INCREMENT не нулевой случайно?

столбец делал вручную, видимо криво, поскольку AUTO_INCREMENT=0

Переделал. теперь так ругается:

05/07/2011 21:07:05 | 1062 - Duplicate entry '1961' for key 'PRIMARY' | insert into customers_info (customers_info_id, customers_info_number_of_logons, customers_info_date_account_created) values ('1961', '0', now()) | /create_account.php

05/07/2011 21:07:09 | 1062 - Duplicate entry '1962' for key 'PRIMARY' | insert into customers_info (customers_info_id, customers_info_number_of_logons, customers_info_date_account_created) values ('1962', '0', now()) | /create_account.php

Ссылка на сообщение
Поделиться на другие сайты
Иван Юрченко

Это конечно плохо.

Попробуйте сделать AUTO_INCREMENT=1970 например.

Теперь вроде получилось ;-)

Спасибо.

Ссылка на сообщение
Поделиться на другие сайты
  • 2 weeks later...

Ставлю на локалхосте голую 1.64 (сессии хранятся в БД). Та же ерунда - при быстром заказе $_SESSION['customer_id'] приравнивается нулю, после чего записывается в customers_info и магазин начинает сходить с ума.

Т.е. быстрое оформление заказа вообще не работает (на почту клиенту уведомление не высылает).

Более того - $_SESSION['customers_status'] тоже устанавливается в 0, после чего посетителю видно box_statistics (с кол-вом товаров, заказов, т.п.)! А это уже совсем не хорошо.

$_SESSION['customer_email_address'] не передается - отсюда предположение о возникновении ошибки из FAQ.

Ошибка та же - Duplicate entry '0' for key 'PRIMARY' | insert into customers_info и гостевые учетки при этом не видны в админке (хотя, сохраняются в таблицу customers)

Давайте разбираться вместе :)

Ссылка на сообщение
Поделиться на другие сайты
Иван Юрченко

быстрое оформление заказа вообще не работает

у меня работает, правда не на локалхосте, а на хостинге. Версия 1,59

Ссылка на сообщение
Поделиться на другие сайты

Поставил последний денвер, поставил голый 1.64.

Вошел под админом - создал категорию, создал товар. Вышел из-под админа.

Делаю быстрый заказ под анонимусом, заполняю все поля - то же самое, в customers_info пишется customers_info_id = "0" и выдает ту же ошибку базы.

Причем, пока не удалишь сессию из таблицы sessions, всё глухо лежит с ошибкой о нехватке таблицы personal_offers_by_customers_status_. После создания таблицы - все тоже, что я описывал изначально

Ссылка на сообщение
Поделиться на другие сайты

Идем дальше. Если в таблице customers_info поставить такой же автоинкремент customers_info_id, как и в таблице customers, то заказ создается и виден в админке, но всё равно в него не передаются имя/фамилия и email ((

Ссылка на сообщение
Поделиться на другие сайты

Да! В демке вроде всё шикарно.

Можно получить слепок базы с нее (можно в почту) или скрипты, начиная с create_guest_account.php и заканчивая checkout_success.php? На выходных поковырял бы.

В админку (vam@test.com / 12345) не пускает - не могу посмотреть насколько корректно сохраняются заказы.

Ссылка на сообщение
Поделиться на другие сайты

Всё, победилось :) Решение:

В файлах checkout_alternative.php и create_guest_account.php найти:

		$_SESSION['customer_id'] = vam_db_insert_id();
$customers_id = $_SESSION['customer_id'];[/code] заменить на:
[code] //$_SESSION['customer_id'] = vam_db_insert_id();
$customers_id = $_SESSION['customer_id'];

Причина в том, что mysql_insert_id() возвращает значение только последнего запроса, где было увеличение автоинкрементного поля (vam_db_perform(TABLE_CUSTOMERS, $sql_data_array)), после чего у нас идет SELECT, после которого mysql_insert_id() уже возвращает 0, который присваивается $_SESSION['customer_id']. Это приводит и к невозможности быстрого заказа, и, главное, к выводу блока статистики гостям, а этот блок содержит конфиденциальную информацию и ссылку на админку.

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...