Autor Zpráva
Luccy
Profil *
ahojky, potřebovala by jsem poradit jakým způsobem udělat nákupní košík? respektive jak udělat aby když vygeneruji u každého produktu tlačítko aby se po kliku na dané dlačítko objevili v košíku - jde mi o to jak má script rozpoznat co ke kterému tlačítku přiřadit,

generuji tlačítko s name="button" jestli se to rozpoznápá pomocí class? nebo jak?
panther
Profil
Luccy:
name=button[id-vyrobku]
Luccy
Profil *
dobře a jak ho pak zavolám do podmínky?

if ( button[id-vyrobku]) {}

jde mi o to jestli podminka pozna ze se kliklo prave na ten button a ulozi dané proměné právě z toho formuláře?
panther
Profil
Luccy:
vypiš si var_dump($_POST) nebo var_dump($_GET) a uvidíš.

Přijde pole $_POST['button']['id-vyrobku'].
Luccy
Profil *
aha takže tedy takto?

deklarace:
$button = $_POST['button']['id-vyrobku'];

html
<input type="button" name="['button']['id-vyrobku']">

podmínka:

if ($ button) {echo $nadpis-produktu;}

?
Luccy
Profil *
Respektive jde to nějak takto?

generování
echo "<div id='umistenitlacitka' style='padding-left:45px;'><input type='submit' value='Přidat do košíku' name='button[$id_produktu]' class='button[$id_produktu]'></div></div>[pre]";

delkarace: 
$buttonkosik=$_POST(button($id_produktu));


obecná podmínka pro všechny tlačítka:
if ($buttonkosik) {
echo "<h1>";
echo $nadpis;
echo $buttonkosik;
echo "/h1";}
Luccy
Profil *
napadlo mě to udělat nějak takto:

$buttonkosik=$_POST['button'];

foreach($_POST['button'] as $button){
   if($button=='xy') {echo $button; echo 'ahoj';}
}  



ale stejně to neběží, jakto? :(((
etexweb
Profil
Toto je najjednoduchší príklad:
Funkcia():
<?php
/**
 * Basket
 *
 * Jednoduchy nakupny kosik cez SESSION
 *
 * @author   stenley <stenley@webdev.sk>
 * @version   1.1
 */

class Basket
{
   private $BASKET;   //obsah kosiku
   private $PRICE;      //cena produktov v kosiku
   
   function __construct()
   {
      if(!isset($_SESSION['basket'])) {
         $_SESSION['basket'] = array();
         $_SESSION['price'] = 0;
      }
      
      $this->BASKET = &$_SESSION['basket'];
      $this->PRICE = &$_SESSION['price'];
   }

   //prida novu polozku do kosika
   public function AddItem($itemData,$itemDataKey='')
   {
      if(empty($itemDataKey)) {
         $this->BASKET[] = $itemData;
      } else {
         if(array_key_exists($itemDataKey,$this->BASKET)) {
            $this->BASKET[$itemDataKey]['quantity'] += $itemData['quantity'];
         } else {
            $this->BASKET[$itemDataKey] = $itemData;
         }
      }
   }

   //ziska data z kosika
   public function GetData()
   {
      return $this->BASKET;
   }

   //ziska celkovu sumu kosika
   public function GetPrice()
   {
      $tmp_price = 0;

      $arrData = $this->GetData();

      foreach($arrData as $item) {
         $tmp_price += $this->SumPrice($item);
      }

      $this->PRICE = $tmp_price;

      return $this->PRICE;
   }

   //vymaze polozku z kosika
   public function DeleteItem($itemDataKey)
   {
      unset($this->BASKET[$itemDataKey]);
   }

   //spocita celkovu sumu v kosiku
   private function SumPrice($item)
   {
      $tmp_price = 0;

      if(array_key_exists("price",$item)) {
         $tmp_price += $item['price']*$item['quantity'];
      }

      return $tmp_price;
   }

   //vyprazdni kosik
   public function DeleteBasket()
   {
      $this->BASKET = array();
      $this->PRICE = 0;
   }
}
?>

Využitie:
Pre zjednodusenie budu jednotlive produkty ulozene v poli:

<?
$produkty[1] = array(
   'nazov' => 'Produkt 1',
   'popis' => 'popis k 1.produktu',
   'cena' => 30
);
$produkty[2] = array(
   'nazov' => 'Produkt 2',
   'popis' => 'popis k 2.produktu',
   'cena' => 50
);


Nasledujuci kod (ulozeny v subore index.php) spolu s polom produktov vypisuje aktualny obsah kosika, celkovu sumu produktov v kosiku, obsahuje moznost pridat jednotlive produkty do kosiku a vymazat obsah kosika:

<?
session_start();

$kosik = new Basket;

if(isset($_GET['empty'])) {
   //vymazanie obsahu kosiku
   $kosik->DeleteBasket();
   header("Location: ./");   
}

if(!empty($_GET['id']))
{
   $id = $_GET['id'];
   if(array_key_exists($id,$produkty))
   {
      //pridanie produktu (1ks) do kosiku
      $kosik->AddItem(array('title'=>$produkty[$id]['nazov'], 'price'=>$produkty[$id]['cena'],'quantity'=>1),$id);
      header("Location: ./");
   }
}
?>
<h1>Obsah kosika</h1>
<?php
foreach($kosik->GetData() as $item)
{
   echo $item['title'].' (cena: '.$item['price']*$item['quantity'].',-Sk/'.$item['quantity'].'ks)<br>';
}

echo 'Celkova cena: '.$kosik->GetPrice();
?>
<p>
<?php
foreach($produkty as $id => $produkt) {
   echo '<a href="?id='.$id.'">Pridat do kosika '.$produkt['nazov'].'</a><br>';
}
?>
</p>
<p><a href="?empty">Vymazat obsah kosika</a></p> 
etexweb
Profil
Prečo to tak zložito čítať ?

<input type="hidden" value="polozka_kod" name="009855422665" />
<?
if (is_numeric($polozka_kod)) {
//vykonanie urcitej akcie...
}else{
echo "Neplatne zadany kod!";
}
Luccy
Profil *
etexweb:
Ahojky, ale stenjě mě pořád nenapadá jak z
 <input type="hidden" value="polozka_kod" name="009855422665" />


vyčtu a vypíšu tu hodnotu name, když name tvoří cyklus?
panther
Profil
Luccy:
neznáš základy programování a snažíš se vytvořit eshop? Nechtěla bys to raději nechat někomu, kdo se v tomto oboru aspoň trochu vyzná?

když name tvoří cyklus?
pořád nevíme, zda máš pro každý produkt jeden formulář, nebo máš všechny produkty s X odesílacími tlačítky v jednom formuláři. To je docela podstatný rozdíl.

Ani nevím, jestli ti nějaká rada pomůže, vůbec nevíš, která bije. Programovat se bohužel/naštěstí nedá stylem pokus-omyl.


etexweb:
if (is_numeric($polozka_kod)) {
proměnná $polozka_kod existovat nebude. Všechny proměnné z formuláře jsou v $_POST/$_GET a spoléhat na specifické nastavení serveru... Nee, to není dobrý nápad.
Luccy
Profil *
panther:
Mám x formulářu s x tlačítky, káždý produkt má vytvořený vlastní formulář, já bojuji s tím jak udělat podmínku, která mi vypíše hodnoty z formuláře, na kterém bylo stisklo tlačítko.

konkrétně jak vypisuji formulář:

echo "<form action='web.php' method='POST'>";
		echo "<div id='produkt' style='padding:10px; float:left;'>";
		echo "<div id='produkttop' style='background-image: url(http://www.web.cz/images/produkttop.png); width:210px; height:35px;'><div style='padding:10px; font-size: 11pt;font-family: Arial, Helvetica, sans-serif;'><b>$nadpis</b></div></div>";  
		echo "<div id='teloproduktu' style='background-image: url(http://www.web.cz/images/teloprodukt.png); width:210px; height:400px;'><div id='obr' style='padding:5px; padding-left:30px;'>$obr </div>";
		echo "<div id='textprodukt' style='padding:10px; font-family: Arial, Helvetica, sans-serif;  font-size: 10pt;'>";
		echo $popis;
		echo "<B><p style='text-align: center;'>$cena ,-Kč</p></B>";
		echo "</div>";
		echo "<div id='umistenitlacitka' style='padding-left:45px;'><input type='submit' value='Přidat do košíku' name='button[$id_produktu]' class='=$id_produktu'></div></div>";
		echo "<div id='produkttop' style='background-image: url(http://www.web.cz/images/produkttop.png); width:210px; height:35px;'></div>";  
		echo "</div>";
		echo "</form>";	




no a z takto vygenerovaného tlačítka, které má vždy jiné name potřebuji zjistit jak vytvořit podmínku

if ($ POST[button][$id_produktu]) - RESPEKTIVE JAK TO ZAPSAT MEZI KULATÉ ZÁVORKY? DÍKY LUCCY
panther
Profil
Luccy:
tak pokud je to takto, tak je to jednoduché. Nepotřebuješ zjišťovat, jaký formulář jsi odeslala, odešle se jen ten jeden.

<input type=hidden name=id value=$id_produktu>
<input tpye=submit name=submit>

if (isset($_POST['submit'])) { //odeslano
  $prod_id = (int)$_POST['id'];
}

Žádné vícerozměrné pole nepotřebuješ. Stejně tak, pomocí hidden inputů, můžeš předávat např. i cenu, apod. kdybys chtěla (je to zbytečné, můžeš tahat z DB).

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0