|
查看: 1144|回复: 14
|
也是SESION的问题请教大家!
[复制链接]
|
|
|
我想用以下的SESSION储存起来,然后可以用在SHOPPING CART里!
可以这样写吗?
if ($_SESSION['user'] == '' || $_SESSION['user'] == null) {
// generate random encryption string
$enc_str = rand(100000,1000000);
$_SESSION['user'] = substr(('user'.$enc_str), 4,8);
echo substr(('user'.$enc_str), 4,8);
}
elseif ($_SESSION['user'] != '' || $_SESSION['user'] != null){
echo substr(('user'.$enc_str), 4,8); |
|
|
|
|
|
|
|
|
|
|
发表于 14-6-2008 10:50 AM
|
显示全部楼层
原帖由 明明明 于 13-6-2008 03:49 PM 发表 
我想用以下的SESSION储存起来,然后可以用在SHOPPING CART里!
可以这样写吗?
if ($_SESSION['user'] == '' || $_SESSION['user'] == null) {
// generate random encryption string
$enc_str = rand( ...
请问你这session是用在 shopping cart 的那一方面?? 
以下是我看了你的源码的意见,如果有得罪之处请见谅哦。。
说真,以下这段不懂你的用意是什么的
substr(('user'.$enc_str), 4,8);
你一开始是计算一个随机号码
然后将 user + 随机号码, 然后又你又substrsubstr(('user'.$enc_str), 4,8);
你的程式例子就像 :
你的random号码是 12345
然后将 'user' + 12345 = user12345
substr(('user'.$enc_str), 4,8); 得到的答案不就是 12345 吗?
其实一开始random号码时你就得到答案了,为什么还要做substr多一个步骤?? |
|
|
|
|
|
|
|
|
|
|
发表于 15-6-2008 01:09 PM
|
显示全部楼层
if ($_SESSION['user'] == '' || $_SESSION['user'] == null) {
应该用isset比较正确。
把SESSION储存,不需要使用Random Number. |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 16-6-2008 02:27 PM
|
显示全部楼层
原帖由 keroro小军曹 于 14-6-2008 10:50 AM 发表
substr(('user'.$enc_str), 4,8);
我只是方便确认而已!
我的LOGIC是这样的:
当用户流览是就先SET SESSION=USER*****
这个SESSION是在用户登入户口之前的SHOPPINGCART,
当用户登入后这个SESSION将被LOGIN的SESSIOM取代!
不好意思我是个新手请大家不要见怪!
请问 isset 和ENDSET 是什么呢? |
|
|
|
|
|
|
|
|
|
|
发表于 17-6-2008 11:55 AM
|
显示全部楼层
原帖由 明明明 于 16-6-2008 02:27 PM 发表 
我只是方便确认而已!
我的LOGIC是这样的:
当用户流览是就先SET SESSION=USER*****
这个SESSION是在用户登入户口之前的SHOPPINGCART,
当用户登入后这个SESSION将被LOGIN的SESSIOM取代!
不好意思我是个新手请 ...
哦。。其实一个没Login的浏览者是不需要做session的啊。。
你可以先把用户购买的全部东西写在session, 然后用户login后做Payment.
我可以给的建议就像以下 :
例子 :
A 是一个还没login的用户,
A 他在你的网购里购买了2样东西, 你先把他两样货品的代号或ID 放进 SESSION 里 (我比喻session['product'] 是我存货品的session, 货品的ID是 1 和 2)
现在 session['product'] = "1 , 2“;
当要显示用户的购物产品,你可以将 session['product']里的id split 或 explode 出来,然后再从你的database找回产品资料
(这样做就可以就算一个没login的用户也可以先做网购然后最后才login做payment.)
最后一个步骤是
如果用户是还没 login 的,你可以给一个警告并且不给进入payment process。
当用户login了,就做总结的 payment process 吧。。
你是说 ISSET 和 UNSET 吧?
ISSET 是可以让你检查你的 variable 是否有资料在里面的
UNSET 就是把variable里面的资料都清除 <就像 UNSET(session['product'] ) > 这样session['product']里的资料都会清除掉,当用户完成购买以后记得unset seesion哦。。因为用户回到首页时还会看见购物车里有刚才购买的产品的,除非用户购买后直接关掉浏览器而已。
我也算是一个新手而已,慢慢吸取经验吧。。所以加油咯。。
建议你每次都可以用纸和笔画出process flow,当你看见整个流程就会比较容易做了。。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 18-6-2008 11:13 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 18-6-2008 10:45 PM
|
显示全部楼层
原帖由 明明明 于 18-6-2008 11:13 AM 发表 
那么这样必须做ARRAY才可以吗?
对。。当将session里的资料分出来时,全部做成array... |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 19-6-2008 01:34 PM
|
显示全部楼层
$products_id = $_GET['product'];
if(!empty($_SESSION['sessionCart'])){
echo "session exist";
}
else {
echo "session don not exist, create session";
$Cart[]= array("products_id"=>"1", "products_name"=>"1", "order_quantity"=>"1","order_quantity"=>"1");
$_SESSION['sessionCart'] = $Cart;
}
请问SESSION可以这样写吗? |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 19-6-2008 01:35 PM
|
显示全部楼层
|
请问ARRAY 是要写在GLOBAL还是CART 的PAGES里呢? |
|
|
|
|
|
|
|
|
|
|
发表于 19-6-2008 03:23 PM
|
显示全部楼层
原帖由 明明明 于 19-6-2008 01:35 PM 发表 
请问ARRAY 是要写在GLOBAL还是CART 的PAGES里呢?
这要depend你要怎样的设计了,如果是我做是会将 array 放在 function 里,然后做存为独立的php文件,
如果下次每一页都要显示cart 里的物品,我只要include 独立的php文件再call回function就行了。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 19-6-2008 05:47 PM
|
显示全部楼层
回复 10# keroro小军曹 的帖子
多谢你的解答!
我想请问我这样写的LOGIC 对吗?
<?php
$products_id = $_GET['product'];
if(!empty($_SESSION['sessionCart'])){
echo "session exist";
}
else {
echo "session don not exist, create session array";
// create session array
$_SESSION['sessionCart'] = array("products_id"=>"", "products_name"=>"", "order_quantity"=>"","order_price"=>"",);
}
?>
<h2>My Shopping Cart</h2>
<?php
// If no product selected
if ($products_id == "" ){
echo "i m not from product infor pages";
// check session array here
}
else {
echo "i m from product infor pages!";
$GetProduct = "SELECT * FROM products WHERE products_id='$products_id'";
$ResultProduct = mysql_query($GetProduct) or die("Error retrieving data");
while ($record = mysql_fetch_array($ResultProduct)) {
$products_id = $record["products_id"];
$products_name = $record["products_name"];
$products_quantity = $record["products_quantity"];
$products_price = $record["products_price"];
echo "<br>";
echo $products_name;
// check session array here
}
}
?> |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 20-6-2008 09:46 AM
|
显示全部楼层
还有想请问,要如何把ARRAY 里的VALUE分解出来呢?
比如说:
foreach($_SESSION['Cart'] as $key=>$value)
得到的DATA是 :
AAA, BBB, CCC, DDD
EEE, FFF, GGG, HHH
那么我要怎么分开呢?
1. AAA | BBB | CCC
2. EEE | FFF | GGG
因为我是想把ARRAY 的DATA 放进一个TABLE里! |
|
|
|
|
|
|
|
|
|
|
发表于 21-6-2008 03:41 PM
|
显示全部楼层
serialize 整个array lor 然后放进table  |
|
|
|
|
|
|
|
|
|
|
发表于 22-6-2008 01:55 AM
|
显示全部楼层
原帖由 明明明 于 20-6-2008 09:46 AM 发表 
还有想请问,要如何把ARRAY 里的VALUE分解出来呢?
比如说:
foreach($_SESSION['Cart'] as $key=>$value)
得到的DATA是 :
AAA, BBB, CCC, DDD
EEE, FFF, GGG, HHH
那么我要怎么分开呢?
1. A ...
你可以用explode 这个function
例子:
$_SESSION['Cart'] = “AAA, BBB, CCC, DDD,EEE, FFF, GGG, HHH”;
你可以用explode来分解出来
$cart = explode("," , $_SESSION['Cart']); //分解session有","逗号的资料
$count_cart = count($cart) //计算有多少个逗号,例子的session里有7个都好。。所以 $count_cart = 7
for($i=0;$i<$count_cart;$i++)
{
echo $cart[$i]."<br>";
}
这样用loop for就能分解完所有session里的资料.
|
|
|
|
|
|
|
|
|
|
|
发表于 22-6-2008 02:03 AM
|
显示全部楼层
原帖由 明明明 于 19-6-2008 05:47 PM 发表 
多谢你的解答!
我想请问我这样写的LOGIC 对吗?
My Shopping Cart
一样用explode的function把资料分解出来。。
然后用loop for count 出 array的资料
再用array的资料在database query出来。。 |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|