我有一个电子商务网站的列表页面,其中包含各种项目(item_list.php)。此页面是使用PHP循环生成的,并在<li>
元素中显示每个项目。每个项目都是指向同一页面的链接,名为item_details.php。
当点击链接时,我想运行一个脚本,将SESSION var更改为某个$ id(将使用.innerHTML函数从<li>
本身中删除),然后允许浏览器进入下一页(item_details)。
这是必要的,所以我可以显示每个项目的正确信息。
我认为这可以通过Ajax实现,但我更喜欢只使用JS和PHP的解决方案。
(P.S.This是一个大学项目,我仍然是一个PHP新手,我试着寻找一个好的答案,但无法找到解决方案)
答案 0 :(得分:0)
没有JS或其他客户端代码可以设置会话值,所以你需要对php进行ajax调用,或者需要一些解决方法。这不是一个完整的答案,而是让你思考的东西并希望再次进行该项目。
显而易见的答案是将其包含在链接中,然后从$ _GET -array中使用PHP获取它,并正确过滤它。
<a href="item_details.php?id=123">item title</a>
但是,如果出于某种原因,这不是一个明显答案的问题:
1。)通过回调和ajax调用可以实现最接近你的目标。这个想法是让实际的链接有一个click函数,返回false所以链接不会立即触发,也会调用ajax post请求,最终将使用document.location重定向您的浏览器。
我强烈反对此建议,因为这会阻止ctrl-clicks导致有缺陷的用户体验。
在这里查看一些代码示例,您可以修改它们。您还需要一个实际设置会话值的ajax.php文件。 https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#product-click
2。)现在,一个可能稍微好一点的方法,如果你真的需要做这个客户端,可以使用一个点击处理程序,而不是直接执行ajax调用或设置会话,将使用jQuery设置cookie,然后在item_list.php -page上访问此数据。 请在此处查看更多信息和说明:https://www.electrictoolbox.com/jquery-cookies/
<script>
$('product_li a).click(function(){
$.cookie("li_click_data", $(this).parent().innerhtml());
return true;
});
</script>
......
<li class="product_li"><a href="xxx">your product title</a></li>
在你的目标php文件中检查cookie 。请记住,此cookie可以设置为任何内容,因此永远不要信任用户数据。测试并过滤它,以确保您的代码不会受到损害。我不知道你想用这些数据做什么。
$_COOKIE['li_click_data'];
3。)最后,作为最佳方法,您应该查看当前的代码,看看是否有可以重新设计的内容。这是一个简单的例子。
你可以在php中执行以下操作,在每个页面加载时在会话中保存值的数组,然后获得该值,前提是你有一些id或其他可用的项目标识符:
// for list_items.php
foreach($item as $i) {
// Do what you normally do, but also set an array in the session.
// Presuming you have an id or some other means (here as item_id), to identify
// an item, then you can also access this array on the item_details -page.
$_SESSION['mystic_item_data_array'][$i['item_id]] = $i['thedata'];
}
// For item_details.php
$item_id = // whatever means you use to identify items, get that id.
$data_you_need = $_SESSION['mystic_item_data_array'][$item_id];
<强>最后强>
以上所有方式均可用于小型数据,如上一页,过滤器,按键等。
基本上,只有在客户端实际生成数据时才应使用1和2(客户端)。如果你已经在PHP中使用它,那么也可以在php中处理它。
如果您打算存储实际的html,那么只需在另一页上重新生成,然后使用上述方法之一存储小数据,以备不时之需。
我希望这能让你前进并至少考虑如何解决你的项目。祝你好运!