2017-09-02 69 views
1

我正在编写webstore的购物车的过程。现在,我试图添加一个“从购物车中删除”按钮。PHP - 从字符串中删除字符不会改变strlen()

我设置的方式是$_SESSION['id']包含客户添加到购物车的所有产品ID,然后通过循环创建包含5列的表格:img |名称|大小|价格| “从购物车中取出” - 巴顿。

我的目标是点击按钮后,产品将从$_SESSION['id']中简单地删除。由于变量中现在有一个较少的项目,因此strlen($_SESSION['id'])也应该降低一个。

由于for循环将当前迭代添加到其名称中,因此每个按钮都有唯一的名称:<td valign="middle"><form action="#" method="post"><input type="submit" name=" delete_<?php echo $i; ?>" value="Remove"></form></td>

要检查这些按钮中的一个被按下,我成立另一个for循环:

if (isset($_SESSION['id'])) { 
    for ($i=0; $i < strlen($_SESSION['id']); $i++) { 
     if (isset($_POST['delete_'.$i])) { 
      $_SESSION['id'][$i]=""; //removes item from $_SESSION['id']. Instead of "" I also tried NULL 
      $_SESSION['size'][$i]=false; //removes corresponding size. 
      //I may be mistaken, but PRG should be implemented to avoid problems with the form being resent upon refreshing the page 
      header("Location: ".$_SERVER['REQUEST_URI']); 
      exit(); 
     } 
    } 
} 

一旦按钮被点击,该项目确实从$_SESSION['id']字符串删除,但古怪足够的字符串长度保持不变。

执行var_dump ($_SESSION['id']);添加并从购物车中移除3个项目后,结果为:string(3) ""。那么,这个字符串的长度是3,但不包含任何内容?怎么可能?

这显然会造成一些挑战!由于表格行是基于strlen($_SESSION['id'])创建的,因此我剩下的3行(或者我从购物车中移除的很多产品)中充满了错误消息,告诉我关于“未定义索引”的信息。它不会说“未初始化的字符串偏移量”,所以这对我来说意味着偏移量已经存在,但根本没有任何工作要处理。

任何帮助将强烈appreaciated! Felix

+1

为什么你需要存储'size'?保存已添加到会话中的购物车项目作为项目标识'$ _SESSION ['id'] [$ item_id] = $ item_id'的数组。当从购物车中删除商品时,请使用'unset($ _ SESSION ['id'] [$ item_id])''。当显示购物车项目时,使用循环foreach($ _SESSION ['id']作为$ item_id)''。 – JungleZombie

+0

谢谢您的输入!重新使用数组后,我按照你的建议实现了结构。 – iMrFelix

回答

2

无法更改字符串的长度。当您将一个空字符串分配给一个字符串字符时,它不会将所有其他字符转移过来,它会将该字符代码0置于该位置。您可以使用此代码中看到它:

$str = "abcdef"; 
$str[1] = ""; 
echo $str; //acdef 
echo ord($str[1]); // 0 

所以它等同于:

$str[1] = chr(0); 

相反,如果你尝试分配多个字符,它只是分配的第一个字符:

$str[1] = "xyz"; 

行为,如:

$str[1] = "x"; 

不要尝试使用字符串作为数组,这不是它的目的。使用真正的数组,然后你可以使用unset($_SESSION['id'][$i]);

+0

你是男人! 我使用字符串而不是数组仅仅是一个愚蠢的残留物,当我第一次开始的时候,就是一个愚蠢的残留物!我使用多维数组''_SESSION ['products'] = [“product ID”,“size”]'重新编排了所有内容,这样我就可以轻松地从购物车中删除条目了!为了防止for循环给我错误,每次删除产品时都会对数组进行排序。 – iMrFelix