2

リストから商品を選択するフォームから、選択した商品が表示されているページに投稿しています。選択したリスト(配列)からアイテムを削除するために、各アイテムの横にリンクが必要です。

それ、どうやったら出来るの?削除リンクをクリックすると、セッションが失われるようです。

session_start();

foreach($_SESSION['id'] as $key => $value){

      $array = explode(',', $value);

      if($value[0]!=''){
        $id = $array[0];
        $query = "SELECT * FROM products WHERE id = '$id'";
        $result = mysqli_query($dbc, $query);

          while ($row = mysqli_fetch_array($result)) {

            $product_id = $row['id'];

            echo '<tr valign="bottom">';
            echo '<td>' . stripslashes($row['category']) . '</a></td>';
            echo '<td>' . stripslashes($row['itemDesc']) . '</a></td>';
            echo '<td class="right">' . stripslashes(number_format($row['points'], 2)) . '</a></td>';
            echo '<td><a href="' . $_SERVER['PHP_SELF'] . '?action=remove&key=' . $key . '&s=' . $_SESSION['id'] . '">Remove</a></td>';
            echo "</tr>\n\n";
            $points = stripslashes($row['points']);
            @$points_total += $points;
          }
      }
      }


$postid = $_POST['id'];
$_SESSION['id'] = $_POST['id'];

$product_id = htmlspecialchars(@$_GET['id'], ENT_QUOTES, 'UTF-8');//the product id from the URL
$s = $_SESSION['id'];
$s = htmlspecialchars(@$_GET['key'], ENT_QUOTES, 'UTF-8');//the product id from the URL
$action = htmlspecialchars(@$_GET['action'], ENT_QUOTES, 'UTF-8'); //the action from the URL

switch($action) {
    case "remove":
        unset($array[$id]); //remove $product_id from the array with
        echo $action . $product_id;
break;
    }

フォームのHTMLは次のとおりです。

 <form method="post" action="products_selected.php">
<?php

  $query = "SELECT * FROM products ORDER BY rangeCode, category ASC";
  $result = mysqli_query($dbc, $query);
  while ($row = mysqli_fetch_array($result)) {

      $id = $row['id'];

    echo '<tr valign="bottom">';
    echo '<td>' . stripslashes($row['rangeCode']) . '</td>';
    echo '<td>' . stripslashes($row['category']) . '</a></td>';
    echo '<td>' . stripslashes($row['itemDesc']) . '</a></td>';
    echo '<td>' . number_format($row['points'], 2) . ' points ';
    echo '<input type="checkbox" name="id[]" value="' . $id . '" /></td>';
    echo '</tr>' . "\n\n";
  }
  mysqli_close($dbc);
?>
 <tr><td colspan=13><input type="submit" name="submit" value="Order" /></td></tr>
4

1 に答える 1

3

Ok。少しチャットしてこの問題を回避した後、いくつかの問題が見つかりました。

  1. 他の変数への不要な変更を避けるために、$_GETおよび$_POSTデータを使用するコードの周りにチェックを挿入する必要があります(例:ユーザーが[削除]をクリックして選択からアイテムを削除すると、$_SESSION配列は$ _POST配列で更新されます。これには何も含まれていないため、セッション配列は空になります(これが、セッションが失われたと見なされた理由です)。
  2. アイテムを見つけてセッションから削除するには、URLから取得したキーを使用して、それがセッション配列に存在するかどうかを確認する必要があります。これは、以下のコードで確認できます。

    if (isset($_POST['id']))
    { 
      $_SESSION['id'] = $_POST['id']; 
    } 
    
    if(isset($_GET['key']) && ($_GET['action'] == 'remove'))
    { 
      if (array_key_exists($_GET['key'], $_SESSION['id']))
      { 
        unset($_SESSION['id'][$_GET['key']]); 
      } 
    } 
    

コードに他のいくつかの小さな変更が加えられましたが、主な問題は説明されたものでした。

于 2013-03-11T16:25:06.827 に答える