我正在编写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
为什么你需要存储'size'?保存已添加到会话中的购物车项目作为项目标识'$ _SESSION ['id'] [$ item_id] = $ item_id'的数组。当从购物车中删除商品时,请使用'unset($ _ SESSION ['id'] [$ item_id])''。当显示购物车项目时,使用循环foreach($ _SESSION ['id']作为$ item_id)''。 – JungleZombie
谢谢您的输入!重新使用数组后,我按照你的建议实现了结构。 – iMrFelix