Forum. MyNuke.ru
Forum. MyNuke.ruСообщения за сегодняПерсональные сообщения

Навигация  
Вернуться   Forum. MyNuke.ru > PHP-NUKE > Настройка и Изменение
Ник
Пароль
Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Timer вне форума      Старый Aser Shop, нужна помощь, общая корзина как разделить доступ? #1  
Timer
Новенький
Регистрация: 01.03.2008
Сообщения: 13


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Timer Найти все сообщения от Timer Добавить Timer в список друзей  
24.05.2008, 22:48

очень много труда вложил в сайт, и вот неприятность, а азер шопе, такая штука, общая корзина на всех покупателей, если одновременно 2 человека пытаются что то купить, то это беда, просто люди путаются почему откуда невозьмись появляются товары которых они не покупали, помогите, где этот баг профиксить, очень нужно, заранее благодарен!

я просто чувсвую, что это глючит определение пользователя по айпи, т.е. функция отвечающая за корзину, не может выделить новый пользователь или уже тот который кинул заказ, где то не выполняется условие, но вот где....помогите :(( пажаласта!

$ip = $_SERVER["REMOTE_HOST"];
if (empty($ip)) {
$ip = $_SERVER["REMOTE_ADDR"];
}
if(is_user($user)) {
cookiedecode($user);
$auth_name = $cookie[1];
} else $auth_name = 0;

Объясните, смысл этого кода, спасибо....может думаю в нем ошибка.

Timer вне форума      Старый #2  
Timer
Новенький
Регистрация: 01.03.2008
Сообщения: 13


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Timer Найти все сообщения от Timer Добавить Timer в список друзей  
25.05.2008, 19:13

Народ кто понимает, пож-та прокоментируйте код написанный выше, может это даст мне понять в чем трабл....

Soniks вне форума      Старый #3  
Soniks
Администратор
Регистрация: 16.01.2005
Сообщения: 4,814


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Soniks Посетить домашнюю страницу Soniks Найти все сообщения от Soniks Добавить Soniks в список друзей  
25.05.2008, 22:16

очевидная проблема, как вы и описали, скорее всего кроиться в том что попадаються пользователи с одинаковым апи адресом или с хостом (например пользователи из одной сети).
можно сделать следующее:
Все встречающиеся строки:
$ip = $_SERVER["REMOTE_HOST"];
if (empty($ip)) {
$ip = $_SERVER['REMOTE_ADDR'];
}

Заменить на:
$ip = $_SERVER['REMOTE_ADDR'];

Иначе нужно будет уже делать привязку не по айпи, а по дургому, или добавить еще одну проверку.
 
"Если бы вам удалось надавать под зад человеку, виноватому в большинстве ваших неприятностей - вы бы неделю не смогли сидеть".


Timer вне форума      Старый #4  
Timer
Новенький
Регистрация: 01.03.2008
Сообщения: 13


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Timer Найти все сообщения от Timer Добавить Timer в список друзей  
25.05.2008, 23:04

может вот в чем проблема, эта $ip = $_SERVER["REMOTE_HOST"]; переменная, если сделать ее вывод ничего не содержит, пустой экран....эа что хоть оня отвечает, кто знает?

вот часть функции, мне кажется есть баги там:
function viewcart() {
global $db, $user, $cookie, $module_name, $bgcolor2, $currency, $show_products_opt;
$ip = $_SERVER["REMOTE_HOST"]; ----эти менял как выше написано!(не помогло)
if (empty($ip)) {--------------------------эти менял как выше написано!(не помогло)
$ip = $_SERVER["REMOTE_ADDR"];---эти менял как выше написано!(не помогло)
}----------------------эти менял как выше написано!(не помогло)
if(is_user($user)) {
cookiedecode($user);
$auth_name = $cookie[1];
} else $auth_name = 0;-- тут после else нет открывающей { ?, хотя может тут и ненада
$Realdate = mktime();
$olddate = $Realdate - 24*60*60;
$d = date("Y-m-d", $olddate);
$db->sql_query("delete from asershop_preorder where uname='0' and date<'$d'");}---------???? что тут удаляется?
include("header.php");
OpenTable();
$ThemeSel = get_theme();
if (file_exists("themes/$ThemeSel/images/shop-logo.gif")) {
echo "<br><center><a href=\"modules.php?name=$module_name\"><img src=\"themes/$ThemeSel/images/shop-logo.gif\" border=\"0\" alt=\"Aser's Shop\"></a></center><br><br>";
} else {
echo "<br><center><a href=\"modules.php?name=$module_name\"><img src=\"modules/$module_name/images/shop-logo.gif\" border=\"0\" alt=\"Aser's Shop\"></a></center><br><br>";
}
echo "<center><font class=\"option\"><strong><big>"._YOURCART."</big></strong></font></center>";
CloseTable();
echo "<br>";
OpenTable();
if($auth_name == '0') { ---- тоже что то происходит? эти условия не очень понимаю?
$sql = "select lid, pid, option1, option2, option3, quantity from asershop_preorder where ip='$ip' order by pid";
} else {
$sql = "select lid, pid, option1, option2, option3, quantity from asershop_preorder where uname='$auth_name' or ip='$ip' order by pid";
}

Soniks вне форума      Старый #5  
Soniks
Администратор
Регистрация: 16.01.2005
Сообщения: 4,814


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Soniks Посетить домашнюю страницу Soniks Найти все сообщения от Soniks Добавить Soniks в список друзей  
26.05.2008, 13:23

Timer код в полне нормальный, а проблема именно в том что для одинаковых пользователей с одним и тем же апи будет одинакова и корзина, так устроен сам модуль
 
"Если бы вам удалось надавать под зад человеку, виноватому в большинстве ваших неприятностей - вы бы неделю не смогли сидеть".


Timer вне форума      Старый #6  
Timer
Новенький
Регистрация: 01.03.2008
Сообщения: 13


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Timer Найти все сообщения от Timer Добавить Timer в список друзей  
26.05.2008, 22:15

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

Soniks вне форума      Старый #7  
Soniks
Администратор
Регистрация: 16.01.2005
Сообщения: 4,814


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Soniks Посетить домашнюю страницу Soniks Найти все сообщения от Soniks Добавить Soniks в список друзей  
27.05.2008, 10:46

Timer можно либо заставить пользователей регистрироваться (и тогда вести идентификацию по пользователю) для того, что бы класть в корзину товар или же корзину выводить из БД и, скажем, хранить в сессии или куках, т.е. положенный товар в корзине будет храниться не долго.
Или делать, что-то сообща, скажем, присваивать гостю уникальный id и записывать в куки, а потом уже вести идентификацию по этому id.
 
"Если бы вам удалось надавать под зад человеку, виноватому в большинстве ваших неприятностей - вы бы неделю не смогли сидеть".


Timer вне форума      Старый #8  
Timer
Новенький
Регистрация: 01.03.2008
Сообщения: 13


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Timer Найти все сообщения от Timer Добавить Timer в список друзей  
27.05.2008, 19:24

Или делать, что-то сообща, скажем, присваивать гостю уникальный id и записывать в куки, а потом уже вести идентификацию по этому id. - а это сложно? тут тоже народ посоветовал куки лить юзеру на комп сразу, а потом по ней проверять.

Timer вне форума      Старый #9  
Timer
Новенький
Регистрация: 01.03.2008
Сообщения: 13


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Timer Найти все сообщения от Timer Добавить Timer в список друзей  
30.05.2008, 07:23

Очень бы хотелось все же узнать, как залить cokies и потом ее проерить...

Soniks вне форума      Старый #10  
Soniks
Администратор
Регистрация: 16.01.2005
Сообщения: 4,814


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Soniks Посетить домашнюю страницу Soniks Найти все сообщения от Soniks Добавить Soniks в список друзей  
02.06.2008, 12:54

Timer
можно так:
создать в таблице asershop_preorder еще один столбец, скажем per_id
затем при добавлении в корзину товара, если у пользователя нет в куках записи, т.е проверка:
PHP код:
 if(empty($_COOKIE['per_id'])){
$per_id md5(rand(100000,9999999999999999));
setcookie('per_id',$per_id, (time()+(60*60*24*7)));
}else{
$per_id =$_COOKIE['per_id'];


тем самым получаем уникальный id, либо от пользователя, либо создаем его сами, он правда не совсем уникальный, но вероятность его совпадения мала :)

затем при добавлении в БД записи о товаре в корзине нужно добавить этот $per_id

При просмотре корзины, нужно у пользователя получить этот $per_id, т.е.:
PHP код:
 if(!empty($_COOKIE['per_id'])){
$per_id =$_COOKIE['per_id'];
// дальше работа скрипта
}else{
  
// Выводиться сообщение что корзина пуста, т.к. нет записи у пользователя


и уже делать выборку из БД не по IP адресу, а по per_id
 
"Если бы вам удалось надавать под зад человеку, виноватому в большинстве ваших неприятностей - вы бы неделю не смогли сидеть".


Ответ


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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +4, время: 15:15.


На Верх
Рейтинг@Mail.ru