2014-04-05 5 views
0

나는 이것에 집착하고 있으며, 나는 꽤 가깝다고 생각합니다. 많이 검색했지만 특정 상황에 대한 솔루션을 가진 사람을 찾을 수 없습니다.장바구니에 세션을 사용하여 여러 줄의 데이터를 저장할 수 없습니다.

나는 mysql을 사용하여 PHP로 쇼핑 카트를 만들고있다. 그것은 간단한 것이고, 로그인 한 다음 가게에 가서 '장바구니에 담기'버튼을 클릭하면 항목이 가격이 표시된 gridview에 표시되고 그 아래에는 구매 총액이 표시됩니다. 여러 줄의 데이터 (판매 단위, 사용자 이름, itemid 등)를 현재 세션에서 데이터베이스로 저장해야하는 경우 문제가 발생합니다. 이유는 알 수 없습니다. 일종의) 사용자가 페이지에 등록 할 때와 같은 방법입니다.

나는 데이터베이스에 eache SESSION 행의 내용을 저장 루프에 대한 을 생각하고이 (이것은 단지 예입니다 나는이 잘못 될 수 있음을 awhate 해요)

if (mysql_num_rows($result)!=0){ 
while ($_SESSION = mysql_fetch_array($result)){ 
    $array[]= $_SESSION; 

    for($i=,$i<$array_rows;$i++){ 
    mysql_query ("INSERT INTO purchase(username,gameid,amount_purchased) VALUES 
    ('".$array[$i]."', '".$array[$i]."', '".$array[$i].")"); 
    $array[$i]=$i+1; 
    } 
} 
같은

}

username, gameid, purchasedamount는 몇 가지 예입니다. 정말 바보 같은 질문인데 정말 죄송합니다. /

+2

'($는 _SESSION =로 MYSQL_ASSOC ($ 결과)) {'그 이상한, 난 당신이 알 수없는 쿼리에서 선택한 결과로 뭘 보이지 않는 동안 이 삽입 루프의 일부 –

+0

페이지간에 데이터를 전달하지 않으려는 경우 세션이 필요하지 않습니다.While 루프를'while ($ array = mysql_fetch_array ($ result)) {}'로 바꾸고'$ array [] = $ _ SESSION;'문을 제거해보십시오. 이것은 가까이에 도움이 될 것입니다 :) – Sam

답변

0

세션 변수에 장바구니의 값을 저장하는 경우 $ _SESSION [ 'cart']라고 말하면 세션 카트의 데이터를 데이터베이스에 저장하고 일반적으로

$data = $_SESSION['cart']; 

if(empty($data)) return false; 

$table = 'purchase'; 
$implode_values = array(); 
$implode_fields = array(); 

foreach($data as $key => $value) { 
    $implode_fields[] = (string)$key; 
    $implode_values[] = Your_db_escape_method($value); 
} 

if(mysql_query ("INSERT INTO " . $table . " (".implode(", ", $implode_fields).") VALUES (".implode(", ",$implode_values).")")) { 
    //echo 'Data was inserted'; 
} else { 
    //echo 'Data was not inserted'; 
} 

또는 개체에서 값을 설정하여 예를

 foreach($data as $value) { 

    mysql_query (
    "INSERT INTO 
     purchase(
     username, 
     gameid, 
     amount_purchased 

    ) VALUES (
     '".$value['username']."', 
     '".$value['gameid']."', 
     '".$value['amount_purchased']."')" 
    ); 
} 

당 단일 쿼리로와 같이 보관 ;

$_SESSION['cart'] = array (
    'username' => 'Usertest_1', // eg 'username' => $obj->username, 
    'gameid' => 1234, 
    'amount_purchased' => 200 
); 

상기와 동일하다.

$_SESSION['cart']['username'] = 'Usertest_1'; 
$_SESSION['cart']['gameid'] = 1234; 
$_SESSION['cart']['amount_purchased'] = 200; 

// 여러 레코드의 경우;

$_SESSION['cart'][] = array (
    'username' => 'Username1', 
    'gameid' => 1234, 
    'amount_purchased' => 200 
); 

$_SESSION['cart'][] = array (
    'username' => 'username2', 
    'gameid' => 1234, 
    'amount_purchased' => 200 
); 

예를 저장

$data = $_SESSION['cart']; 
$result = mysql_query ("INSERT INTO purchase(username, gameid, amount_purchased) VALUES ('".$data['username']."','".$data['gameid']."','".$data['amount_purchased']."')"); 
    if($result && mysql_num_rows($result)>0) { 
// all ok 
} 
+0

덕분에 도움이! :) 하지만 지금 내 문제는 프로그램이 구매 한 것이 성공적이라고 진실한 진술을 통해 진행되지만 데이터베이스를 확인할 때 행이 표시되지 않는다는 것입니다. 오류가 무엇인지 알지 못합니다. 나는 print_r과 거기에있는 모든 값으로 값을 검사했다. – user3492034

+0

print_r ($ _ SESSION [ 'cart']) 또는 무엇이라고 부르든 여기에 붙여 넣을 수 있습니까? 배열 프로토 타입이 어떻게 생겼는지 확인해야합니다. – gus

+0

행이 삽입되었는지 확인하려면 mysql_affected_rows(); $ num_rows_inserted = mysql_num_rows도 ($ 결과); $은 =는 mysql_query에게 ("INSERT INTO를 ...) 결과 경우 (거짓 ===의 $ 결과 또는 $ num_rows_inserted!) {// 오류 삽입없이 행 응답에 대한} – gus

0

요청 사이에 $_SESSION의 값을 유지하려는 경우 그 값을 무시해서는 안됩니다.

while ($_SESSION = something) { ... 

여기에서 $_SESSION으로 무엇을하고 있습니까?

$_SESSION은 다른 변수와 마찬가지로 작동합니다. 덮어 쓰면 원래 값이 떨어집니다. 또한, for($i=,$i<$array_rows;$i++)?

이 경우에도 컴파일이 수행됩니까? 대신 이것을 시도하십시오 : for($i=0;$i<$array_rows;$i++)

관련 문제