Autor Zpráva
majja01
Profil
ahoj dělám takový jednoduchý e-shop a skončil jsem u vypisování zboží v košíku.
potřebuji udělat součet všech cen. ale problém je v tom že některé zboží je vícekrát:
tak jsem to vyřešil takto:
$ks = htmlspecialchars($row["name"]) . " " . $_SESSION["kosik"][$row["id"]];
        $soucet = $row["price"] * $ks;
        echo $soucet;
toto funguje bezvadně ale když mám sečíst všechny ceny dohromady
 $soucet = $soucet + $soucet;
 echo $soucet ;
 
sečte to jenom poslední číslo dohromady.
cena:
200kč
300kč
sečte to 600kč místo 500kč nevíte někdo co s tím ?
díky za odpovědi
Kajman
Profil
Pro součet jednoho řádku a součet všech řádků používejte jinak nazvané proměnné.
majja01
Profil
 $vysledek = $soucet + $soucet;
 echo $vysledek ;
ale furt to sčítá ty dvě poslední :(
Taps
Profil
majja01:
zkus

<?
$celkem += $soucet;
echo $celkem;
?>
Alphard
Profil
Jestli výsledky vypisujete v nějakém cyklu, bude nejjednodušší postupně přičítat cenu k nějaké proměnné;

$celkova = 0;
foreach (...)
{
  $celkova += $soucet;
}

Mimochodem, jste si jistý, že je rozumné dělat hned eshop? Doufám, že ho nechcete reálně nasadit...
majja01
Profil
Taps:
nn furt to samé
Alphard
myslwl jste něco takového?
 $celkova = 0;
foreach ($soucet as $pole)
{
  $celkova += $soucet;
}
ukazuje to chybu: Warning: Invalid argument supplied for foreach() in D:\phpvirtual\mak\objednavka.php on line 56
Mimochodem, jste si jistý, že je rozumné dělat hned eshop? Doufám, že ho nechcete reálně nasadit...
já se na něm učím php a navíc ten eshop je jen v session
Taps
Profil
majja01:
zkus sem vložit větší část kodu. Z té části kterou jsi sem vložil se jen velmi špatně odhaduje chyba.
majja01
Profil
Taps:
tady to je

<?  
  // připojení do databáze
  mysql_connect("127.0.0.1", "root", "");
mysql_select_db("mak"); 
mysql_query("SET CHARACTER SET utf8");
mysql_set_charset('utf8');
  
session_start();
if ($_SESSION["kosik"]) {
    $sql = mysql_query("SELECT id, nazev, price FROM zbozi WHERE id IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')");
    while ($row = mysql_fetch_array($sql)) {
        $ks = htmlspecialchars($row["name"]) . " " . $_SESSION["kosik"][$row["id"]];
        $soucet = $row["price"] * $ks;
        //tady je vypsání do tabulky 
  
}
 
   
}




 $celkova = 0;
foreach ($soucet as $celkova)
{
  $celkova += $soucet;
}
echo $celkova;

// toto je sečtení položek (kusů)
$s = $_SESSION["kosik"];
$kss = array_sum($s);

     
     echo "<tr><td>celkově</td><td>&nbsp;</td><td>".$kss."</td><td>&nbsp;</td><td>".$kcc."</td><td>&nbsp;</td></tr>";   
     ?>
xROAL
Profil
Skús to takto:
$celkem = 0;
while($row = mysql_fetch_array($sql)){
  $ks = htmlspecialchars($row["name"]) . " " . $_SESSION["kosik"][$row["id"]];
  $soucet = $row["price"] * $ks;
  $celkem += $soucet;
  // vypísanie tabuľky
}
echo $celkem; // celková suma

Premenná $soucet obsahuje vždy len jedno číslo. Každý ďalší beh cyklu ho prepíše na cenu ďalšieho tovaru a tak na konci cyklu tam bude vždy len cena posledného tovaru.
majja01
Profil
xROAL:
aha
díky moc už to funguje
majja01
Profil
Teď mám ještě podobný problém když pošlu $row["name"];
přes GET na jinačí stránku.(poslání na email)
tak to vypíše jenom poslední hodnotu
a tady už nefunguje to co psal xROAL
Taps
Profil
majja01:
Podle mě by bylo ideální pracovat s polem a pak data poslat přes
<?
$_POST
?>
majja01
Profil
Taps:
jo já to tak chtěl mít já vždy první dávám GET abych zjistil jestli to vůbec funguje.
a potom teprve dám POST

Podle mě by bylo ideální pracovat s polem
zkoušel jsem odeslat pole ale vypsalo to jen array
$pole = array("neco", "neco", "neco");
jo mimichodem jak udělat z mysql sloupce pole
Taps
Profil
majja01:
Pole musíš odeslat přes formulář. Bude opět lepší když uvidíme konkrétní kod
majja01
Profil
Taps:
<? $pole = array("neco", "neco, "neco"); ?>
<form method="post" action="zpracovani.php">
<input type="hidden" name="text" value="<? echo $pole ?>">
<input type="sumbit" value="odeslat">
Taps
Profil
majja01:
To je špatný postup. Do formulářového pole musíš dostat $row['name'];
majja01
Profil
to jsem taky zkusil a nic to nezobrazí jenom když to dám do promené $nazev : $nazev = $row["nazev"];
ale to pak vypíše jenom poslední hodnotu
Taps
Profil
majja01:
To bude podobný problém jako u předchozího kodu. Vlož jsem kod, kterým získáváš $row['nazev'];
majja01
Profil
if ($_SESSION["kosik"]) {
    $sql = mysql_query("SELECT id, nazev, price FROM zbozi WHERE id IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')");
  
while($row = mysql_fetch_array($sql)) {
echo $row["nazev"];
}}
pokusil jsem se vložit formulář pod vypsání z mysql a vypsalo to hodně tlačítek podle počtu jmen.
Každé dalo jinou promennou do text
Taps
Profil
majja01:
<?
if ($_SESSION["kosik"]) {
    $sql = mysql_query("SELECT id, nazev, price FROM zbozi WHERE id IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')");
  
while($row = mysql_fetch_array($sql)) {
$nazev[]=$row["nazev"];
}}
?>
a pak
<form method="post" action="zpracovani.php">
<input type="hidden" name="text" value="<? echo implode(',',$nazev); ?>">
<input type="sumbit" value="odeslat">
majja01
Profil
Taps:
ahá IMPLODE o tom si musím něco přečíst už dvakrát mě to zachránilo :D mockrát díky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: