Autor | Zpráva | ||
---|---|---|---|
Truuhlik Profil |
#1 · Zasláno: 27. 1. 2010, 13:43:09 · Upravil/a: Truuhlik
Zdravím,
takže řeším problém - chci vytvořit jednoduchý rs (jenom přidávání, upravování a mazání novinek) jak přidávat to chápu Soubor novinky.txt Novinka||Text novinky Novinka2||Text novinky 2 Soubor view.php <?php $radku = file("novinky.txt"); foreach($radku as $key => $val){ $data[$key] = explode("||", $val); } echo "<table>"; for($k=0; $k<sizeof($radku); $k++){ echo "<tr><td>".$data[$k][0]."</td></tr>"; atd atd tohle ještě chápu } echo "</table>"; ?> ale pak je tady ten problém, že nevím jak prostě vytáhnout jenom jeden řádek a otevřít si ho ve vytvořeném formuláři prostě input na název, na samotný text novinky nebo podle vytáhnout ten řádek a ten smazat - nevím jestli to chápete, ale nevím jak jinak bych to napísal nevěděl by někdo jak efektivně a hlavně jednoduše na tento problém? |
||
Taps Profil |
#2 · Zasláno: 27. 1. 2010, 14:04:53
Truuhlik:
Pokud je v prvním sloupečku umístěn název článku který bude mít unikátní hodnotu, tak projdeš soubor pomocí foreach a pomocí funkce strpos si vytáhneš daný řádek souboru. Smazání řádku je na stejný způsob změna je jen v tom že místo strpos použiješ funkci unset, která ti smaže příslušná data. Pokud vytváříš vlastní rs tak ti doporučuji nastudovat si práci s databází. Ukládání článků a jakákoliv manipulace je pak mnohem snažší. |
||
Truuhlik Profil |
#3 · Zasláno: 27. 1. 2010, 14:11:14
Taps:
s databází umím to jo, SELECT, UPDATE, DELETE akorát snažím se vytvořit něco co by právě mysql nepotřebovalo, aby to bylo ještě líp přenosný, chtěl jsem se zeptat, nenapsal bys mi jak by to mělo vypadat? není to o tom, že bych nezkoušel to rozhodně ne, jen nevím jak na to - kdybych to dělal přes databázi tak je to o mnoho jednodušší, zapíšu do databáze a vytáhnu to z ní selectem, seřadím jak chci a ještě si určím kolik toho chci vypsat, ale tady jsem v koncích |
||
mylan Profil |
#4 · Zasláno: 27. 1. 2010, 14:25:51 · Upravil/a: mylan
Ideálne na začiatok riadku priradiť ešte aj id (buď budeš id generovať sám a vždy novému riadku priradzovať id o 1 vyššie, ako má posledný riadok, alebo v krajnom prípade môžeš ako id použiť aj timestamp. Základom je však dosiahnuť jedinečnosti id). Tvoja file db bude teda vyzerať takto:
Súbor novinky.txt 1||Novinka||Text novinky 2||Novinka2||Text novinky2 3||Novinka3||Text novinky3 K jednotlivé riadku potom pristúpiš takto (neriešim ošetrenie na rôzne chybové hlášky, to už snáď zvládneš sám): Súbor view.php?id=2 <?php if (isset($_GET['id']) && is_numeric($_GET['id'])) { $file = file('./novinky.txt'); foreach ($file as $single_line) { $data = explode('||', $single_line); if ($data[0] != $_GET['id']) continue; else { $title = $data[1]; $text = $data[2]; } } echo '<strong>' . $title . ':</strong> ' . $text; } ?> |
||
Truuhlik Profil |
#5 · Zasláno: 27. 1. 2010, 16:14:27 · Upravil/a: Truuhlik
mylan:
jo tohle se mi zamlouvá, dokonce se to obešlo i bez té mojí proměnné $key tak mě ještě ale napadá jak tady nahradit funkci UPDATE a DELETE - řekněme, že si vygeneruju stránku, na které budu mít vypsány v jednom sloupečku název novinky ve druhém bude button upravit a ve třetím smazat po kliknutí na příslušné tlačítko bych nechal vyvolat funkci, pomocí toho idčka bych věděl kterou chci editovat nebo smazat, ale teď jak na to, když ten soubor novinky.txt bude mít dejme tomu jenom 30 řádků jsem z toho fakt blbej to mám zase projet ten soubor foreach() nebo jak? |
||
mylan Profil |
#6 · Zasláno: 27. 1. 2010, 17:11:24
áno, zase prejdeš cyklom foreach. Napríklad zmazanie novinky bude vyzerať takto (pokiaľ prebieha cez formulár, ktorý sa odosiela metódou post a odosiela sa v ňom skrytá hodnota "action" s hodnotou "delete" a id novinky.):
<?php if (isset($_POST['action']) && $_POST['action'] == 'delete' && isset($_POST['id']) && is_numeric($_POST['id'])) { $file = file('./novinky.txt'); $lines = ''; foreach ($file as $single_line) { $data = explode('||', $single_line); if ($data[0] == $_POST['id']) continue; else $lines .= $single_line; } file_put_contents('./novinky.txt', $lines, LOCK_EX); header('location: ./?msg=deleted'); // presmerovanie na stránku s hláškou o úspešnom vykonaní akcie exit; } ?> Sám vytváram CMS založený na flat file databáze: MNews CMS. Je však už viac zložitejší, ako ty požaduješ (okrem základnej práce s článkami je tam už práca s komentármi, kategóriami, užívateľmi atď). Avšak dá sa použiť aj na takéto jednoduché akcie (nevyžaduje vyplnenie kategórie ani dlhého článku). Ak aj nie, môžeš sa aspoň inšpirovať :) |
||
Truuhlik Profil |
#7 · Zasláno: 28. 1. 2010, 00:25:47 · Upravil/a: Truuhlik
takže večer jsem teda zkoušel projít celý výtvor znovu - zapisování ok, vypsání z db taky ok, otevření na úpravu taky ok, smazání taky ok ale zastavím se u toho otevření pro úpravu - všechno se mi otevře ve formuláři který odesílám přes post dále už kód, ale prostě se mi to nezaktualizuje - pořád zůstává všechno stejné - nevíš kde dělám chybu?
$id = $_POST['id']; $nazev = $_POST['nazev']; $obsah = $_POST['obsah']; $soubor = file("novinky.txt"); $lines = "$id||$nazev||$obsah"; foreach($soubor as $single_line){ $data = explode("||", $single_line); if($data[0] == $id) continue; else{$lines .= $single_line;} } file_put_contents('novinky.txt, $lines, LOCK_EX); exit; |
||
Carrot Profil * |
#8 · Zasláno: 28. 1. 2010, 02:11:44
Truuhlik:
„1||Novinka||Text novinky“ Nebylo by lepší místo této prasečiny použít radši nějaký standardizovaný formát? Například XML? |
||
mylan Profil |
#9 · Zasláno: 28. 1. 2010, 12:09:20
Aj keď ideš na to okľukou, malo by to fungovať, len ti novinku zapíše na začiatok súboru, na úpravu by som použil túto konštrukciu:
<?php $file = file('./novinky.txt'); $lines = ''; foreach ($file as $single_line) { $data = explode('||', $single_line); if ($data[0] == $_POST['id']) $lines .= $_POST['id'] . '||' . $_POST['nazev'] . '||' . $_POST['obsah']; else $lines .= $single_line; } file_put_contents('./novinky.txt', $lines, LOCK_EX); ?> Ak to nefunguje, ukáž formulár, ktorým to odosielaš... |
||
Truuhlik Profil |
#10 · Zasláno: 28. 1. 2010, 13:02:50 · Upravil/a: Truuhlik
mylan:
hejky mockrát díky funguje to skvěle no zkoušel jsem zatím jenom jednoduchý formulář samozřejmě si to ještě doplním o vkládání smajlíků, tagů atd je to jen na ukázku http://www.zoryo.sweb.cz - ukázka jak to funguje $radku = file("novinky.txt"); foreach($radku as $single_line){ $data = explode("||", $single_line); if($data[0] != $id) continue; else{ $nazev = $data[1]; $obsah = $data[2]; echo "<table> <form action='?site=save' method='post'> <tr><td>Přidat novinku:<td><input type='hidden' name='id' value='".$data[0]."'></td></tr> <tr><td>Název novinky:</td><td><input type='text' name='nazev' size='20' value='$nazev'></td></tr> <tr><td>Obsah novinky:</td><td><textarea name='obsah' cols='40' rows='6'>".$obsah."</textarea></td></tr> <tr><td></td><td><input type='submit' value='Upravit novinku'></td></tr> </form> </table>"; } } |
||
Truuhlik Profil |
#11 · Zasláno: 28. 1. 2010, 13:08:14
Carrot:
čoveče proč prasárna? - nechci nic říkat, ale měl by ses mrknout po netu - je dost systémů běžících na této struktuře - mnews, cutenews dokonce tuším že i quick cms - jenom vydolovat z tama ty složité kódy, přitom tady tohle je tak jednoduché a bohatě to postačí na server, kde prostě DB neposkytují |
||
Truuhlik Profil |
#12 · Zasláno: 28. 1. 2010, 20:11:00 · Upravil/a: Truuhlik
ještě jednou díky moc všem
|
||
Carrot Profil * |
#13 · Zasláno: 28. 1. 2010, 21:42:29
Truuhlik:
„čoveče proč prasárna? - nechci nic říkat, ale měl by ses mrknout po netu - je dost systémů běžících na této struktuře“ Pak je navrhovali idioti. Pokud ukládám data do souborů (proti tomu nic), je velmi rozumné volit existující (a rozšířený) formát namísto bastlení vlastního. Když bys zvolil jako formát XML, na parsování i vytváření bys mohl v PHP použít desítky nativních a externích tříd. Samotný soubor by pak šel otevřít ve stovce různých programů. Dodržením určité konvence bys jej mohl rovnou použít jako RSS, přidáním XSLT bys ho mohl v Excelu zobrazit jako formátovanou přímo tisknutelnou tabulku. Všechno prakticky bez práce - stačí jenom nevymýšlet kokotiny. |
||
fopen Profil * |
#14 · Zasláno: 28. 1. 2010, 23:49:34
Carrot
co myslis, pouzit fgetcsv, fputcsv je tiez prasárna? csv format je tiez editovatelny v exceli... |
||
Carrot Profil * |
#15 · Zasláno: 29. 1. 2010, 11:40:28
fopen:
„co myslis, pouzit fgetcsv, fputcsv je tiez prasárna“ Ne, je to mnohem lepší než vlastní formát. Ale s CSVčkem toho moc nevykouzlíš - je to jenom dvourozměrná tabulka. |
||
Časová prodleva: 14 let
|
0