Autor Zpráva
Folker
Profil
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; 
?>&nbsp;&nbsp;&nbsp;&nbsp;<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
Folker:
Máš nastavena na serveru práva k zápisu?
Folker
Profil
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
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
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
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
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'])) {
, ale také bez úspěchu. Ještě zkusím ten debuger. V každém případě díky.
Kdyby tě snad ještě něco napadlo, dej prosím vědět.
Folker
Profil
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:-)
Vopiatos
Profil
Jak jsto prosim tě změnil , kam si nacpal
if {
}elseif{
}else{
}


mam problem s uložením - nic se neuloží.
AM_
Profil
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.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0