

Uložení PHP scriptu do souboru aby fungoval
Ahoj všem,
mám asi jednoduchou otázku, ale nevím jak to mám zadat:
Mám formulář, ten mi pošle hodnotu, ve scriptovém souboru ji uložím do proměnné, potom chci zapisovat do souboru
kód: $data_ktera_budou_zapsana ("<? session_start(); echo $_SESSION["$data"];?>");
Ale to jaksi není ono, chci aby to do toho souboru zapsalo ten script a místo slova "$data" tam byla hodnota z formůláře. Problém je, že se to takhle nezapisuje ono to samozdřejmě rozhodí celý zbytek scriptu.
Můžete mi někdo pomoci?
Děkuji
V prvom kroku si ulož do nejakej premennej to, čo chceš zapísať do súboru. Pre zapisovanie do súboru si pozri funkciu file_put_contents.
Neviem, čo chceš dosiahnuť, ale takto sa to nerobí.
No to všechno vím, ale... Zatím vím, že co dělám je nějakej mnou vymyšlenej paskvil, ale funguje, až udělám xtej web tak budu chytžejší
. Tak tady něco na přiblížení:
Mám index.php ten se načte při návštěvě stránky v něm je script který mi zobrazuje určitou stránku .php podle odkazu v určitém <div>, mám stránku složenou z několika divu, a podle style.css vzniká vhzled. Potom tam je script, který vytvoří unikátní id číslo návštěvníka s tímto unikátním číslem pojmenuje nově vytvořenou složku,a unikátní číslo ještě uloží do session. Teď k funkci:
návštěvním klikne na určitou stránku se zbožím, co tabulka co produkt:
<table>
<tr><td rowspan="2"><img height="100" src="obrazky_produktu/010328-010328.jpg"></td><td> Novější model</td></tr>
<tr><td>Cena: 1300,-Kč vč. DPH</td></tr>
<tr><td>
<form action="index.php?page=pridej" method="post" onSubmit="return zkontroluj(this)">
<input type="submit" class=bluebutton value="Koupit">
<input type="hidden" name="id" value="id1002">
<input type="hidden" name="nazev" value="Novější model">
<input type="hidden" name="mnozstvi" value="1">
<input type="hidden" name="cena" value="1300">
</form>
</td></tr>
</table>
Dále tu mám pridej.php, který to zpracuje:
<?php
if ($smazat == ""){
session_start();
if ($_SESSION["$id"]== ""){
$_SESSION["$id"] = $id;
$_SESSION["$id.$nazev"] = $nazev;
$_SESSION["$id.$mnozstvi"] = $mnozstvi;
$_SESSION["$id.$cena"] = $cena;
$jmeno = $_SESSION["unikatni"];
$write = ("
<tr>
<td><? session_start(); echo $_SESSION["$id"];?></td>
<td><? session_start(); echo $_SESSION["$id.$nazev"];?></td>
<td><? session_start(); echo $_SESSION["$id.$mnozstvi"];?></td>
<td><? session_start(); echo $_SESSION["$id.$cena"];?></td>
</tr>
"); //tady je problém!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if (File_Exists ("kosiky/$jmeno/kosik.php")):
$fp = FOpen ("kosiky/$jmeno/kosik.php", "r");
$data = FRead ($fp, FileSize("kosiky/$jmeno/kosik.php"));
FClose($fp);
endif;
$fp = FOpen ("kosiky/$jmeno/kosik.php", "w");
FWrite ($fp, $data.$write);
FClose ($fp);
}
else{
$_SESSION["$id.$mnozstvi"] += $mnozstvi;
$_SESSION["$id.$cena"] += $cena;
}}
if ($smazat == "smazat"){
$_SESSION["$id"] = "";
$_SESSION["$id.$nazev"] = "";
$_SESSION["$id.$mnozstvi"] = "";
$_SESSION["$id.$cena"] = "";
}
?>
<center>
<br><br><br><br><br>
<img height="50" src="obrazky/loading.gif"><br>
ČEKEJTE
<html>
<Meta http-equiv = "refresh" content = "1; url = index.php?page=kosik" >
</html>
No a nakonec se mi to zobrazuje v košíku (samozdřejmě nefunguje), prazdnykos.php je jen text:
<h1>Košík</h1>
<center>
<table border="1">
<tr><td width="150">Kód zboží</td><td width="150">Název zboží</td><td width="70">Množství</td><td width="150">Cena vč. DPH 21%</td></tr>
<?
session_start ();
$jmeno = $_SESSION["unikatni"];
if (File_Exists ("kosiky/$jmeno/kosik.php"))
include ("kosiky/$jmeno/kosik.php");
else
header("location: index.php?page=prazdnykos");
?>
</table>
<br><br>
<table>
<tr><td>
<form action="index.php?page=kosiksmaz" method="post" onSubmit="return zkontroluj(this)">
<input type="submit" class=bluebutton value="Vyprázdnit košík">
<input type="hidden" name="smazat" value="smazat">
</form>
</td></tr>
</table>
<br>
Snad stačí
Na súbory zabudni. Do session si ukladaj iba kód tovaru a počet, napr. takto:
Samotnú informáciu o položke (cenu, názov, popis, ...) si pamätaj v nejakom statickom poli objektov. Neskôr to môžeš spraviť cez databázu.
Pri pridaní do košíka spravíš:
Pri zobrazovaní košíka:
No to vypadá jinak
O poli jsem taky slyšel, že je lepší, ale bojím se toho, no asi budu muset do toho vkročit.
Vyzerá, že to máš teraz všetko staticky v HTML. Ja by som si na tvojom mieste spravil nejaké pole tovarov, napr. takto:
Toto by si neskôr mohol upraviť tak, aby sa to čítalo z databázy.
Obrázky by som ukladal pod názvom s použitím identifikátora. Nerozumiem, prečo napr. teraz máš pre tovar s identifikátorom 1002 obrázok s názvom 010328-010328.jpg. Generovanie informácií o tovare by potom vyzeralo nejako takto:
(Funkcia html je len helper funkcia, ktorá robí v podstate to isté ako htmlspecialchars.)
Ešte sa zbaviť toho tabuľkového layoutu a niečo by z toho mohlo byť.
No mám to všechno dané staticky, když budu přidávat další produkt tak ručně vše zadám (okopíruji, přepíši,...) uživatelské rozhraní zatím vůbec neřeším. No a právě, že to mám natvrdo tak i názvy obrázku jsou zkopírované a vložené do odkazu (tento je někde z google abych viděla pro představu nějaký tvar stránky). Po pravdě to moc nechápu, jako funkci jo, ale co kam dát nevím, musím se nad tím zamyslet, popřípadě pohledat na netu. Teď už ale končím
Díky moc
No a ten první kód $items.... tak to nesedí s tím co je katalogu, ne? tam je proměnná $item. Máš tam chybu, že jo?
vsadim 10x basu piva ze los nema nikde chybu :)
Vzhľad riešiť nemusíš, ale kopírovať by sa mi to nechcelo. Keď sa rozhodneš neskôr niečo zmeniť v zobrazení jednej položky, budeš musieť upravovať všetok ten prekopírovaný HTML kód. Keď ale budeš mať definovanú šablónu položky v jednej slučke, tak to stačí upraviť na jednom mieste:
No to jo no, ale to by mě asi zas tak nevadilo, když to teď vymyslím tak bych to už neměnil, ale jo chápu je to prostě lepší. No a toto:
<table>
<? foreach ($items as $id => $item): ?>
<tr>...Šablóna položky...</tr>
<? endforeach ?>
</table>
Přijde třeba kam? A co bude v tom "Šablóna položky", takovej ten tabulkovej formulář (o pár řádku výš)?
To je ilustračný príklad. V spojení s tým predchádzajúcim príkladom by to mohlo vyzerať takto:
Alebo teda bez tabuliek by si to dal napr. do ul/li...
No tak a toto by byl katalog jako co je vidět na stránce, při prohlížení prodktů? Jo no vzhled teď neřeším.
$items = array(
1002 => (object)array(
'id' => 1002,
'name' => 'Novější model',
'price' => 1300
),
// ...ďalšie položky
);
No a toto přijde kam? Tam taky musím měnit hodtony, ručně?
Áno, to si nastavíš raz ručne v nejakom súbore, ktorý môžeš potom includovať všade tam, kde potrebuješ pracovať s produktami.
Pri zobrazovaní informácií o produktoch budeš čerpať len z tohto jediného zdroja a nikde inde už potom konkrétne hodnoty produktov písať nebudeš.
Aha, no už to začínám chápat. Ale teď zkouším a nějak mi to nejde, to <table> jsem dal do nějakého souboru a do něj jsem na začátek includovat soubor s tím kodem <?php
$items = array(1002 => (object)array('id' => 1002,'name' => 'Novější model','price' => 1300),);
?> Když ten soubor otevřu na stránce tak se stránka načte nekompletní.
Pozri si zdrojový kód výslednej HTML stránky, na konci stránky by si mal vidieť chybové hlásenie.
Ak ho nevidíš, tak si zapni zobrazovanie chybových hlásení buď v .htaccess alebo priamo v programe:
Nezabudol si definovať tú pomocnú funkciu html?
Tak to taky neznám, že to tam píše chybové hlášení, dobrá věc. Máš pravdu, neměl jsem definovanou tu funkci, ale k čemu vlastně je? Ona odstraňuje speciální znaky? Tu chybu co jsem tam měl, tak byla něco se zobrazením obrázku. Vlastně to je jasný když tam mám
a html funkce vůbec není definovaná. A toto
můžu dám třeba do index.php
A co teď, co dám do pridej.php?
No jak se tak dívám tak nejdřív budu muset udělat definice, jako je:
A nakonec:
Můžu to dát až třeba za </table>? je jedno kde to bude? Hlavně aby to pokrývovalo moje požadavky?
Tak tuhle patlaninu jsem zkusil dát do toho pridej:
Samozdřejmě to nefunguje, jak se dělá echo? Nějak to nemůžu najít.
Máš tam bodkočiarku namiesto dvojbodky, tak preto:
Odporučil by som ti skôr takýto zápis:
Prípadne:
No jsem si nebyl jist, tak teď mám tam:
A háže mi to chybu:
Parse error: syntax error, unexpected T_INCLUDE in /home/free/.../s/.../root/www/pridej.php on line 2
Ale nechápu proč vždycky mě include fungoval.
Když udělám (to ale zas nebude mít v proměnných ty produkty, ne?):
Tak je zas chyba:
Parse error: syntax error, unexpected T_ENDFOREACH in /home/free/.../s/.../root/www/pridej.php on line 8
Tebe jaksi nevadí chyba: pridej.php on line 8?
1. <?php sa píše spolu.
2. Buď použiješ zložené zátvorky alebo dvojbodku a endforeach.
Áha, panebože to jsou věci. Kterej web, kde se zabývájí php znáš, můžeš doporučit? Jak psát web? Musím si projít pořádně jak se páruje, skládá atd. No teď už mi to funguje. Mohl bych ještě poprosit o to jak vypsat určitou tu položku z array? Jako třeba cenu u produktu 1002?
Našel jsem jak vypsat array bez object, tam je něco z hranatou závorkou a dává se tam číslo pole, ale toto je složitější.
Keď máš pole, tak k jeho prvkom pristupuješ pomocou hranatých zátvoriek: $array[1002]
Keď máš objekt, tak k jeho vlastnostiam pristupuješ pomocou šípky: $object->id
Já to furt nechápu
asi jsem blb, ale tohle mi nejde do hlavy. Mám katalog produktů:
Zajímavý je, že podle toho kolik mám produktů v souboru produkty.php, tak mě vytvoří tolik tabulek, což je dobrý, ale nechápu to
Potom tedy mám pridej.php:
No ten kod (<?=html($item->name)?>) mě zobrazí všechny jména produktů, jak udělám aby vypsal jen to jméno produktu na který jsem klikl?
Vieš, čo robí foreach?
Ne, asi něco hledá.
Tak si o tom niečo prečítaj.
Složitější než jsem čekal. Je to nějaký opakující se cyklus. Což tak nějak chápu, array je virtuální pole, taková databáze. A foreach ji projíždí dokola, a čeká na příkazy.
Foreach patrí medzi základné konštrukcie jazyka, array je pole. Pomocou konštruckie foreach prechádzaš cez všetky prvky poľa. Foreach nečaká na príkazy, ale vykoná príkazy vnútri svojho bloku pre každý prvok, pričom v rámci toho bloku napr. pri použití "foreach ($array as $key => $value)" máš k dizpozícii v premenných $key a $value kľúč a hodnotu aktuálnej položky poľa. Ak ťa nezaujímajú kľúče, tak môžeš použiť "foreach ($array as $value)".
Já to nechápu, můžeš prosím napsat to co jsi napsal ještě jednou, ale s názvy proměnnými jak mám já v kódu já to asi jinak nepochopím.
Mám produkty:
<?
$items = array(
1002 => (object)array('id' => 1002,'name' => 'Novější model','price' => 1300),
1003 => (object)array('id' => 1003,'name' => 'Nosdsvější model','price' => 13300),
1004 => (object)array('id' => 1004,'name' => 'Nosdsvějšsdsdí model','price' => 1365300),
);
?>
Co napsat abych vypsal kolik stojí produkt s id 1002? Prostě jenom nějaký echo na tu cenu.
No už vím, prostě jen:
Spomínaš si na toto?
Naozaj na tom nie je nič ťažké:
Ahá, no paráda. Tak jsem stvořil:
Katalog:
pridej.php
Akorát v tom pridej.php musím vytvořit nové pole kde se bude zadávat info co je v košíku (počet kusů, celková cena a tak) možná použiju SESSION. Ono to není težké, ale je potřeba se zamyslet. Díky moc!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Radši to tu ukončíme, protože to by asi bylo na pár let tahle diskuze. Děkuji moc za snahu mi pomoci.