Cum socotesc pretul total a produselor scoate din baza de date

Poza cu tabelul mai jos :

se da codul :

<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'pizza';
$userdb = 'root';
$passdb = '';

try {
  // Conectare si creare obiect PDO
  $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
  $dbh->exec("SET CHARACTER SET utf8");      // Setare encoding caractere UTF-8

  // Selectare date din MySQL
  $sql = "SELECT c.* , p.*, a.* FROM orders c,order_items p,products a WHERE c.id=p.order_id and c.id='".$id_com."' and a.id=p.product_id ORDER BY `p`.`id` DESC";
  $datas = $dbh->query($sql);

  // Se parcurg datele si le afiseaza
  while($row = $datas->fetch(PDO::FETCH_ASSOC)) {
	  $pret=$row['price']*$row['quantity'];
	$cantitate = $row['quantity'];
   $cantitate=str_replace('1',"O",$cantitate);
	   echo '<tr>
                <td>'.$row['order_id']. '</td> 
                <td>'. $row['name']. 'cm</td>
				<td>'. $cantitate. ' pizza</td>
				<td>'. $row['price']. 'x'. $row['quantity']. '='. $pret. ' LEI</td>
            </tr>';
      
  }

  $dbh = null;        // Deconectare
}
catch(PDOException $e) {
  echo $e->getMessage();
}
?>

Valoarea fiecarei comenzi, sau valoarea tuturor comenzilor?

E o singura comanda acolo si mai multe produse . am folosit

$total_price = 0;
  // Se parcurg datele si le afiseaza
  while($row = $datas->fetch(PDO::FETCH_ASSOC)) {

si

<td>'. $row['price']. 'x'. $row['quantity']. '='. $pret. ' LEI '.$total_price += $pret. '</td>

Imi apare pretul adunat dupa fiecare produs, dar eu vreau un pret final si atat … nu asa cum poti vedea in imaginea de mai jos

Folosesti acea variabila $total_price pe care inteleg ca ai initializat-o cu valoarea 0. Apoi, la fiecare iteratie, incrementezi variabila cu valoarea rezultatului operatiei pret * cantitate. La finalul tabelului afisezi valoarea $total_price.

Daca pun codul

echo "<b><h3>Pret final : ".$total_price += $pret."</h3></b>";

Inafara while($row = $datas->fetch(PDO::FETCH_ASSOC)) {

Pretul este 310 , adica mai aduna odata ultimul produs cu pretul final!

In afara while(), dupa el, mai exact, afisezi direct $total_price, nu aduni din nou $pret.

Mersi mult , asa este !

Folosește obiecte ar fi sugestia mea, fiecare produs va fi un obiect luat din baza de date, aici e super util pdo. (în loc de row îți scoate direct obiecte gen $produs[SKU]->cantitate sau $produs[SKU]->pret)
Nu fă niciodată operații la afișare, am făcut de prea multe ori greșeala aceasta la început.

Aproape fiecare platformă de ecommerce funcționează în următorul fel :

  • Produsele sunt obiecte care au proprietăți, gen preț, culoare, imagine, cod de bare, iar ID-ul în baza de date va fi SKU-ul (stock keeping unit) care trebuie să fie unic. (cel puțin intern, după o să ai un tabel separat al furnizorilor cu SKU-uri externe)
  • Coșul de cumpărături este doar un array în care se adaugă [[sku1,nr],[sku2,nr]], să numim acest array cart.
  • Comanda va fi un array al tuturor obiectelor din coș la sku-uri salvat în baza de date + numărul facturii + data fiindcă trebuie să salvezi prețul curent și detaliile comenzii care se vor schimba în timp.
  • Pagina pe care vezi coșul de cumpărături va rula o funcție recursivă cu total(subtotal) și eventual un applyCoupon(total).
2 Likes