Autor Zpráva
Trim
Profil
Ahoj, mám diskusi napojenou na textový soubor, a potřebuji nějak udělat, aby se data z diskuse napsali vždy nahoru (zatím se mi povedlo jen dolů přes <table><tr><td>…</td></tr></table>), nevíte, jak bych to měl udělat?
Keeehi
Profil
Nejlepší řešení je nepoužívat soubor ale databázi. Můžeš si to při výpisu pak libovolně řadit.

Pokud v souboru zvládneš rozlišit příspěvky (například každý je na samostatném řádku), můžeš si načíst obsah souboru, rozsekat ho na jednotlivé příspěvky do pole a pak použít funkci array_reverse pro jeho otočení.

No a poslední možnost je při ukládání načíst celý obsah souboru. A pak celý soubor přepsat obsahem: nový příspěvek + původní obsah.
Trim
Profil
Inu, každý příspěvek má samostatný řádek v tabulce, což by teoreticky nějak asi šlo vytvořit… ty soubory se postupně promazávají, takže by to bylo i v pohodě… a s array_reverse by to bylo těžký, jelikož tomu asi automatické ID nevytvořím… :/
Keeehi
Profil
Trim:
s array_reverse by to bylo těžký, jelikož tomu asi automatické ID nevytvořím… :/
Vůbec netuším o jakém automatickém ID mluvíš. array_reverse se o obsah vůbec nezajímá. Důležité je, zda umíš vytvořit z toho souboru pole, kde každý prvek je jeden příspěvek.
Trim
Profil
A jak to mám udělat?
lionel messi
Profil
Trim:
A jak to mám udělat?

Pozri [#2]:

Pokud v souboru zvládneš rozlišit příspěvky (například každý je na samostatném řádku), můžeš si načíst obsah souboru, rozsekat ho na jednotlivé příspěvky do pole a pak použít funkci array_reverse pro jeho otočení.

Načítanie obsahu súboru a rozsekanie do poľa tu už s tebou v inom tvojom vlákne niekto riešil, čítal si vôbec si tú odpoveď? Schválne nenapíšem kto a kde, hľadaj.

Čo konkrétne ti je nejasné? Sú to základné PHP funkcie. Ak ovládaš základy angličtiny, prvé odkazy na výsledky php string to array a php content of file ti vrátia presne to, čo hľadáš.

Jeden (takmer) kompletný kus kódu si tu už dostal, ďalší odo mňa už nedostaneš, kým nezistím, že prejavíš aj trochu vlastnej snahy, vieš si aspoň dohľadať základy a podobne.
Trim
Profil
Já hlavně nechápu samotnou funkci array_reverse, moc jsem nepobral (jak už z manuálů, tak i z pár dalších stránek) smysl a jak to vůbec funguje. Potřebuju hlavně vysvětlení, kopírování kódu je k ničemu.
Keeehi
Profil
Když máš pole ['a', 'b', 'c'] a pošleš ho do funkce array_reverse, tak ti z něj udělá pole ['c', 'b', 'a'].
anonym_
Profil *
Trim:
Co konkrétně na te funkci (ať už z názvu nebo z ukázek kódu) nechápeš?
Trim
Profil
No, tak jak se používá, co znamená, a jak jí mohu využít třeba ve spojení s tabulkou (nebo s html obecně…), když mám diskusi s textovým souborem… a nebo jak to nějak hodit do souborů… ?
anonym_
Profil *
Trim:
Jak se používá a co znamená je popsáno v php manuálu a každé php učebnici v sekci Pole.

A k čemu je dobra? Asi k tomu, aby prevratila pole naruby, to psal keeehi a píšou to i všechny učebnice php.
Trim
Profil
Právě ten manuál nechápu… a žádnou PHP učebnici nemám, měl bych?
anonym_
Profil *
Trim:
žádnou PHP učebnici nemám, měl bych?
Tak pokud se ten jazyk chceš naučit, tak neustálým dotazováním se na úplne základy na diskusním fóru se to nenaucis.

Učebnici můžeš mít buď klasickou, nebo existují i on-line tutorialy, třeba pehapko.cz. Ty chceš programovat, ale nemáš základ, na kterém by se dalo stavět. A ten se na diskusi nebo nějakou tvorbou pokus-omyl nenaučis.
Trim
Profil
Jak už jsem psal tady, ptám se jen na věci, kterým nerozumím…
anonym_
Profil *
Trim:
ptám se jen na věci, kterým nerozumím…
...což je skoro všechno (nic ve zlém). Fakt se tomu samostudiu pověnuj, třeba měsíc nebo dva a pak se ptej. Řešíš tu základy, které jsou vysvětlené v prvních kapitolách každé knihy/tutorialu.
Trim
Profil
Tak ty nevidíš, co zvládám, vidíš jen to, s čím mám problémy… trápím se s nimi už měsíc a pořád je nechápu, proto jsem sem přišel. Jsou to věci, které jsou vysvětlené tak, že jsem je nepochopil, jinak jsem si o nich hledal spousta věcí… ;)
lionel messi
Profil
Trim:

