2017-01-19 11 views
0

私は電子商取引のWebサイトの構築を練習していますが、setcookie()関数に問題があります。クッキーの設定とデータベースへの挿入

これは私のadd_cartファイルです:

<?php 
require_once $_SERVER['DOCUMENT_ROOT'].'/onlineStore/system/init.php'; 

$product_id = sanitize($_POST['product_id']); 

$size = sanitize($_POST['size']); 

$available = sanitize($_POST['available']); 

$quantity = sanitize($_POST['quantity']); 

$item = array(); 

$item[] = array(

    'id' => $product_id, 
    'size' => $size, 
    'quantity' => $quantity, 
    ); 

$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false; 

$query = $db->query("SELECT * FROM products WHERE id = '{$product_id}'"); 

$product = mysqli_fetch_assoc($query); 

$_SESSION['success_flash'] = $product['title'].' was added to your cart.'; 


//CHECK TO SEE IF CART COOKIE EXISTS 
if($cart_id != ''){ 

//adding code later 

} 
else{ 
    //ADD CART TO THE DATABASE AND SET COOKIE 
    $items_json = json_encode($item); 

    $cart_expire = date("Y-m-d H:i:s", strtotime("+30 days")); 

    $db->query("INSERT INTO cart (itmes,expire_date) VALUES 

('{$items_json}','{$cart_expire}')"); 

    $cart_id = $db->insert_id; 

    setcookie(CART_COOKIE,$cart_id,CART_COOKIE_EXPIRE,'/',$domain,false); 

} 
?> 

そして、私は定数としてクッキーを定義する別のファイル:

<?php 
define('BASEURL',$_SERVER['DOCUMENT_ROOT'].'/onlineStore/'); 

define('CART_COOKIE','edHjw3345LKJ1z'); 

define('CART_COOKIE_EXPIRE',time() + (86400 * 30)); 
?> 

私は、ブラウザの開発ツールを使用してページを閲覧すると、それがどのように見えますCookieはページの再ロード後に設定されますが、値は0、パスはn/a、ドメインはn/a、期限切れはn/aを示し、データはデータベースに挿入されません。誰が何が間違っているのか分かりますか?助けてください。

私もそうのように私のinit.phpファイル内のif文で設定した$のcart_idを持っている:

$cart_id = ''; 
    //IF COOKIE EXISTS, SET COOKIE TO cart_id 
    if(isset($_COOKIE[CART_COOKIE])){ 

     $cart_id = sanitize($_COOKIE[CART_COOKIE]); 
    } 
+0

私は不安を抱いて、INSERTクエリにエラーがあると言います。 'itmes'はこれがスペルミスです。 – RiggsFolly

+0

データベースに接続している場所がわからない – RiggsFolly

+0

**警告**:mysqliを使用する場合は、[パラメータ化されたクエリ](http://php.net/manual/en/mysqli.quickstart)を使用してください。 .prepared-statements.php)と['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用してクエリにユーザーデータを追加します。 **正しくエスケープするのを忘れた場合、重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成するため、手動エスケープと文字列補間または連結を使用しないでください。 – tadman

答えて

0

は、だから私は、私が以前に設定した古いクッキーをクリアすることによってこの問題を解決してきましたし、今はすべてが機能しているようです。助けてくれてありがとう。

関連する問題