Autor | Zpráva | ||
---|---|---|---|
Folker Profil |
#1 · Zasláno: 8. 11. 2009, 18:07:03 · Upravil/a: Folker
Mám malou administraci. Vložené články se ukládají do textových souborů, jejichž obsah se načte do formuláře, kde si jej můžu upravit a znovu uložit. Ale s tím uložením je problém. Obsah souboru se nechce přepsat a zachovává původní hodnoty.
<?php if (isset($_POST['odeslat'])) { //po kliknutí na tlačíkto upravit se načtou data z textového souboru do formuláře $kategorie = $_POST['kategorie']; $otevrit_pro_cteni = fopen("soubory/clanky/".$kategorie.".txt","rt"); $obsah = fgets ($otevrit_pro_cteni,4096); list ($nadpis,$text,$datum) = explode ("|",$obsah); fclose ($otevrit_pro_cteni); ?> <!-- formulář pro editaci článku --> <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post"> <h3><?php echo $kategorie ?></h3> <p>Datum polední úpravy: <?php echo $datum; ?> <h3>Nadpis</h3> <input type="text" name="nadpis1" value="<?php echo $nadpis; ?>"> <h3>Text článku</h3> <textarea name="text1" cols="100" rows="15" style="width:100%;"> <?php echo $text; ?> </textarea> <input type="submit" name="submit" value="uložit" /> <input type="reset" name="reset" value="smazat" /> </form> <?php if (isset($_POST['submit'])) { // jakmile odešlu vyplněný formulář $datum1 = date('j.n.Y.H:i'); // vytvoří časový záznam o poslední úpravě souboru $nadpis1 = $_POST['nadpis1']; $text1 = $_POST['text1']; $nadpis1 = strip_tags($nadpis1); //odstraním nevhodné značky $nadpis1 = stripslashes($nadpis1); $text1 = strip_tags($text1); $text1 = stripslashes($text1); $otevrit_pro_zapis = fopen("soubory/clanky/".$kategorie.".txt","w"); //otevřu soubor $vlozit = $nadpis1.'|'.$text1.'|'.$datum1; // uspořádám data z formuláře fwrite ($otevrit_pro_zapis,$vlozit); // zapíši je do souboru fclose ($otevrit_pro_zapis); // a zavřu soubor } } else { $soubory=opendir('soubory/clanky'); // tato část se zobrazí jako první a načte názvy souborů spolu s tlačítkem upravit while (false!==($file = readdir($soubory))) { if ($file != "." && $file != ".." &&$file!=="Thumbs.db") { $file = basename ($file,".txt"); echo $file; ?> <form action="<?php $_SERVER['PHP_SELF']; ?>" method="post"> // tento formulář je to tlačítko upravit <input type="hidden" name="kategorie" value="<?php echo $file; ?>" /> // tento řádek řekne tomu scriptu nahoře, který soubor má použít <input type="submit" name="odeslat" value="upravit" /> </form> <hr /> <?php }} closedir($soubory); //tady zavřu adresář, ze kteého jsem tahal seznam souborů } ?> Prosím poraďte, kde dělám chybu!!! Prohlížeč žádnou chybu nehlásí. |
||
yFang Profil |
#2 · Zasláno: 8. 11. 2009, 19:52:16
Folker:
Máš nastavena na serveru práva k zápisu? |
||
Folker Profil |
#3 · Zasláno: 8. 11. 2009, 20:03:04 · Upravil/a: Folker
Spouštím to na lokálním serveru ve windows. S tím nemám problém. Když odpářu to načtení ze souboru, tak to normálně běhá. Ale jak je to celé, tak je to v pr......:-)
|
||
AM_ Profil |
#4 · Zasláno: 8. 11. 2009, 20:23:44
Ten kód je dost zmatečný, těžko se v něm vyznat; škoda, že neodsazuješ bloky.
Zkus si, jestli se program vůbec dostane k tomu zápisu a ten selže, nebo to tu větev úplně obejde, jak je to napatlané jedno přes druhé, není struktura kódu moc patrná. |
||
Folker Profil |
#5 · Zasláno: 8. 11. 2009, 21:51:27
AM:
Omlouvám se za předchozí nepřehlednost zaslaného kódu. Trochu jsem to okomentoval a porozděloval. Jak ověřím, jestli se program dostane k té části kódu, která vkládá data do souboru? Na pohled to vypadá, že všechno funguje, ale když ten soubor načtu znovu, zjistím, že se nic nezměnilo. I časový údaj o poslední změně je pořád původní. |
||
AM_ Profil |
#6 · Zasláno: 8. 11. 2009, 23:52:47 · Upravil/a: AM_
Folker:
jednoduše, před fopen dáš třeba echo "jupii sem tu"; Luxusní možnost je použít debugger, pokud máš zájem něco si o tom najdi a nauč se s tím (já debuguju v PHPEd), to ti umožní sledovat program příkaz po příkazu a zjistit, co se přesně kde děje, aniž bys někam musel cpát echo. Co se týče tvého formátování kódu, platí uzance, že kód v každém bloku {} se odsazuje o tabulátor, takto nějak: if ($neco) { prikaz; prikaz; for (;;) { prikaz; } } pak je z toho vidět jasně struktura programu. |
||
Folker Profil |
#7 · Zasláno: 9. 11. 2009, 18:16:26
To echo jsem zkoušel vložit jak si psal, ale bez úspěchu. Po odeslání formuláře naskočí zpět výpis článků. Zkusil jsem to také vložit hned za
if (isset($_POST['submit'])) { Kdyby tě snad ještě něco napadlo, dej prosím vědět. |
||
Folker Profil |
#8 · Zasláno: 11. 11. 2009, 19:28:49
Už jsem na to přišeeeeeeeeeeeeeeel.
Problém byl v tom, že při stisku tlačítka "submit" na řádku 21 začne prohlížeč procházet kód opět od začátku a když narazí na podmínku s tlačítkem "odeslat" tak zjistí že tato podmínka už neplatí a přeskočí rovnou na else. Řešení: Místo podmínky v podmínce jsem vytvořil strukturu if { }elseif{ }else{ } A je to. Díky za podnětné připomínky a nápady:-) |
||
Časová prodleva: 5 měsíců
|
|||
Vopiatos Profil |
#9 · Zasláno: 14. 4. 2010, 22:05:47
Jak jsto prosim tě změnil , kam si nacpal
if { }elseif{ }else{ } mam problem s uložením - nic se neuloží. |
||
AM_ Profil |
#10 · Zasláno: 15. 4. 2010, 09:23:55
Vopiatos:
Tvůj problém bude zřejmě úplně jiný, pokud se chceš řídít výše vypsaným vepřovým kódem (formátování je opravdu hrozné, struktura kódu ještě jakž takž), nepočítej moc s tím, že jeho autor se sem ještě někdy vrátí - byl tu naposled před půl rokem. |
||
Časová prodleva: 13 let
|
0