2011-03-10 74 views
2

我有一个购物车,并希望从购物车中删除一个项目的选项。我不想使用JavaScript。购物车中的物品通过抓取会话变量在php中循环,并显示在一个表格中,可以选择删除该物品。截至目前,我有多个输入提交的“remvove item”链接,并且在我的for循环中,我有这些输入标签是使用该项目的ID生成的。形式多个提交按钮

<input type="hidden" name="id[]" value="<?php echo $uniqueid; ?> 
<input type="submit" name="remove" value="removeitem" class="otherbtns" /> 

我的问题是在我的脚本处理后的变量无法知道其为“removeItem”被点击的链接,从而去掉第一个方法。我只是有点寻找最好的方式来处理这种没有JS的东西。

谢谢

+0

我不认为有一种方法可以在没有Javascript的情况下实现你想要的,另一种方法是有复选框和删除项目按钮。 – Jacob 2011-03-10 01:47:25

回答

3

你可能会为动作属性制作多个不同值的表单吗?

+0

然后你不能有一个整体形式的购物车。表单不能在表单中。 – Jacob 2011-03-10 01:51:00

+0

如果您正确配置会话变量,则不需要整体表单。 – 2011-03-10 01:53:00

+0

另一种替代方法是从购物车按钮中删除链接以说“http://www.example.com/cart?removeID=123”。然后,相应地处理$ _GET变量。 – 2011-03-10 01:54:55

0

如果你不介意的id值暴露给用户,快速正肮脏的方式来解决它会改变每个value属性提交按钮:

<input type="submit" ... value="removeitem <?php echo $uniqueid ?>" /> 

然后,当表单发送到服务器,您可以使用PHP解析和检查值。根据你的ID有多复杂,你可以做一些简单的事情:

$value = $_POST['remove']; 
$value = explode(' ', $value); 
$value = $value[1]; 

......这就理论上给你你需要的ID。

+0

谢谢你会这样做,我没有看到任何与用户知道我的物品ID的风险 – 2011-03-10 01:57:44

0

你可以用一个简单的链接到同一页面处理这个问题,但在$ _GET收集信息,并通过一个脚本运行:

<a href="cart.php?remove=yes&item_to_remove=<?php echo item_id; ?>">Remove</a> 

在PHP脚本然后

if ((isset($_GET['remove']))and($_GET['remove'] == 'yes')){ 
    //then remove the item from the session var by removing the $_GET['item_to_remove'] 
} 
+0

从来没有想过这样做这样做..谢谢! – 2011-03-10 02:02:46

+0

正如我评论泰勒所说的那样,它反对使用GET的HTTP规范来做这样的事情。 – Jacob 2011-03-10 02:06:49

+1

看看为什么不使用GET。 http://programmers.stackexchange.com/questions/56522/is-there-ever-a-situation-where-its-ok-to-initiate-a-delete-on-a-get/56526#56526 – Jacob 2011-03-10 05:44:25

2

使用多种形式。您可以在脚本中使用任意数量的表单,每个表单提交一份。不要走js提交表单的路径 - >如果你这样做,小猫就会死亡。

1

从数据库中读取您的$id[$i]并保存记录量$count 然后检查,如果你需要删除的内容:

for ($i = 0; $i <= $count; $i++) { 
    if (isset($_POST[$id[$i]])) { 
    remove your $id[$i] from database 
    } 
} 

然后从数据库中再次读取您的$id[$i]并保存记录量$count

for ($i = 0 ; $i <= $count; $i++) { 
    echo '<input type="submit" name="'.$id[$i]'." value="removeitem">'; 
}