Php 从$\u POST/$\u会话数组中删除所选项目

Php 从$\u POST/$\u会话数组中删除所选项目,php,Php,我从一个从列表中选择产品的表单发布到显示所选产品的页面。我想在每个项目旁边都有一个链接,用于从所选列表(数组)中删除项目 我该怎么做?一旦单击“删除”链接,我似乎就失去了会话 session_start(); foreach($_SESSION['id'] as $key => $value){ $array = explode(',', $value); if($value[0]!=''){ $id = $array[0];

我从一个从列表中选择产品的表单发布到显示所选产品的页面。我想在每个项目旁边都有一个链接,用于从所选列表(数组)中删除项目

我该怎么做?一旦单击“删除”链接,我似乎就失去了会话

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;
    }
session_start();
foreach($\会话['id']作为$key=>$value){
$array=explode(“,”,$value);
如果($value[0]!=''){
$id=$array[0];
$query=“从id=“$id”的产品中选择*;
$result=mysqli_查询($dbc,$query);
while($row=mysqli\u fetch\u数组($result)){
$product_id=$row['id'];
回声';
回显“”。条带斜杠($row['category'])。';
回显“”。条带斜杠($row['itemDesc']);
回显“”。条带斜杠(数字_格式($row['points',2))。';
回声';
回显“\n\n”;
$points=stripslashes($row['points']);
@$points_total+=$points;
}
}
}
$postid=$_POST['id'];
$_SESSION['id']=$_POST['id'];
$product_id=htmlspecialchars(@$_GET['id'],ENT_引号,'UTF-8')//URL中的产品id
$s=$\会话['id'];
$s=htmlspecialchars(@$_GET['key'],ENT_引号,'UTF-8')//URL中的产品id
$action=htmlspecialchars(@$_GET['action'],ENT_引号,'UTF-8')//来自URL的操作
开关($动作){
“删除”案例:
unset($array[$id]);//使用从数组中删除$product_id
echo$action.$product\u id;
打破
}
以下是表单的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>

好的。在围绕这个问题进行了一些交谈和合作之后,我们发现了一些问题

  • 需要在使用$\u GET和$\u POST数据的代码周围插入一个复选框,以避免对其他变量进行不必要的修改(例如:当用户单击“删除”从其选择中删除项目时,$\u会话数组将使用$\u POST数组进行更新;因为它不包含任何内容,会话数组将被清空(这就是人们认为会议失败的原因):
  • 要从会话中查找和删除该项,我们必须使用从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']]); 
      } 
    } 
    

  • 对代码进行了一些其他小的更改,但主要问题是解释的问题。

    您能为我们展示表单的HTML代码吗?Thanks@Erenor我对问题进行了编辑,将表格包括在内HTML@Grant您是否尝试过取消设置($array[$product_id])?顺便说一句,那些
    @
    非常难看,请尝试使用
    isset()
    array\u key\u exists()
    :)@HamZaDzCyberDeV-是的,我尝试了unset($array[$product\u id]);它给出了相同的结果,丢失了$\u会话['id'],我是否因为有会话启动();位于页面顶部?因此每次加载页面时它都会启动一个新会话?我尝试将其移动到初始表单页面,但这不会改变任何内容。再次感谢您的输入。