PROBLEMA PHP: shopping cart vuota cliccando aggiungi al carrello

mariade

Nuovo Utente
20
1
Come da titolo, ho il problema che quando cerco di aggiungere un prodotto al carrello, mi appare una finestra con messaggio che e' stato aggiunto, ma in realta' nella tabella del cart non c'e'.
Mi da anche il seguente errore: Fatal error: Cannot use object of type stdClass as array .

La linea di codice e': <td><?php echo $value['item_name']; ?></td>

Vi posto tutto il codice che si trova nel file reserve.php :
Codice:
<?php

session_start();
ini_set('display_errors', 1);
$connect = mysqli_connect('127.0.0.1', 'root', '***********', 'Community Garden List');


if (isset($_POST['add'])) {
   if (isset($_SESSION['cart'])) {
       $item_array_id = array_column($_SESSION['cart'], 'product_id');
       if (!in_array($_GET['id'], $item_array_id)) {
           $count = count($_SESSION['cart']);
           $item_array = array(
               'product_id' => $_GET['id'],
               'item_name' => $_POST['hidden_name'],
               'product_price' => $_POST['hidden_price'],
               'item_quantity' => $_POST['quantity'],
           );
           $_SESSION['cart'][$count] = $item_array;
           echo '<script>window.location="reserve.php"</script>';
       } else {
           echo '<script>alert("Product is already Added to Cart")</script>';
           echo '<script>window.location="reserve.php"</script>';
       }
   } else {
       $item_array = array(
           'product_id' => $_GET['id'],
           'item_name' => $_POST['hidden_name'],
           'product_price' => $_POST['hidden_price'],
           'item_quantity' => $_POST['quantity'],
       );
       $_SESSION['cart'][0] = $item_array;
   }
}

if (isset($_GET['action'])) {
   if ($_GET['action'] == 'delete') {
       foreach ($_SESSION['cart'] as $keys => $value) {
           if ($value['product_id'] == $_GET['id']) {
               unset($_SESSION['cart'][$keys]);
               echo '<script>alert("Product has been Removed...!")</script>';
               echo '<script>window.location="reserve.php"</script>';
           }
       }
   }
}
?>

   ?>
html code
Codice:
 <?php

   $query = 'SELECT * FROM product ORDER BY serial ASC';
   $result = mysqli_query($connect, $query);

   if (mysqli_num_rows($result) > 0) {
       while ($row = mysqli_fetch_array($result)) {
           ?>
           <div class="col-md-4">
           <form method="post" action="reserve.php?action=add&id='.$row['id'].">
           <div style="border: 1px solid #eaeaec; margin: -1px 19px 3px -1px; box-shadow: 0 1px 2px rgba(0,0,0,0.05); padding:10px;" align="center">

               <img src="<?php echo $row['image']; ?>" class="img-responsive" style="width:100%;>
           <h5 class="text-info"><?php echo $row['pname']; ?></h5>
           <h5 class="text-danger">€ <?php echo $row['price']; ?></h5>
           <h5 class="text-info"><?php echo $row['pdescription']; ?></h5>
           <input type="text" name="quantity" class="form-control" value="1">
           <input type="hidden" name="hidden_name" value="<?php echo $row['pname']; ?>">
           <input type="hidden" name="hidden_price" value="<?php echo $row['price']; ?>">
           <input type="hidden" name="hidden_pdescription" value="<?php echo $row['pdescription']; ?>">
           <input type="submit" name="add" style="margin-top:5px;" class="btn btn-success" value="Add to Bag">
           </div>
           </form>
           </div>
           <?php

       }
   }
   ?>

     <div style="clear: both"></div>
       <h3 class="title2">Shopping Cart Details</h3>
       <div class="table-responsive">
           <table class="table table-bordered">
           <tr>
               <th width="30%">Product Name</th>
               <th width="10%">Quantity</th>
               <th width="13%">Price Details</th>
               <th width="10%">Total Price</th>
               <th width="17%">Remove Item</th>
           </tr>

           <?php
               if (!empty($_SESSION['cart'])) {
                   $total = 0;
                   foreach ($_SESSION['cart'] as $key => $value) {
                       ?>
                       <tr>
                           <td><?php echo $value['item_name']; ?></td>
                           <td><?php echo $value['item_quantity']; ?></td>
                           <td>€ <?php echo $value['product_price']; ?></td>
                           <td>
                               € <?php echo number_format($value['item_quantity'] * $value['product_price'], 2); ?></td>
                           <td><a href="reserve.php?action=delete&id=<?php echo $value['product_id']; ?>"><span
                                       class="text-danger">Remove Item</span></a></td>

                       </tr>
                       <?php
                       $total = $total + ($value['item_quantity'] * $value['product_price']);
                   } ?>
                       <tr>
                           <td colspan="3" align="right">Total</td>
                           <th align="right">€ <?php echo number_format($total, 2); ?></th>
                           <td></td>
                       </tr>
                       <?php

               }
               ?>
           </table>
       </div>

   </div>

