2016-08-19 3 views
0

У меня есть сценарий, показывающий продукты в соответствии с их идентификатором. В эхо-данных есть ссылка, которая перенаправляет пользователя на ту же страницу, но с опубликованным идентификатором, в соответствии с этим идентификатором я удаляю продукт (id) из моего сеанса, который является массивом. Это отлично работает, за исключением первого значения массива. Что может быть причиной этого?Не удается удалить первое значение моего массива

Как у меня есть код на данный момент:

//Link to quote page and send product id with it 

echo '<p><a class="offertelink" href="offerte.php?product='.$productcr[0]['id'].'">Request a quote</a></p>'; 

На моей цитатой странице:

ob_start(); 
include 'includes/header.php'; 
if(!isset($_SESSION['product'])){ 
    $_SESSION['product'] = array(); 
} 

// Check if product is set before putting it in an array 
if(isset($_GET['product']) && !in_array($_GET['product'], $_SESSION['product'])){ 
    $_SESSION['product'][] = $_GET['product']; 
} 

// Implode array to use ids in query 
$prods = implode(",", $_SESSION['product']); 

Запрос:

if(count($_SESSION['product']) != 0){ 
// Get all products with id in session 
$offerte   = "SELECT * FROM `web_content` WHERE `id` in (".$conn->real_escape_string($prods).") AND state = 1"; 
$offertecon   = $conn->query($offerte); 
$offertecr   = array(); 
while ($offertecr[] = $offertecon->fetch_array()); 
} 

И, наконец, ниже мой вопрос:

// Check if id is send, and delete from session accordingly 
if(isset($_GET['id'])){ 
    $productID = $_GET['id']; 
    if($index = array_search($productID, $_SESSION['product'])) { 
     $_SESSION['product'][$index] = null; 
     unset($_SESSION['product'][$index]); 
     header('Location: http://www.web.nl/_extern/web/offerte.php'); 
    } 
} 

if(count($_SESSION['product']) == 0){ 
    echo 'No products added'; 
}else{ 
    foreach($offertecr as $product){ 

     $offerte_imgs = $product['images']; // Get image parameters of the article 
     $offertepic = json_decode($offerte_imgs); // Split the parameters apart 

     if($offertepic->{'image_intro'} != ''){ 
      $image = 'cms/'.$offertepic->{'image_intro'}; 
     }else{ 
      $image = 'http://www.web.nl/_extern/web/cms/images/Producten/Untitled-7.jpg'; 
     } 

     if($product['id'] != ''){ 
      if (strlen($product['introtext']) > 100){ 
       $shortcat = substr($product['introtext'], 0, 100) . '...'; 
      }else{ 
       $shortcat = $product['introtext']; 
      } 
      $deleteLink  = "offerte.php?id=".$product['id']; 
      $offerteoverzicht .= ' 
      <div class="row productofferte"> 
       <a href="producten/'.$product['alias'].'.html"> 
        <div class="col-md-6 offerteimg"> 
          <img style="border:1px solid #ddd;" src="'.$image.'"> 
        </div> 
       </a> 
       <div class="desc"> 
        <a style="color:#2d4160;" href="producten/'.$product['alias'].'.html"><p style="font-weight:bold;">'.$product['title'].' </a> 
         <a href="'.$deleteLink.'"> 
          <i class="fa fa-times" aria-hidden="true"></i> 
         </a> 
        </p> 
        <p>'.$shortcat.'</p> 
       </div> 
      </div>'; 
     } 
    } 
} 

echo $offerteoverzicht; 

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

ответ

1

Ваш тест на поиск элемента в массиве с array_search должен соответствовать false. Выполнение ! вернется false когда элемент найден с индексом 0:

Изменения:

if($index = array_search($productID, $_SESSION['product'])) { 

к:

if(($index = array_search($productID, $_SESSION['product'])) !== false) { 
+0

Высоких, спасибо! Я отвечу на ваш ответ через 6 минут. – twan

Смежные вопросы