Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Jde celý obsah webové stránky přeposlat na email?

Ahoj, konstruuji eshop, jádro(košík, produkty) už mám hotové(no, hotové, spíše stažené), ale potýkám se s jedním problémem. PHP skript mi vygeneruje hotovou www stránku, kterou bych potřeboval přeposlat na email(potvrzení objednávky). Ono by stačilo "vyexportovat" jednu tabulku, tu dát do souboru, který by byl jako příloha k emailu.
Moje představa:
Zákazník si nakliká všechno zboží, dá nákupní košík. Dále si překontroluje objednávku, dá potvrzení objednávky, vygeneruje se soubor s náhodným názvem(aby nebyly 2 stejné, o to se postará databáze jako u košíků), vyplní jméno, adresu, typ poslání atd. a email se odešle s přílohou.

Ten email s přílohou udělám, mě jde o to vyexportovat tu tabulku do souboru.

Tohle třeba vyleze z toho skriptu:

    <html>
    <head>
    <title> Nákupní košík </title>
    <script language="JavaScript">
      function updatepocet(polozka)
        {
          id = polozka.name;
          pocet = polozka.options[polozka.selectedIndex].text;

          document.location.href = 'kosik.php?action=update&id='+id+'&pocet='+pocet;
      }
    </script>
    </head>
    <body bgcolor="#ffffff">
    <h1>Nákupní košík</h1>
    <form name="frmCart" method="get">
    
















<table width="100%" cellspacing="0" cellpadding="0">
      <tr>
        <td width="15%">
          <b>Počet</b>
        </td>
        <td width="55%">
            <b>Produkt</b>
        </td>
        <td width="20%">
            <b>Cena</b>
        </td>
        <td width="10%">
            <b>Odstranit</b>
        </td>
      </tr>

            <tr>
        <td width="15%">
          <select name="2" onChange="updatepocet(this)">
      <option  selected <option >2</option><option >3</option><option >4</option><option >5</option><option >6</option><option >7</option><option >8</option><option >9</option><option >10</option><option >11</option><option >12</option><option >13</option><option >14</option><option >15</option><option >16</option><option >17</option><option >18</option><option >19</option><option >20</option>
          </select>
        </td>
        <td width="55%">
          Fyzika        </td>
        <td width="20%">
          80 Kč
        </td>
        <td width="10%">
          <a href="kosik.php?action=remove&id=2">Odstranit</a>
        </td>
      </tr>
      
    </table>
    














  <b>Celková cena: 80.00 Kč</b>
  </form>

<a href="index.php">Návrat na výběr zboží</a> 
</body>
</html>

