@marenco_victor

В чем ошибка в коде?

Скрипт автоставок. первый круг все нормально работает, но последующие автоставки сбиваются к примеру есть три пользователя, когда времени остается до окончания 3 секунды, то срабатывает автоставка и время вновь повышается до 10 секунд. почему сбивается цикл работы к примеру срабатывает 1 автоставка и затем сразу же через секунду 2-я автоставка, хотя должна сработать только через 7 секунд а из-за этого 3-я автоставка запускается не через 7 секунд после второй а аж через 14 секунд. Этот скрипт выполняется каждую секунду с момента запуска Подскажите где я ошибся в коде ? Вот код:
function auto()
	{
		global $DB;
		DeleteABNol();
		$bidout=false;
		$Fetch_auc=$DB->Query("SELECT ID, CURRENT_USER_ID, LAST_TIMESPAN_BID FROM auc_lots WHERE STATUS=1");
		while($auc=$Fetch_auc->Fetch())
		{
			$cuser=$auc['CURRENT_USER_ID'];
			$time=$auc['LAST_TIMESPAN_BID'];
			$curpr=$auc['CURRENT_PRICE'];
			$realpr=$auc['REAL_PRICE'];
			$time_to_bid=($time+10);
			$Fetch_Autobid=$DB->Query("SELECT*FROM auto_bid WHERE BIDDED=0 ORDER BY DATE_CREATE ASC");
		    while ($auto=$Fetch_Autobid->Fetch()) 
		    {
		    	if (!$auto){}

		    		if (!$bidout)
		    		{
		    		
		    			$user=$auto['IDUSER'];
						$aucid=$auto['IDLOT'];
						$rand=$auto['RND'];
			    		$bids=$auto['BIDS'];
			    		$type=$auto['type'];
			    		$bidded=$auto['BIDDED'];
			    		$isbid=$DB->Query('SELECT ID FROM auc_lots WHERE CURRENT_USER_ID='.intval($user).' AND ID='.intval($aucid).' LIMIT 1');
			    		if ($cuser!=$user)
			    		{

			    			if ($time_to_bid-$rand==time())
			    			{
			    				$bidout=true;
								$DB->PrepareFields("auto_bid");
								//$biddar=array('BIDDED'=>intval(1));
								//$DB->UPDATE('auto_bid',$biddar, 'WHERE IDUSER='.intval($user).' AND IDLOT='.intval($aucid));
								
								$DB->StartTransaction();
								$dbLot = $DB->Query("SELECT  CURRENT_PRICE auc_lots WHERE ID=".intval($aucid));
								$dbLotRes=$dbLot->Fetch();
								$cur_price=intval($dbLotRes['CURRENT_PRICE'])+10;
								$DB->PrepareFields("auc_lots");
								$Arr_to_up=array(
										'CURRENT_USER_ID' => intval($user),
			                          	'CURRENT_PRICE'   => intval($cur_price),
			  
			                          	'LAST_TIMESPAN_BID'=>intval(time()),
			                          	'ISMAN'			   =>intval(1)
									);
								$DB->Update('auc_lots',$Arr_to_up,"WHERE ID=".intval($aucid),$err_mess.__LINE__);
								$cur_bids=$bids-10;
								$arr=array("BIDS"=>intval($cur_bids),
										   'DATE_CREATE'=>intval(time()));
								$DB->UPDATE("auto_bid",$arr, "WHERE IDUSER=".intval($user)." AND IDLOT=".intval($aucid), $err_mess.__LINE__);
								$ArrFieldForHistory=array(
											  'ID_LOT'          => intval($aucid),
					                          'ID_USER'         => intval($user),
					                          'CURRENT_PRICE'   => intval($cur_price));
								$DB->Insert("auc_history",$ArrFieldForHistory, $err_mess.__LINE__);
								if (strlen($err_mess)<=0)
								{
									$DB->Commit();
										
								}
								else
								{
									$DB->Rollback();
								}
			    			}
			    		}
		    		}
		    }
		}
  • Вопрос задан
  • 2346 просмотров
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
я правильно понимаю, что это скрипт для обмана пользователей?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы