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.

Předmět Autor Datum
Ahoj. Všechno možné je, ale není to jednoduché. Dej si do Google něco jako "HTML PHP mailer"
Flash_Gordon 03.04.2008 20:43
Flash_Gordon
v php nedelam, nicmene muj odhad je, ze to nemusis ukladat do soubory /a je to nezadouci imho/ a ude…
AZOR 03.04.2008 21:00
AZOR
Až přijdu ze školy(dneska máme kino o občanu Havlovi, tak o tom budu moct přemýšlet :-p), zkusím pos…
marekdrtic 04.04.2008 06:42
marekdrtic
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
bez uzvozovek, bez echa, just: $lucinka="file.love"; $t=fopen($lucinka,w+);
AZOR 04.04.2008 15:22
AZOR
Díky, co s tou Lucinkou pořád máte? :-D
marekdrtic 04.04.2008 15:40
marekdrtic
:-( právě, že nic...
AZOR 04.04.2008 15:42
AZOR
$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 č…
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.
marekdrtic 04.04.2008 18:32
marekdrtic
<? $vypis = mysql_query("SELECT * FROM `kosik` WHERE `cookieid` LIKE '00aoscpmkpp2daia39t4jtthv1'");…
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…
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
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ž…
ws79 04.04.2008 18:36
ws79
Poslední problém před dokončením: $zbozi = "Číslo produktu: ".$polozka["produktid"]." - "."Počet ku…
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…
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…
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…
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 :-/
marekdrtic 04.04.2008 20:35
marekdrtic
Protože to vypisuješ dobře: while ($polozka = mysql_fetch_array($vypis)) { //Tady ve smyčce prostě…
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++] =…
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 *…
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…
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í
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…
marekdrtic 05.04.2008 09:17
marekdrtic
while ($polozka = mysql_fetch_array($vypis)) { $zbozi= "Číslo produktu: ".$polozka["produktid"]." -…
marekdrtic 05.04.2008 09:41
marekdrtic
while ($polozka = mysql_fetch_array($vypis)) { $zbozi .= "Číslo produktu: ".$polozka["produktid"]."…
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…
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

v php nedelam, nicmene muj odhad je, ze to nemusis ukladat do soubory /a je to nezadouci imho/ a udelas to cele
jako string, ktery pak odesles jako soubor se spravnou hlavickou a inspiroval bych se timhle:
(tamm nejprve nactou soubor do stringu, coz uz mas ... a pak pokracujes s nima)
http://www.webcheatsheet.com/PHP/send_email_text_ht ml_attachment.php#attachment

P.S je jasne, ze je to jasne, jen hint:userovi poslat odkaz na kosik.php. ale celej odkaz.

Až přijdu ze školy(dneska máme kino o občanu Havlovi, tak o tom budu moct přemýšlet :-p), zkusím poslat tu část stránky na email společně i s údaji, košík i doplnění údajů bude jedna stránka, stejnak pro to musím nakonec udělat nějaký css layout, obrázky atd. atd. Práce jak na kostele.

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?

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