Ak sa chceš naučiť dobre hrať futbal, potrebuješ dve základné veci:

- poznať pravidlá (nie, gól rukou naozaj nie je dobrý nápad)

- vedieť ako, kedy a koľko trénovať, ako si vyskladať jedálniček (čiže nejaké návyky, ktoré sú predpokladom pre úspech)

Podobne je to aj v prípade programovania - musíš poznať pravidlá hry - základy jazyka, syntax, konštrukcie (toto dosiahneš iba nudným samoštúdiom) a veľmi sa ti budú hodiť aj správne programátorské návyky (tá funkcia na 500 riadkov, ktorá robí 5 nesúvisiacich vecí, vyzerá síce zaujímavo a je fajn, že sa v nej vyznáš, ale asi nebude najpraktickejšia).

Na nadobudnutie návykov ti pomôže predovšetkým správny zdroj (odporúčam Péhápko: Učebnice PHP, škoda, že ďalší vývoj učebnice nepokračuje), ale aj vlastné pokusy a omyly (ak sa ti s kódom zle robí, máš dôvod ho prepracovať alebo ďalší projekt napísať lepšie).
Keeehi
Profil
Trim:
Tak ty nevidíš, co zvládám, vidíš jen to, s čím mám problémy
My jsme taky někdy začínali. A dělali jsme podobné chyby a omyly v rozhodování jako ty. Myslím že dokážeme si docela dobře představit kde v procesu učení asi zrovna jsi.
Trim
Profil
lionel messi:
Péhápko jsem četl celé, od proměnných až po session, ale tohle tam vysvětlené nebylo…
Keeehi:
Inu, nevím, už jsem zvládl i přihlášení, registraci a administraci, posílání věcí a automatické vytváření profilů uživatelů. Ale dobře, respektuji tvůj názor. :-)
anonym_
Profil *
Trim:
ale tohle tam vysvětlené nebylo
Ano, pehapko.cz neni kopií php.net a vzhledem k tomu, že ten web tvořila asi čtveřice lidí, je pochopitelné, že tam není všechno.

Pořád ale nechápu, co nechápeš na tom, co se píše v manuálu. array_reverse — Return an array with elements in reverse order. Pro lepší pochopení psaného textu je tam i příklad, který pracuje i s druhým volitelným parametrem funkce. Konkrétně se jedná o toto:

<?php
$input  = array("php", 4.0, array("green", "red"));
$reversed = array_reverse($input);
$preserved = array_reverse($input, true);

print_r($input);
print_r($reversed);
print_r($preserved);
?>

Sorry, tohle není o tom, že něco nechápeš, ale že jsi si tu stránku nepřečetl. Nebo jen nemáš takovou znalost angličtiny, abys ji pochopil (na což existují zase dostupné online služby). Bez angličtiny se programovat nedá, a DJPW není technicky zařízená na to, aby ti vysvěltovala základní PHP funkce.
Firibix
Profil
Reakce na Trima:
jak jí mohu využít třeba ve spojení s tabulkou (nebo s html obecně…), když mám diskusi s textovým souborem… a nebo jak to nějak hodit do souborů… ?
array_reverse nijak nesouvisí s HTML nebo nějakou tabulkou, dokonce ani s tím, jestli máš příspěvky v textovém souboru nebo v databázi. Jak tu napsali kolegové, slouží k obrácení pořadí prvků v poli.

Trochu problém je, že z tvých příspěvků nevíme, jak přesně máš vypisování a ukládání příspěvků vyřešené. Nejlepší by bylo vždycky přiložit i kousek kódu (nemusí v něm být úplně všechno, ale potřebujeme znát princip, jak funguje), abychom mohli dobře poradit. Možná tedy zbytek mého příspěvku nepůjde úplně dobře zakomponovat do tvého stávajícího kódu.

Dejme tomu, že každý příspěvek máš v souboru na samostatném řádku. Vypsat je tedy lze nějak takhle:

$file = fopen('prispevky.txt', 'r');
echo '<table>';
while (($prispevek = fgets($file)) !== false) {
    echo '<tr><td>';
    echo htmlspecialchars($prispevek);
    echo '</td></tr>';
}
echo '</table>';
fclose($file);

Tenhle kód ve while cyklu čte pomocí funkce fgets soubor řádek po řádku (až se dostane na konec, funkce začne vracet false a podmínka v cyklu vypisování ukončí). Příspěvky se v cyklu zároveň hned vypisují a na webové stránce se proto objeví ve stejném pořadí, v jakém jsou uložené v textovém souboru.

Případně můžeme zvolit alternativní přístup a celý obsah souboru přečíst do paměti (a uložit si jej do proměnné $file) funkcí file_get_contents a potom ho rozsekat podle nových řádků (nový řádek je také znak, jenom nemá tvar písmenka, ale způsobí odřádkování; v PHP pro takový znak existuje speciální konstanta PHP_EOL) do pole $prispevky funkcí explode:

$file = file_get_contents('prispevky.txt');
$prispevky = explode(PHP_EOL, $file);
echo '<table>';
foreach ($prispevky as $prispevek) {
    echo '<tr><td>';
    echo htmlspecialchars($prispevek);
    echo '</td></tr>';
}
echo '</table>';

Tady máme cyklus foreach, který postupně vezme každý prvek v poli $prispevky a uloží jej do proměnné $prispevek, kterou při každé iteraci cyklu vypíšeme. Prvky bere v pořadí, v jakém jsou v poli uloženy. Funkce explode pole vytváří ve stejném pořadí, jako má původní proměnná $file. Funkčnost je tedy stejná, jako v předchozí variantě.

Teď už by mělo být jasné, jak zajistit, aby se nejnovější příspěvky, tedy ty, které jsou v souboru uložené jako poslední, vypsaly na stránce jako první. Tu první alternativu použít nemůžeme, protože funkcím fopen nebo fgets nejde říct, aby soubor četly pozpátku. Naopak ve druhé alternativě jsme si celý soubor přečetli a pomocí explode vytvořili pole, kde co prvek pole, to řádek v souboru.

Před cyklus foreach přidáme volání zmíněné funkce pro obrácení pořadí prvků v poli:

// ...
$prispevky = explode(PHP_EOL, $file);
$prispevky = array_reverse($prispevky);
echo '<table>';
foreach ($prispevky as $prispevek) {
// ...

Cyklus foreach bude stále prvky procházet v pořadí, v jakém jsou v poli uložené. array_reverse nám ale to pořadí obrátilo, čili jestliže původně byl nejstarší příspěvek na prvním místě, teď bude na posledním.
Kcko
Profil
Hlavně o čem se tu bavíme, v jiném příspěvku píšeš, že ovládáš Databázi, tak nevím co tu šaškujeme / šaškujete se souborem.
Prostě si data načti z DB, použij korektně ORDER BY a LIMIT a je hotovo.
anonym_
Profil *
Trim:
Přidám ještě poslední příspěvek k tomuto tématu (pak se ale už opravdu věnuj studiu).

$array = [1,2,3,4,5,6,7,...,100];
foreach ($array as $val) {} // prakticky totez jako for ($i = 0; $i < count($array); $i++)

Pokud chci obrátit pořadí prvků, tzn. pole procházet od konce, použiju buď array_reverse + foreach, nebo alternativně konstrukci
for ($i = count($array); $i > 0; $i--)

Výsledek bude podobný.
Trim
Profil
Firibix:
Děkuji moc, už to chápu! Prostě stačí jen array_reverse načíst do proměnných, jako kdybych tam chtěl escapovat třeba htmlspecialchars! :)
anonym:
Sorry, tohle není o tom, že něco nechápeš, ale že jsi si tu stránku nepřečetl.
Tu stránku jsem četl, co ti na tom není jasné? Akorát jsem nepochopil, jak jí mám nasadit do té tabulky, do které vypisuji diskusní příspěvky - ok, to byla možná moje blbost. :D
Kcko:
Pokud mám diskusi v textovém souboru, asi pro to mám dobrý důvod, v textovém souboru můžu měnit strukturu, vložit textový soubor do úpravy příspěvků nebo mazat ostatní příspěvky (ale ok, nějaký klíč proti spamu tam docela chybí), navíc je to pár řádků kódu, což šetří místem. :) Navíc textový soubor se může sám aktualizovat (a je to jednoduchý to tam udělat).
anonym:
Ach, děkuji moc! Určitě zkusím v obou případech, a kdyžtak už si to sám zodpovím a udělám.
Kcko
Profil
Trim:
Pokud mám diskusi v textovém souboru, asi pro to mám dobrý důvod,
Jakou to má výhodu proti databázi? To co jsi popsal jsou absolutně nerelevantní "výhody"; spíš umně skrýváš, že s DB skutečně neumíš ;-), přitom to není nic těžkého, minimálně ty základy, které by Ti bohatě stačily.
Trim
Profil
Určitě neumím, vždyť všechny sekce krom diskuse mám napojené na databázi, stejně jako odesílací formuláře a nebo administraci. Prostě jsem si řekl, že diskuse bude oddělená.
Nemám důvod nic skrývat, když vím, že mi s tím kdyžtak pomůžete.


Pokud chceš nějakou ukázku, klidně si řekni. ;-)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0