Ho provato a far print "<pre>"; var_dump($row); exit; dopo questa linea di codice: foreach ($_SESSION['cart'] as $key => $value) { e mi vien fuori la tabella con un text box su con dentro scritto NULL. Cosa significa?

Prima pero' ho provato a cambiare $value['item_name'] con $value->item_name , e mi vien venuto il seguente errore:

Notice: Undefined property: stdClass::$item_name in

Mi aiutate a capire come correggere uesto codice per favore?Grazie in anticipo.
 

cdtux

Utente Èlite
1,829
911
CPU
I7 3770
Scheda Madre
Asrock Z77 Extreme 4
HDD
Samsung 850 pro 250GB
RAM
Corsair Vengeance LP 16GB
GPU
Gigabyte GTX1060 6GB
Monitor
Dell U2412M
PSU
Seasonic Focus Plus 650
Case
Corsair Graphite 760T
OS
Debian / Ubuntu
Il codice che hai postato è pieno di errori.
I primi che saltano agli occhi sono il nome del db con gli spazi (che è roba che non si può vedere..) e sul form o usi tutto GET o tutto POST.
Comunque sia questa
PHP:
<form method="post" action="reserve.php?action=add&id='.$row['id'].">
è errata perchè così facendo non mandi l'id "pulito":
PHP:
<form method="post" action="reserve.php?action=add&id=<?php echo $row['id'] ?>">

Per il resto devi inizializzare la sessione in ogni file php: https://secure.php.net/manual/en/function.session-start.php
Significato di NULL
 
Ultima modifica:

mariade

Nuovo Utente
20
1
grazie, son riuscita a risolvere il problema del carrello vuoto, adesso ho il problema che aggiunge solo un prodotto e non di piu' e non me lo cancella. Dove sta l'errore secondo voi?
 

cdtux

Utente Èlite
1,829
911
CPU
I7 3770
Scheda Madre
Asrock Z77 Extreme 4
HDD
Samsung 850 pro 250GB
RAM
Corsair Vengeance LP 16GB
GPU
Gigabyte GTX1060 6GB
Monitor
Dell U2412M
PSU
Seasonic Focus Plus 650
Case
Corsair Graphite 760T
OS
Debian / Ubuntu
L'aggiunta di un solo prodotto è data dal fatto che sopra ho lasciato per strada un "echo".. sorry.. ho modificato il post, comunque ti riscrivo il codice corretto:
PHP:
<form method="post" action="reserve.php?action=add&id=<?php echo $row['id'] ?>">

In questa riga manca un " alla fine:
HTML:
<img src="<?php echo $row['image']; ?>" class="img-responsive" style="width:100%">

La connessione al db
PHP:
$connect = mysqli_connect('127.0.0.1', 'root', '***********', 'Community Garden List');
deve stare nella pagina in cui esegui la query o se è in un altro file, lo devi importare (vedi require)
 
  • Mi piace
Reazioni: mariade

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili