Objednávkový minishop v PHP

25. prosince 2002

Začít něco prodávat pomocí své stránky můžeme s minimem příprav téměř ihned. Jednou z možností je hromadit objednávky v mailu a zboží rozesílat na dobírku. Tentokrát se ale dobírce vyhneme tak, že necháme zákazníka zaplatit předem a zboží mu doručíme poštou nebo jinak až po doručení platby na náš účet. Ušetříme tím za vyšší poštovné, které je pro prodávání drobností omezující položkou.

Dobírce se sice vyhneme, ovšem z důvodu platby předem se tento systém hodí tam, kde máme určitou komunitu, která věří, že jim po zaplacení nepošleme zabalenou cihlu, nebo tam, kde třeba naši předchozí zákazníci dobře referují o naší službě. Prostě tam, kde o nás zákazníci alespoň něco vědí a důvěřují nám. Je to daň za laciné řešení, ovšem pokud máme například server pro chovatele králíků, kteří se pak většinou znají z našeho diskusního fóra, a chceme jim nabídnout k objednání hrníček s logem nebo tričko, je nejspíš zbytečné budovat robustní e-shop.

Základem úspěšnosti našeho e-shopu je snadnost použití, žádné komplikované „Pokud si chcete objednat, napište na bla bla bla…“. Tento obchod bude opravdu jednoduchý, a tak si vystačí i bez databáze. Objednávky nám budou chodit mailem a pokud s nimi nebudeme pracovat přímo v poštovním programu, ručně si je z poštovního programu přeneseme do nějaké zvláštní složky (například z Outlook Expressu je lze ukládat jako soubory *.eml nebo i *.txt).

  • Zákazník si vybere zboží, zvolí počet kusů, vyplní kontaktní údaje (adresu pro doručení a svůj email) a objedná.
  • Při objednání mu systém zobrazí instrukce, jak má dále postupovat při placení.
  • Na náš e-mail a na ten, který zadal, bude odeslána objednávka s údaji o objednaném zboží, počtu kusů, celkové ceně, číslu účtu a variabilním symbolu pro platbu.
  • Jakmile na náš účet dorazí platba od zákazníka (poznáme podle variabilního symbolu a částky, která nám došla v objednávce), pošleme zákazníkovi zboží.

Podívejte se na ukázkun objednávky zaslané e-mailem (údaje zákazníka jsou smyšlené):

Tričko Králíci.cz
Objednal: Petr Plšek
Adresa: Pampelišková 812, Pohořelice 691 23
Email: plsik@neznam.cz
Počet kusů: 1    Cena: 289,- Kč
Uvedenou částku zašlete na účet 152153154/0600
Variabilní symbol: 0210302104
Potreboval bych jej do 25.11.2002. Dekuji moc.
Zasláno z e-shopu na http://www.kralici.cz/

V zaslaném e-mailu vidíme jak my, tak zákazník, jaké zboží si objednal, kolik kusů a kam má zboží zaplatit. Na konci je ještě vidět poznámka, kterou náš minishop umožňuje připojit. To je dostatečné pro uskutečnění obchodu. Zákazník ví, jak a kolik má zaplatit, my víme, komu po obdržení platby zboží poslat.

Aby byla objednávka zboží opravdu snadná a neodrazovala zákazníka, připravíme si „chytrý“ formulář, který bude sám počítat cenu podle počtu kusů, případně je možné zahrnout i nějaký algoritmus na počítání množstevní slevy. Zároveň doplníme kontrolu, zda jsou vyplněny všechny povinné údaje. Můžete se také podívat na ukázku simulace minishopu (odesílání mailu je zakomentováno, objednávka se pouze zobrazuje). Samozřejmě si můžete stáhnout i hotový zdrojový kód.

<script type=“text/javascript“>
<!–
function Recount(theform)
{
  var celkcena = 0 
  var floop = true 
  for( var i=1; floop; i++ )
 {
    kusu = eval(„theform.ks“ + i )
      if(kusu)
     {
        if( isNaN(parseInt(kusu.value)) )
        {
          kusu.value = „“
        }
        else
        {
          kusu.value = parseInt(kusu.value)
          celkcena += (279 * kusu.value + 10)
         }
     }
     else
     {
       floop = false
     }
  }
  theform.cena.value = celkcena

function Validate(theForm)
{
  for(var i=0; i<theForm.length; i++ )
  {
    with(theForm.elements[i])
    { 
      if( type==“text“ )
      {
        if( value.length==0)
        {
          alert(‚Zadejte potřebné údaje!‘);
          focus();
          return false; 
        }
      }
    }
  }
  return true;

// –>
</script>
<form method=“POST“ action=“ordtshirt.php“ name=“tshirt“ onsubmit=“return Validate(this)“>
Jméno a Příjmení: <input type=“text“ name=“adr_name“ size=“40″ /><br />
Adresa (ulice, město, psč):<br />
<input type=“text“ name=“adr_loc“ size=“50″ /><br />
počet triček
<select name=“ks1″ onchange=“Recount(this.form)“>
  <option value=“1″ selected>1
  <option value=“2″>2
  <option value=“3″>3
  <option value=“4″>4
  <option value=“5″>5
  <option value=“6″>6
  <option value=“7″>7
  <option value=“8″>8
  <option value=“9″>9
  <option value=“10″>10
  <option value=“20″>20
  <option value=“30″>30
  </select> &nbsp;&nbsp;cena <input type=“text“ id=“cena“ size=“7″ value=“289″ readonly> Kč &nbsp; velikost XL<br />
email: <input type=“text“ name=“from“ size=“22″> <input type=“checkbox“ name=“t_copy“ value=“1″ checked>zaslat kopii<br />
poznámka:<br/ ><textarea name=“commt“ rows=“4″ cols=“42″></textarea><br />
<input type=“submit“ value=“ Objednat “ />
<input type=“submit“ name=“printord“ value=“Objednat a vytisknout“ />
</form>
<ul>
<li>Platba (konečná cena včetně DPH a poštovného) se provádí po objednání na účet číslo <b>153154155/0600</b> (GECB).</li>
<li>Po odeslání objednávky systém sdělí veškeré potřebné údaje pro zaplacení.</li>
<li>Jako variabilní symbol použijte pouze číslo, které Vám náš obchod automaticky přidělí!</li>
<li>Při objednání více triček je cena každého dalšího již jen 279,-&nbsp;Kč.</li>
<li>V případě jakýchkoli nejasností napište na <a href=“mailto:tshirts@kralici.cz“>tshirts@kralici.cz</a>.</li>
<li><b>Dodací lhůta je 14 dní od obdržení platby na účet.</b></li>
<li><b>Vyplňujte prosím své údaje pečlivě, zejména adresu!</b></li>
<li>Trička zasíláme prozatím pouze v rámci České republiky.</li>
<li>Pokud byste chtěl(a) zaplatit a vyzvednout tričko osobně v Brně nebo Praze, napište to společně se svým telefonním číslem do poznámky – ozveme se Vám a domluvíme termín předání. Peníze pak není třeba zasílat.</li>
</ul>

Zákazník si může ve formuláři zvolit, zda chce zaslat kopii objednávky, ve výchozím stavu je tato volba zatržená. Objednání je možné dvěma tlačítky, při volbě druhým z nich se po objednání rovnou nabídne objednávka k vytištění. Na konci formuláře je ještě připojena nápověda, aby zákazník věděl, „do čeho jde“. Pole formuláře jsou doplněny o VCard name, pokud má zákazník aktivní volbu autocomplete a má vyplněn svůj profil, budou se mu do políček nabízet údaje z jeho profilu.

Odeslaný formulář nám zpracuje jednoduchý skript – v podstatě jen zformátuje zadané údaje do mailu a ten odešle, případně nabídne objednávku k vytištění.

<h2>Tricko Králíci.cz objednáno</h2>
<?php
$cena=(279*$_POST[‚ks1‘])+10; // vypočítat cenu
$var_symb=date(‚ymdHi‘);  // vypočítat variabilní symbol
function CZMail($to, $subjc, $text, $froma)
{ // funkce pro posílání e-mailu s češtinou
$headers = „MIME-Version: 1.0\n“.
„Content-Type: text/plain; charset=\“iso-8859-2\“\n“.
„Content-Transfer-Encoding: none\n“.
„From: $froma\n“.
„Reply-To: $froma\n“;
Mail($to, $subjc, $text, $headers); // poslat mail objednávky s potřebnými hlavičkami
}
$tord_body=“Tricko Králíci.cz\n\nObjednal: „.$_POST[‚adr_name‘].“\nAdresa: „.$_POST[‚adr_loc‘].“\nEmail: „.$_POST[‚from‘].“\n\nPocet kusu: „.$_POST[‚ks1‘].“ Cena: „.$_POST[‚cena‘].“,- Kc\n“;
$tord_body.=“Uvedenou cástku zašli na úcet 1521531254/0600\n“;
$tord_body.=“Variabilní symbol: $var_symb\n\n“.$_POST[‚commt‘].“\n\n\nZasláno z e-shopu na http://www.kralici.cz/“;
$where_mail=“tshirts@kralici.cz“; // adresa pro příjem objednávek
if ($_POST[‚t_copy‘]==“1″) // zaslat kopii objednávky na mail zákazníka
  $where_mail.=“ „.$_POST[‚from‘];
CZMail($where_mail, „Tricko Kralici.cz $var_symb“, $tord_body, $_POST[‚from‘]); // připravit mail k odeslání
// opsat objednávku na obrazovku
echo „Objednal: „.$_POST[‚adr_name‘].“&nbsp;&nbsp;[„.$_POST[‚from‘].“]<br />\n“;
echo „Adresa: „.$_POST[‚adr_loc‘].“<br />\n“;
echo „Počet kusů: „.$_POST[‚ks1‘].“&nbsp;&nbsp;&nbsp;Cena: $cena,- Kč<br />\n“;
echo „<b>Var. symbol:</b> $var_symb<br /><br />\n“;
if ($_POST¨[‚t_copy‘]==“1″)
  echo „Kopie objednávky byla zaslána na Váš email<br />\n“;
echo „<p><b><big>Zašlete uvedenou částku $cena,-Kč na úcet 152153154/0600 (GECB), jako variabilní symbol použijte $var_symb.</big></b></p>“;
echo „<ul><li><b>Po obdržení platby bude nejdéle do 14 dnů objednané zboží zasláno na Vaši adresu.</b></li><li><b>Děkujeme za Váš nákup :)</b></li></ul>“;
?>
<script type=“text/javascript“>
<!–
function printWindow()
{ // otevřít okno pro zobrazení objednávky k vytištění
  window.open(“,’print‘, ‚toolbar=no,menubar=no,location=no,directories=no,
scrollbars=yes,resizable=yes,status=yes,width=600,height=440′);
}
// –>
</script>
<!– skrytý formulář pro tisk –>
<form name=“prt1″ id=“prt1″ action=“shop3.php“ method=“post“ target=“print“ onsubmit=“printWindow()“>
<input type=“hidden“ id=“adr_name“ name=“adr_name“ value=“<?php echo $_POST[‚adr_name‘] ?>“ />
<input type=“hidden“ id=“adr_loc“ name=“adr_loc“ value=“<?php echo $_POST[‚adr_loc‘] ?>“ />
<input type=“hidden“ id=“from“ name=“from“ value=“<?php echo $_POST[‚from‘] ?>“ />
<input type=“hidden“ id=“ks1″ name=“ks1″ value=“<?php echo $_POST[‚ks1‘] ?>“ />
<input type=“hidden“ id=“cena“ name=“cena“ value=“<?php echo $cena ?>“ />
<input type=“hidden“ id=“var_symb“ name=“var_symb“ value=“<?php echo $var_symb ?>“ />
<input type=“hidden“ id=“commt“ name=“commt“ value=“<?php echo $_POST[‚commt‘] ?>“ />
<input type=“submit“ value=“Tisk objednávky“ />
</form>
<?php if (isset($_POST[‚printord‘])) { ?>
<script type=“text/javascript“>
<!–
printWindow();
self.document.forms.prt1.submit(); // vyvolá odeslání formuláře s údaji pro tisk
// –>
</script>
<?php } ?>

Skript vypočítá cenu (podle počtu kusů) a určí variabilní symbol, který je vytvořen jako aktuální datum a čas. Dále je připraven e-mail objednávky k odeslání. Pokud zákazník ponechal zatrženo odesílání kopie na svůj e-mail, je jeho adresa přidána k adrese, na kterou se následně e-mail pošle. K odeslání je použita funkce, která nastaví správné hlavičky, aby bylo vše doručeno správně česky.

Po odeslání e-mailu následuje opsání objednávky na obrazovku. Na konci skriptu je potom formulář se skrytými položkami, který nám podrží informace objednávky pro předání do dalšího okna, které je určeno pro tisk objednávky. Tisk může zákazník vyvolat kdykoli stiskem tlačítka ve formuláři. Pokud kliknul ve formuláři objednávky na „Objednat a vytisknout“, pak se formulář odešle sám, čímž rovnou vyskočí nové okno pro tisk. Toto okno pro tisk se otevírá dopředu ještě před odesláním formuláře JavaScriptem, aby bylo možné nastavit vlastnosti (velikost a potlačení menu a adresního řádku prohlížeče).

Posledním doplňkem je už jen krátký skript, který zobrazí objednávku pro tisk a je-li to možné, přímo vyvolá dialog pro tisk:

<h2><b>Objednávka zboží</b></h2>
<p>
<table width=“500″ border=“1″ cellpadding=“5″ cellspacing=“0″ bordercolor=“#000000″>
<tr>
<td align=“right“ nowrap><b><i>Objednal</i></b></td>
<td><?php echo $_POST[‚adr_name‘] ?>&nbsp;&nbsp;&nbsp;[<?php echo $_POST[‚from‘] ?>]</td>
</tr>
<tr>
<td align=“right“ nowrap><b><i>Adresa</i></b></td>
<td><?php echo $_POST[‚adr_loc‘] ?></td>
</tr>
<tr>
<td align=“right“ nowrap><b><i>Kusů</i></b></td>
<td><?php echo $_POST[‚ks1‘] ?></td>
</tr>
<tr>
<td align=“right“ nowrap><b><i>Cena</i></b></td>
<td><?php echo $_POST[‚cena‘] ?></td>
</tr>
<tr>
<td align=“right“ nowrap><b><i>Var. symbol</i></b></td>
<td><?php echo $_POST[‚var_symb‘] ?></td>
</tr>
<tr>
<td align=“right“ valign=“top“ nowrap><b><i>Poznámka</i></b></td>
<td><?php echo $_POST[‚commt‘] ?></td>
</tr>
<tr>
<td colspan=“2″>
<ul>
<li><b>Po obdržení platby bude nejdéle do 14 dnů objednané zboží
zasláno na Vaši adresu</b></li>
</ul>
</td>
</tr>
</table>
<ul>
<li>Zašlete uvedenou částku <?php echo $_POST[‚cena‘] ?>,-Kč na účet 152153154/0600 (GECB), jako variabilní symbol použijte <?php echo $_POST[‚var_symb‘] ?></li>
<li>Děkujeme za Váš nákup :)</li>
</ul>
<script type=“text/javascript“>
<!–
window.focus()
if (window.print)
  window.print()
else
  alert(‚Pro vytisknutí stiskněte CTRL-P!‘)
// –>
</script>

Pro skutečné nasazení je potřeba si pozměnit všechny vyznačené údaje. Hodilo by se je mít přednastavené v nějaké proměnné, což jsem pro přehlednost a názornost vynechal. Je zřejmé, že se tento princip nehodí pro obchod s desítkami položek zboží. Pro několik druhů zboží si však skripty lehce upravíme a můžeme mít jednoduchý e-shop prakticky zdarma i na freehostingu.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Předchozí článek cs.airsofthouse.cz
Další článek CSS2 - pravidlo stránky
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

7 komentářů

  1. nika

    Dub 6, 2011 v 16:26

    paci sa mi stranka

    Odpovědět
  2. Marek

    Čvn 7, 2011 v 18:05

    Dobrý deň,

    Všetko funguje až na to, že neodosiela email. Nemám tušenie kde môže byť chyba.

    Odpovědět
  3. M.M.

    Čvn 25, 2011 v 10:11

    Stačí více číst,než stahovat.viz.“(odesílání mailu je zakomentováno, objednávka se pouze zobrazuje)“. Tzv.zakomentování si už ve scriptu najdeš sám,viď.Autorovi děkuji za minishop.Pomohl mi.Děkuji

    Odpovědět
  4. M.M.

    Čvn 25, 2011 v 10:25

    Nic si z toho nedělej,já zase neumím hledat a to ani za pomocí google.Již dávno tomu,co jsem někde viděl podobně jednoduchý shop,jen mohl mít více položek k prodeji,třeba 10,takový ten zaškrtávací seznam na jedné stránce.A dnes,ať hledám jak chci,nic!Pokud náhodou někdo znáte,budu vděčnej.E-mail:eb-mraz(nakládaná ryba)inMail.cz

    Odpovědět
  5. Risek

    Dub 19, 2012 v 23:05

    Mě to taky nefunguje … nevim jestli to nemůže být tím, že je to uš hodně starý script. Zkoušel sem oddělat zakomentování, ale furt to nefunguje …

    Odpovědět
  6. Risek

    Dub 19, 2012 v 23:08

    Aha zkoušel sem to na jinym hostingu a tam to funguje … mě to funguje na webzdarma.cz a na endora.cz to nejde …

    Odpovědět
  7. michal

    Bře 18, 2014 v 21:48

    ahoj, děkuji za tento super scriptík…nejsem programator a sam bych to dokupy nedal…ale tedka jsem to už ovládl, trvalo mi najít kde je to zakomentované ten posílací aparát a taky mě zlobí že ikdyž do mailu mi to posílá správnou vypočítanou cenu změněnou tak po stisknutí objednat to pořád počítá vaše králičí ceny což me sere nemožu najít kde to je :D…

    jinak co sem píšete že na nekterym hostingu to jde ana nekterym ne to bude asi tim že musite hledat hodting kterej podporuje PHP což každej není :)

    Odpovědět

Napsat komentář: Marek Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *