Link 每次更改 SESSION
Link change SESSION var
我有一个包含各种商品的电子商务网站的列表页面 (item_list.php)。此页面使用 PHP 循环生成,并在 <li>
元素内显示每个项目。每个项目都是同一页面的 link ,称为 item_details.php 。
当点击 link 时,我想 运行 一个将 SESSION var 更改为某个 $id 的脚本(它将使用 .innerHTML 从 <li>
本身中提取出来功能),然后允许浏览器进入下一页(item_details)。
这是必需的,以便我可以显示有关每个项目的正确信息。
我认为 Ajax 可以做到这一点,但我更喜欢仅使用 JS 和 PHP 的解决方案。
(P.S.This 是一个大学项目,我还是一个 PHP 新手,我尝试了很长时间寻找答案,但找不到解决方案)
没有 JS 或其他客户端代码可以设置会话值,因此您需要 ajax 调用 php,或者一些解决方法。这不是一个完整的答案,但可以让您思考并希望再次继续该项目。
显而易见的答案是将它包含在 link 中,然后从 $_GET 数组中将其放入 PHP 中,并适当地过滤它。
<a href="item_details.php?id=123">item title</a>
但是,如果出于某种原因这不是一个有明显答案的问题:
1.) 可以通过回调和 ajax 调用来实现最接近的目标。 这个想法是让实际的 link 带有点击功能,返回 false 所以 link 不会立即触发,它还会调用 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 页面上访问此数据。
在此处查看更多信息和说明: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,那么只需在另一页上重新生成它并使用上述方法之一存储小数据以备不时之需。
我希望这能让您继续前进并至少思考如何解决您的项目。祝你好运!
我有一个包含各种商品的电子商务网站的列表页面 (item_list.php)。此页面使用 PHP 循环生成,并在 <li>
元素内显示每个项目。每个项目都是同一页面的 link ,称为 item_details.php 。
当点击 link 时,我想 运行 一个将 SESSION var 更改为某个 $id 的脚本(它将使用 .innerHTML 从 <li>
本身中提取出来功能),然后允许浏览器进入下一页(item_details)。
这是必需的,以便我可以显示有关每个项目的正确信息。
我认为 Ajax 可以做到这一点,但我更喜欢仅使用 JS 和 PHP 的解决方案。
(P.S.This 是一个大学项目,我还是一个 PHP 新手,我尝试了很长时间寻找答案,但找不到解决方案)
没有 JS 或其他客户端代码可以设置会话值,因此您需要 ajax 调用 php,或者一些解决方法。这不是一个完整的答案,但可以让您思考并希望再次继续该项目。
显而易见的答案是将它包含在 link 中,然后从 $_GET 数组中将其放入 PHP 中,并适当地过滤它。
<a href="item_details.php?id=123">item title</a>
但是,如果出于某种原因这不是一个有明显答案的问题:
1.) 可以通过回调和 ajax 调用来实现最接近的目标。 这个想法是让实际的 link 带有点击功能,返回 false 所以 link 不会立即触发,它还会调用 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 页面上访问此数据。 在此处查看更多信息和说明: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,那么只需在另一页上重新生成它并使用上述方法之一存储小数据以备不时之需。
我希望这能让您继续前进并至少思考如何解决您的项目。祝你好运!