Část, kterou bych si potřeboval uložit do souboru, je vyhraněna obrovskou mezerou, cenu si překontroluji kvůli nějakým šikulům, kteří by dokázali pozměnit to. Díky moc.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tak, teď řeším problém s tímto. Generuje se mi 20-znakový náhodný řetězec znaků. A tohle mi nefunguj…
marekdrtic 04.04.2008 15:09
marekdrtic
$file = fopen('nazevSouboruProZapis.txt', 'a+'); $text="Totální blábol"; fwrite($file, $text); fclos…
Flash_Gordon 04.04.2008 15:39
Flash_Gordon
Takže nakonec jsem si to upravil podle sebe, aby mi to vyhovovalo :puff:: $adresa="$nahodnynazev.ht…
marekdrtic 04.04.2008 15:45
marekdrtic
ja si myslim, ze pokud chces odeslat přilohu jako html, ze by jsi ji nemel ukladat na disk. A pak po…
AZOR 04.04.2008 15:47
AZOR
Ne, vygeneruje se na serveru soubor s daty, ten se odešle jako příloha emailu a následně se smaže, t…
marekdrtic 04.04.2008 15:49
marekdrtic
Dobře, jen si myslím že na odeslání html jako přílohy neni nutné generovat fyzický soubor a pak ho z…
AZOR 04.04.2008 15:55
AZOR
A teď bych potřeboval poradit, jak tu část kódu, kterou bych chtěl dát do souboru nějak ohraničit a…
marekdrtic 04.04.2008 16:19
marekdrtic
Obecné schema může vypadat následovně: $ZacatekStranky = "<html><head> <title>New document</title</…
Flash_Gordon 04.04.2008 16:37
Flash_Gordon
Yeah, už se mi to začíná rýsovat :-). Ještě pár řádek, dodělat odesílací soubor a pak už to budou je…
marekdrtic 04.04.2008 16:53
marekdrtic
Jaký je důvod, nedávat do html přílohy hlavičku souboru? Těch pár B tě už snad nezabije.
ws79 04.04.2008 17:30
ws79
O to ale vůbec nejde, nejsem až takový debil. Tady jde o uložení celého textu do stringu
marekdrtic 04.04.2008 17:35
marekdrtic
Na řetězce pozor. PHP narozdíl od většiny jiných syntaxí má takovou specialitu. Když počítáš sumu č… nový
Flash_Gordon 04.04.2008 18:29
Flash_Gordon
Promiň že jsem Tě obtěžoval, ale rozhodl jsem se, že si to kompletně vycucám z databáze. nový
marekdrtic 04.04.2008 18:32
marekdrtic
<? $vypis = mysql_query("SELECT * FROM `kosik` WHERE `cookieid` LIKE '00aoscpmkpp2daia39t4jtthv1'");… nový
marekdrtic 04.04.2008 18:33
marekdrtic
Zrovna jsem tu chtěl písnout, proč nepoužiješ SELECT * FROM kosik; ... mrkni sem, třeba tu objevíš n… nový
Kráťa 05.04.2008 00:09
Kráťa
Volim KDU-CSL a nazor stridam podle vetru a deste To je brutus, Matko představená.:-D nový
kmochna 04.04.2008 18:34
kmochna
Aha, sorry špatné tlačítko ... Měla to být reakce na tuto větu "Část, kterou bych si potřeboval ulož… nový
ws79 04.04.2008 18:36
ws79
Poslední problém před dokončením: $zbozi = "Číslo produktu: ".$polozka["produktid"]." - "."Počet ku… nový
marekdrtic 04.04.2008 19:38
marekdrtic
Pak je zdroj problému pouze v jednom z následujících bodů: - Dané proměnné jsou prázdné - neobsahuj… nový
Flash_Gordon 04.04.2008 20:05
Flash_Gordon
Já to napsal blbě. Vše ostatní funguje, ale mám "objednáno" 3 druhy zboží a v emailu se zobrazuje po… nový
marekdrtic 04.04.2008 20:15
marekdrtic
No protože to máš navržené tak, že počítáš pouze s jedním objednaným výrobkem(zbožím). Musíš si tam… nový
Flash_Gordon 04.04.2008 20:33
Flash_Gordon
No jo, jenže mi vrtá hlavou, proč to v emailu nejede a na normální stránce ano :-/ nový
marekdrtic 04.04.2008 20:35
marekdrtic
Protože to vypisuješ dobře: while ($polozka = mysql_fetch_array($vypis)) { //Tady ve smyčce prostě… nový
Flash_Gordon 04.04.2008 20:37
Flash_Gordon
Takže jsem si to udělal takhle: $i = 0; while ($polozka = mysql_fetch_array($vypis)) $zbozi[$i++] =… nový
marekdrtic 05.04.2008 08:37
marekdrtic
Hurá. Tak to tvoje funguje, akorát tam byla blbě udělaná ta poznámka. U PHP se to dělá /* poznámka *… nový
marekdrtic 05.04.2008 08:40
marekdrtic
já mám za to, že u PHP jsou dva druhy poznámek. Jedna nezalomitenlá (pouze na jeden řádek, druhá zal… nový
Kráťa 05.04.2008 11:15
Kráťa
S tou poznámkou to nejde, jak má. Necháme to být. Prostě /* */ je funkční nový
marekdrtic 05.04.2008 11:54
marekdrtic
Ještě jedno mi vrtá hlavou. Odeslal jsem z webovek asi 100 zpráv a pak se mi to seklo. Nemohli mi to… nový
marekdrtic 05.04.2008 09:17
marekdrtic
while ($polozka = mysql_fetch_array($vypis)) { $zbozi= "Číslo produktu: ".$polozka["produktid"]." -… nový
marekdrtic 05.04.2008 09:41
marekdrtic
while ($polozka = mysql_fetch_array($vypis)) { $zbozi .= "Číslo produktu: ".$polozka["produktid"]."… nový
Flash_Gordon 05.04.2008 13:02
Flash_Gordon
Díky, konečně mám své 8kb jádro obchodu hotové. Jenom bych se chtěl zeptat, jestli se jde zbavit těc… nový
marekdrtic 05.04.2008 13:53
marekdrtic
Hlášky lze potlačit umístěním zavináče před proměnnou: @$zbozi Ale není dobré si na to zvykat. poslední
Flash_Gordon 05.04.2008 13:55
Flash_Gordon

Tak, teď řeším problém s tímto. Generuje se mi 20-znakový náhodný řetězec znaků. A tohle mi nefunguje:

$file = fopen('echo $retezec', 'w+', 1);
$text="Totální blábol";
fwrite($file, $text); 
fclose($file);
?>

Pouze se vytvoří soubor "echo $retezec" a konec. Nevíte, jak to tam přes ty apostrofy dostat?

ja si myslim, ze pokud chces odeslat přilohu jako html, ze by jsi ji nemel ukladat na disk. A pak posilat jako prilohu - potrebujes zbytecne navic prava pro zapis, povolenou fopen a zbytecnej pristup na disk...

Dobře, jen si myslím že na odeslání html jako přílohy neni nutné generovat fyzický soubor a pak ho zase mazat. Při nevytíženém shopu je to asi jedno...

Obecné schema může vypadat následovně:

$ZacatekStranky = "<html><head>	<title>New document</title</head><body>";


$TeloStranky = // Sem vymyslis kod, ktery bude generovat onu tabulku, je mozno rozdelit do vice kroku, opakovaneho volani a ja nevim co vsechno.

$KonecStranky = "</body></html>"; 

$CelkovaStrankaNaOdeslani = $ZacatekStranky.$TeloStranky.$KonecStranky;

Yeah, už se mi to začíná rýsovat :-). Ještě pár řádek, dodělat odesílací soubor a pak už to budou jenom sarampádičky typu rozdělení do kategorií. Zachvilku se možná ještě ozvu
A jak mám dát do stringu všechno tohle: ::)

<table width="100%" cellspacing="0" cellpadding="0">
      <tr>
        <td width="15%">
          <b>Počet</b>
        </td>
        <td width="55%">
            <b>Produkt</b>
        </td>
        <td width="20%">
            <b>Cena</b>
        </td>
        <td width="10%">
            <b>Odstranit</b>
        </td>
      </tr>

      <?php
        while($row = mysql_fetch_array($result))
          {
            // zjistí celkovou cenu
            $totalcena += ($row["pocet"] * $row["cena"]);
      ?>
      <tr>
        <td width="15%">
          <select name="<?php echo $row["id"]; ?>" onChange="updatepocet(this)">
      <?php

      for ($i = 1; $i <= 20; $i++)
        {
          echo "<option ";
            if ($row["pocet"] == $i) {
              echo " selected ";
            } else {
            echo ">" . $i . "</option>";
          }
        }
      ?>

          </select>
        </td>
        <td width="55%">
          <?php echo $row["jmeno"]; ?>
        </td>
        <td width="20%">
          <?php echo $row["cena"]; ?> Kč
        </td>
        <td width="10%">
          <a href="kosik.php?action=remove&id=<?php echo $row["id"]; ?>">Odstranit</a>
        </td>
      </tr>
      <?php
      }
      ?>

    </table>

Nebo prostě po řádkách?

Na řetězce pozor. PHP narozdíl od většiny jiných syntaxí má takovou specialitu.

Když počítáš sumu čísla , tak je v pořádku operátor +, následně:


$trikolky[1] = 20;
$trikolky[2] = 40;
$trikolky[3] = 20.5;

$cenaVsechTrikolek = 0;

foreach($trikolky as $trikolka)
{
$cenaVsechTrikolek += $trikolka;
}

echo $cenaVsechTrikolek;

Nicméně takto nelze postupovat při spojování řetězců:

$NazoryLidi[1] = "Poradna je velice spatna vec";
$NazoryLidi[2] = "Poradna je velice dobra vec";
$NazoryLidi[3] = "Volim KDU-CSL a nazor stridam podle vetru a deste";

$SepisVsechnyNazory = "";

foreach($NazoryLidi as $NazorCloveka)
{
$SepisVsechnyNazory .= $NazorCloveka;
}

echo $SepisVsechnyNazory;

Poslední problém před dokončením:

$zbozi = "Číslo produktu: ".$polozka["produktid"]." - "."Počet kusů: ".$polozka["pocet"].", ";
$message = "Jméno:            ".$jmeno."\n"
           ."Přijmení:         ".$prijmeni."\n\n"
           ."Firma:            ".$firma."\n"
           ."IČO:              ".$ico."\n"
           ."DIČ:              ".$dic."\n"
           ."Telefon:          ".$telefon."\n\n"
           ."Email:            ".$email."\n"
           ."Jiný kontakt  :   ".$jinykontakt."\n\n"
           ."Způsob dodání :   ".$dodani."\n"
           ."Poznamka :        ".$poznamka."\n"
           ."Objednané zboží : ".$zbozi."";

Zobrazí se mi v emailu pouze první řádek zboží (Objednané zboží : Číslo produktu: 3 - Počet kusů: 13,), ostatní bohužel ne, jak to udělat, aby to bylo takhle v tom emailu:

Číslo produktu: x - Počet kusů: x === Číslo produktu: x - Počet kusů: x

Jako x tam budou dosazena čísla z databáze

Já to napsal blbě. Vše ostatní funguje, ale mám "objednáno" 3 druhy zboží a v emailu se zobrazuje pouze ten poslední druh, ostatní ne...
Takhle to vypadá ten email:

Jméno: a
Přijmení: a

Firma: a
IČO: a
DIČ: a
Telefon: a

Email: a
Jiný kontakt : a

Způsob dodání : Osobní vyzvednutí
Poznamka : a
Objednané zboží : a kde jsou ty ostatní výrobky??? Číslo produktu: 3 - Počet kusů: 9,

P.S. Ale ten samý kód na stránce udělá toto:
Číslo produktu: 2 - Počet kusů: 12, Číslo produktu: 1 - Počet kusů: 15, Číslo produktu: 3 - Počet kusů: 9,

No protože to máš navržené tak, že počítáš pouze s jedním objednaným výrobkem(zbožím).
Musíš si tam "dodělat" to, aby to fungovalo pro libovolný počet zboží.

Na toto se nejlépe hodí právě objektové programování(objekty), ale tady je možné to i vybírat přímo z databáze(možná) jako strukturu. To záleží jak jsou uskladněna a vybrána data ze zdroje (např. databáze to vrací přímo jako strukturu, což je něco jako bratranec objektu. :-/

Protože to vypisuješ dobře:

while ($polozka = mysql_fetch_array($vypis)) 
{
//Tady ve smyčce prostě nějak nakrmíš/zařídíš to pole celkem objednaného zboží, které pak taky nějak celé napíšeš do mailu no.
}

RESPEKTIVE

while ($polozka = mysql_fetch_array($vypis)) 
echo "Číslo produktu: ".$polozka["produktid"]." - "."Počet kusů: ".$polozka["pocet"]."<br>\n";

p5ep93e3 na.....

$pocitadlo = 1;

while ($polozka = mysql_fetch_array($vypis))
{ 
echo "Číslo produktu: ".$polozka["produktid"]." - "."Počet kusů: ".$polozka["pocet"]."<br>\n";
// a tady to cele serializujes, co ja vzm treba:
$polozky[$pocitadlo] = "Číslo produktu: ".$polozka["produktid"]." - "."Počet kusů: ".$polozka["pocet"]."<br>\n";
$pocitadlo++;
}

Neco takoveho no.
Prostě si nějak v té smyčce jenom doplň to skladování (tady by bylo blbnutí s objektama nesmyslnost teda).
Napoveda: to co vypisujes na obrazovku jenom "naskladujes" do pole zaroven.

 while ($polozka = mysql_fetch_array($vypis))
{ 

$zbozi= "Číslo produktu: ".$polozka["produktid"]." - "."Počet kusů: ".$polozka["pocet"].", ";

echo $zbozi ;

$pocitadlo++;
}


 $message=  "Jméno:            ".$jmeno."\n"
           ."Přijmení:         ".$prijmeni."\n\n"
           ."Firma:            ".$firma."\n"
           ."IČO:              ".$ico."\n"
           ."DIČ:              ".$dic."\n"
           ."Telefon:          ".$telefon."\n\n"
           ."Email:            ".$email."\n"
           ."Jiný kontakt  :   ".$jinykontakt."\n\n"
           ."Způsob dodání :   ".$dodani."\n"
           ."Poznamka :        ".$poznamka."\n";
           ."Objednané zboží : ".$zbozi."\n";

V tomto případě to znova vypíše tu poslední

 while ($polozka = mysql_fetch_array($vypis))
{ 

$zbozi= "Číslo produktu: ".$polozka["produktid"]." - "."Počet kusů: ".$polozka["pocet"].", ";

echo $zbozi ;

$message=  "Jméno:            ".$jmeno."\n"
           ."Přijmení:         ".$prijmeni."\n\n"
           ."Firma:            ".$firma."\n"
           ."IČO:              ".$ico."\n"
           ."DIČ:              ".$dic."\n"
           ."Telefon:          ".$telefon."\n\n"
           ."Email:            ".$email."\n"
           ."Jiný kontakt  :   ".$jinykontakt."\n\n"
           ."Způsob dodání :   ".$dodani."\n"
           ."Poznamka :        ".$poznamka."\n";
           ."Objednané zboží : ".$zbozi."\n";
$pocitadlo++;
}


 

V tomto případě to pošle megamail s počtem opakování, kolik je tam záznamů.

Jak to už do prkýnka zelenýho udělat?

 while ($polozka = mysql_fetch_array($vypis))
{ 

$zbozi .= "Číslo produktu: ".$polozka["produktid"]." - "."Počet kusů: ".$polozka["pocet"].", ";

//echo $zbozi ;

}


 $message=  "Jméno:            ".$jmeno."\n"
           ."Přijmení:         ".$prijmeni."\n\n"
           ."Firma:            ".$firma."\n"
           ."IČO:              ".$ico."\n"
           ."DIČ:              ".$dic."\n"
           ."Telefon:          ".$telefon."\n\n"
           ."Email:            ".$email."\n"
           ."Jiný kontakt  :   ".$jinykontakt."\n\n"
           ."Způsob dodání :   ".$dodani."\n"
           ."Poznamka :        ".$poznamka."\n";
           ."Objednané zboží : ".$zbozi."\n";

Zpět do poradny Odpovědět na původní otázku Nahoru