Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Почему то не работает header('Location:index.php?page=cart'); (https://javascript.ru/forum/server/75764-pochemu-ne-rabotaet-header-%27location-index-php-page%3Dcart%27-%3B.html)

Zhenyaxxxx 04.11.2018 19:35

Почему то не работает header('Location:index.php?page=cart');
 
Здравствуйте всем участникам форума... Редактировал сайт и ... "поломал". корзину сайта, после выбора товара должна идти переадресация на страницу cart.. но почему то не работает, остается на странице add_to_cart..посмотрите может увидете ошибку...
<script>
 $('document').ready(function(){
	
 function addtoCart(itemId){
     console.log("js-addToCart()");
     $.ajax({
         type: 'POST',
         async: false,
         url:"../send/"+itemId+'/',
         dataType: 'json',
         succes: function(data){
             if(data['success']){
              $('#cartCntItems')  .html(data['cntItems']);
              $('#addCart_'+ itemId).hide();
              $('#removeCart_'+ itemId).show();
                 }
             }
         
         });
     }   

  
});
</script>

session_start();
if(!isset($_SESSION['cart']))
{
  $_SESSION['cart'] = array();
  $_SESSION['total_items'] = 0;
  $_SESSION['total_price'] = 0;
    }

$page = empty($_GET['page']) ? 'index.php' : $_GET['page']; /* если страниц нет, то главная */


switch($page){ 
case('add_to_cart'):        
    $id = $_GET['id'];    
    $add_item = add_to_cart($id);
    $_SESSION['total_items'] = total_items($_SESSION['cart']);
    $_SESSION['total_price'] = total_price($_SESSION['cart']);
    header('Location:index.php?page=cart');  /*index.php&id='.$id*/
    break; 
case('update_cart'):        
    update_cart();
    $_SESSION['total_items'] = total_items($_SESSION['cart']);
    $_SESSION['total_price'] = total_price($_SESSION['cart']);
    header('Location:index.php?page=cart');
    break;
}

Белый шум 04.11.2018 23:48

Попробуйте так:
header('Location: /index.php?page=cart');

Если не сработает - смотрите реальные заголовки ответа (в браузере F12 -> вкладка Network).

laimas 05.11.2018 04:51

$.ajax(
dataType: 'json'
succes: function(data){
if(data['success']){
$('#cartCntItems') .html(data['cntItems']);
......

и какие в этом случае могут быть header('Location.... ?

Zhenyaxxxx 05.11.2018 16:42

Вот, забыл показать функции по корзине и стандартный блок с товаром, который выводится из БД (внизу). До сих пор не получилось сделать переадресацию header('Location: /index.php?page=cart'); после нажатия на кнопку купить.... может мне лучше избавится от переключателя SWITCH и как то по другому переделать функции обработки корзины, чтобы функции обработки не зацикливалась на add_to_cart, как на странице.... Помогите советом...


<script>
 $('document').ready(function(){
	
 function addtoCart(itemId){
     console.log("js-addToCart()");
     $.ajax({
         type: 'POST',
         async: false,
         url:"../send/"+itemId+'/',
         dataType: 'json',
         succes: function(data){
             if(data['success']){
              $('#cartCntItems')  .html(data['cntItems']);
              $('#addCart_'+ itemId).hide();
              $('#removeCart_'+ itemId).show();
                 }
             }
         
         });
     }   

  
});
</script>


Функции корзины:

session_start();
if(!isset($_SESSION['cart']))
{
  $_SESSION['cart'] = array();
  $_SESSION['total_items'] = 0;
  $_SESSION['total_price'] = 0;
    }



function add_to_cart($id){
    $id = $_GET['id'];
    if(isset($_SESSION['cart'][$id])){
        $_SESSION['cart'][$id]++;
        return true;
        } else{
            $_SESSION['cart'][$id] = 1;
            return true;
            }
     return false;
    }


function db_result_array($result){
   $res_array = array();
   $count = 0;
   while($row = mysql_fetch_array($result)){
       $res_array[$count] = $row;
       $count++;
       } return $res_array;
    }

function get_product($id){
$query = " SELECT *  FROM `product` WHERE `id` = '$id'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
return $row;
}


function update_cart(){
    foreach($_SESSION['cart'] as $id => $qty){
        if($_POST[$id] == '0'){
            unset($_SESSION['cart'][$id]);
            } else { $_SESSION['cart'][$id] = $_POST[$id]; }
        }
    
    }


function total_items($cart){
    $num_items = 0;
    if(is_array($cart)){
        foreach($cart as $id => $qty){
            $num_items = $num_items + $qty;
         }
        }
    return $num_items; 
    }

function total_price($cart){
    $total_price = 0;
    
    if(is_array($cart)){        
        foreach($cart as $id => $qty){
            $query = "SELECT cena FROM product WHERE id = '$id'";
            $result = mysql_query($query);
            if($result){
                $item_price = mysql_result($result, 0, 'cena');
                $total_price = $total_price + $item_price * $qty;
                }
           
         }
        }
    return $total_price; 
    }






$page = empty($_GET['page']) ? 'index.php' : $_GET['page']; /* если страниц нет, то главная */


switch($page){ 
case('add_to_cart'):        
    $id = $_GET['id'];    
    $add_item = add_to_cart($id);
    $_SESSION['total_items'] = total_items($_SESSION['cart']);
    $_SESSION['total_price'] = total_price($_SESSION['cart']);
    header('Location:index.php?page=cart');  /*index.php&id='.$id*/
    break; 
case('update_cart'):        
    update_cart();
    $_SESSION['total_items'] = total_items($_SESSION['cart']);
    $_SESSION['total_price'] = total_price($_SESSION['cart']);
    header('Location:index.php?page=cart');
    break;
}


Из базы данных циклом выводятся товары с ценой и кнопкой "купить"
<div >       
       <p>Товар</p>
       <div id = 'price'><?php echo (int)$row['cena'].  " грн. "; ?> </div>  
       
       <a <?php if($row['price'] !=0){ ?> href="?page=add_to_cart&id=<?= $row['id'] ?>"; <?php } ?>id = "to_basket">Купить</a>
</div>




Вот страница сайта, для наглядного примера проблемы.... : https://ensy.com.ua/vents?page=vents

laimas 05.11.2018 18:35

Цитата:

Сообщение от Zhenyaxxxx
До сих пор не получилось сделать переадресацию header('Location: /index.php?page=cart'); после нажатия на кнопку купить...

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

Клиент должен делать перенаправление после ответа сервера на асинхронный запрос, при этом сервер может передать клиенту параметры запроса.

Zhenyaxxxx 05.11.2018 19:01

подскажите как мне исправить этот асинхронный запрос, на JSON?

laimas 05.11.2018 19:31

Цитата:

Сообщение от Zhenyaxxxx
как мне исправить этот асинхронный запрос, на нормальный?

Что значит "нормальный"? Асинхронный (ajax) запрос позволяет обмениваться данными с сервером без перезагрузки страницы.

Вы можете пояснить связь представленного вами кода Ajax запроса с кодом РНР и вашей проблемой? Если этот Ajax запрос есть выбор товара (добавление в корзину), причем клиенту предписано принимать JSON, то сервер и должен отдавать только json. Ну ежику же понятно, что о перенаправлении на другую страницу при этом не может быть и речи. Перейти можно только клиентом, как window.location.href = url?page=cart. Но как тогда быть с $('#cartCntItems') .html(data['cntItems']); и т.д.?

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

Zhenyaxxxx 05.11.2018 19:41

Нечего мне недоговаривать.... Раньше все работало.... постепенно редактировал сайт.... и не заметил когда появилась эта проблема.... но скрипты корзины не трогал.... теперь пытаюсь исправить.... Что нужно показать еще чтоб понять что я такого "наворотил"..? Мне этот switch не нравится.... он добавляет мне страницы, которые нужно скрывать от индекса... Скажите где, какой код вытащить, я все покажу....

laimas 05.11.2018 20:06

Цитата:

Сообщение от Zhenyaxxxx
Скажите где, какой код вытащить

Не надо никакого кода, достаточно пояснения - что есть ваш $.ajax, это и есть добавления товара в корзину? Если да, то после этого запроса вы и пытаетесь выполнить переход?

Или ... ?

Zhenyaxxxx 05.11.2018 20:27

Когда нажимаю кнопку "Купить", происходит переход по ссылке add_to_cart&id=...переменная из товара... после этого оно переходит для управления в функцию корзины и в swith:
function add_to_cart($id){
    $id = $_GET['id'];
    if(isset($_SESSION['cart'][$id])){
        $_SESSION['cart'][$id]++;
        return true;
        } else{
            $_SESSION['cart'][$id] = 1;
            return true;
            }
     return false;
    }


switch($page){ 
case('add_to_cart'):        
    $id = $_GET['id'];    
    $add_item = add_to_cart($id);
    $_SESSION['total_items'] = total_items($_SESSION['cart']);
    $_SESSION['total_price'] = total_price($_SESSION['cart']);
    header('Location:index.php?page=cart');  
    break;


}


Я так думаю...... и наверное, после этого происходит $.ajax...


Часовой пояс GMT +3, время: 08:12.