• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
بررسی کدهای سبد خرید فروشگاه
#1
سلام

برای یادگیری تصمیم گرفتم ساخت فروشگاه اینترنتی رو تمرین کنم. اما نمایش سبد خرید را به هیچ وجه متوجه نمیشم. اینکه به چه دلیل از foreach استفاده میکنه یا اینکه چرا داخل دستور sql از IN استفاده میشه و در قسمتی substr میزاره برنامه نویس

لطفا توی مفهوم ساختش کمکم کنید.
کد پی‌اچ‌پی:
<?php
if (isset($_SESSION['cart'])){
$sql " SELECT * FROM products WHERE id_products IN (";
foreach(
$_SESSION['cart'] as $id => $value){
    
$sql .= $id ",";
}
$sql substr($sql,0,-1) . ") ORDER BY id_products ASC";
$query mysql_query($sql);
while(
$row mysql_fetch_assoc($query)){
?>
<p><?php echo $row['name']; ?><?php echo $_SESSION['cart'][$row['id_products']]['quantity']; ?></p>

?>
  پاسخ
تشکر شده توسط :
#2
شما در اصل قبل از این مرحله id محصولاتی که کاربر قصد خریدشون رو داره رو در قالب یک آرایه در سشن ذخیره کردین.خب؟
برای خوندن اطلاعات سبد خرید توی اون SQL میگین Select کله محصولاتی رو که چی؟ که id_products شون در اون آرایه وجود داشته باشه.
یعنی توی اون Foreach میاین آرایه رو یکی یکی میخونین و در قالب یک رشته به صورت id1,id2,id3 ,... ذخیره میکنین و میزارین توی SQLتون.

اون Substr هم برای اینه که توی Foreach کاربر هر id ای رو که میخونه یه دونه ویرگول میچسبونه تهش. یعنی مثلا میشه id1,id2,id3, و اگه اینو توی SQL اجرا کنین پیغام خطا میگیرین. برای این مساله با Substr میاد و کاراکتر - , - تهش رو حذف میکنه Blush
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط : a76205
#3
سلام، سلطانی خیلی ممنون بابت پاسخ کاملتون. متوجه اصل مطلب شدم

بغییر از این روش، توی نمایش سبد خرید کد دیگری هم وجود داره؟ تقریبا همین یه مدل رو دیدم
  پاسخ
تشکر شده توسط :
#4
نقل قول: بغییر از این روش، توی نمایش سبد خرید کد دیگری هم وجود داره؟ تقریبا همین یه مدل رو دیدم
هر کسی بخواد بنویسه یه جور مینویسه
پس کلی از این کد ها میتونه موجود باشه Smile
کلیتش همینه
این اومده کوئری زده و اسم محصولات رو از دیتابیس واکشی کرده
همونو میتونست تو session قرار بده و نیازی به موئری دوباره نبود یعنی یه کار اضافه صورت گرفته
اگر بخواد ببینه که آن محصول از دیتابیس حذف شده یا نه میتونه از این روش استفاده کنه
ولی همون طور که تو کدها مشاهده میکنید session دوباره مقدار دهی نمیشود یعنی کاری به حذف بودن یا نبودن محصول نداره
پس این کارش بیهوده صورت گرفته
  پاسخ
تشکر شده توسط : a76205
#5
(۱۳۹۳ مرداد ۱۶, ۱۰:۳۶ ب.ظ)saeideng نوشته: هر کسی بخواد بنویسه یه جور مینویسه
پس کلی از این کد ها میتونه موجود باشه Smile
کلیتش همینه
این اومده کوئری زده و اسم محصولات رو از دیتابیس واکشی کرده
همونو میتونست تو session قرار بده و نیازی به موئری دوباره نبود یعنی یه کار اضافه صورت گرفته
اگر بخواد ببینه که آن محصول از دیتابیس حذف شده یا نه میتونه از این روش استفاده کنه
ولی همون طور که تو کدها مشاهده میکنید session دوباره مقدار دهی نمیشود یعنی کاری به حذف بودن یا نبودن محصول نداره
پس این کارش بیهوده صورت گرفته

فکر میکنم نمیتونم براحتی ساخت فروشگاهو یاد بگیرم. خیلی مشکله ساختش یا ایراد از منه ؟ Big Grin انواع فیلمارو دانلود کردم ولی یجایی کم میارم..

داخل کد بالایی که قرار دادم وقتی محصولی را به سبد اضافه میکنم و صفحه رو رفرش میکنم دوباره بهش اضافه میشه. از چه روشی بغییر از header استفاده کنم تا جلوشو بگیرم
  پاسخ
تشکر شده توسط :
#6
کدهای PHP رو بالاتر از بقیه کدها بزار و با شرط های کنترلی اون کدها رو چک کن که در چه صورتی اجرا بشن.
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#7
تمامی کدهارو بالا نوشتم. توی کنترل تشخیص آیدی خیلی مشکل پیدا کردم. وقتی میخوام از محصولات اضافه شده کم کنم، فقط روی اولین محصول کلیک شده کسر شدن تعداد اعمال میشه و اگر روی یکی دیگه از محصولات کلیک کنم ( remove ) بازم از اون اولیه کم میشه!

کد پی‌اچ‌پی:
<p>

<?
php
if (isset($_SESSION['cart'])){
$sql " SELECT * FROM products WHERE id IN (";
foreach(
$_SESSION['cart'] as $id => $value){
    
$sql .= $id ",";
}
$sql substr($sql,0,-1) . ") ORDER BY id ASC";
$query mysql_query($sql);
while(
$row mysql_fetch_assoc($query)){
?>
<p> <?php echo $row['name']; ?> <?php echo $_SESSION['cart'][$row['id']]['quantity']; ?> <a href="index.php?page=products&action=remove&id=<?php echo $id?>"> Remove </a> </p>
<?php
    
}
}
else{
echo 
"your  cart is empty";
}
?>

<?php
if (isset($_GET['action']) && ($_GET['action'] == "empty")){
    unset(
$_SESSION['cart']);
    
header("location: index.php");
}
?>

<?php
if (isset($_GET['action']) && ($_GET['action'] == "remove")){
    
$id_products intval($_GET['id']);
        if(isset(
$_SESSION['cart'][$id_products])){
            
$_SESSION['cart'][$id_products]['quantity']--;
        }
}
?>

<a href="index.php?page=products&action=empty"> Empty </a>
</p> 
  پاسخ
تشکر شده توسط :
#8
کد قسمتی رو که لینک کاهش داره رو هم بگذار!
اگه هر کدوم رو میزنی فقط از اولی کم می کنه معلومه احتمالا ایراد از قسمتی هست که دکمه کاهش رو گذاشتی..
  پاسخ
تشکر شده توسط : a76205
#9
نکته ای که رعایت نمیکنید:
قبل از تابع header هیچ خروجی نباید چاپ بشه حتی یک کاراکتر فاصله یا اینتر اگه رعایت نکنید حتما به مشکل خواهید افتاد
  پاسخ
تشکر شده توسط : a76205
#10
(۱۳۹۳ مرداد ۱۸, ۰۱:۲۲ ب.ظ)saeideng نوشته: نکته ای که رعایت نمیکنید:
قبل از تابع header هیچ خروجی نباید چاپ بشه حتی یک کاراکتر فاصله یا اینتر اگه رعایت نکنید حتما به مشکل خواهید افتاد

میشه دقیقا بگین کجاش. رعایت نکردم؟ خروجی چاپ نمیشه بعد header کردنم

(۱۳۹۳ مرداد ۱۸, ۱۲:۵۰ ب.ظ)mo_ali_2005 نوشته: کد قسمتی رو که لینک کاهش داره رو هم بگذار!
اگه هر کدوم رو میزنی فقط از اولی کم می کنه معلومه احتمالا ایراد از قسمتی هست که دکمه کاهش رو گذاشتی..
دکمه کاهش فکر نمیکنم مشکل خاصی داشته باشه چون بصورت get داره ارجاع داده میشه و فقط یک لینک هست

کد پی‌اچ‌پی:
<?php     include_once("config.php");   ?>
<?php
    
if(isset($_GET['action']) && ($_GET['action'] == "add")){
        
$id intval($_GET['id']);
        if(isset(
$_SESSION['cart'][$id])){
            
$_SESSION['cart'][$id]['quantity']++;
        } else{
          
$query "SELECT * FROM products WHERE id={$id}";
          
$query mysql_query($query);

          if(
mysql_num_rows($query) != 0){
            
$row2 mysql_fetch_array($query);
            
$_SESSION['cart'][$row2['id']] = array("quantity" => 1"price" => $row2['price']);
          } else{
            
$message "this product id is invalid";
          }
       }
    }
?>

<h1> Product List</h1>
      <?php
        
if(isset($message)){
            echo 
$message;
        }
      
?>
<table border="1" width="650">
    <tr>
    <td width="150">Name</td>
    <td width="250">Description</td>
    <td width="100">Price</td>
    <td width="150">Action</td>
    </tr>
<?php
    $show 
mysql_query("SELECT * FROM products");
    while(
$row mysql_fetch_assoc($show)){
?>
    <tr align="center">
    <td><?php echo $row['name']; ?></td>
    <td><?php echo $row['description']; ?></td>
    <td><?php echo $row['price']; ?></td>
    <td><a href="index.php?page=products&action=add&id=<?php echo $row['id']; ?>">Add To Cart</a></td>
    </tr>

<?php ?>
</table>

<?php include("cart.php"); ?>
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان