Autor Zpráva
asseN
Profil
Dobrý den,
mám problém, chtěl jsem v administraci nastavit, že když správce zadá adresu stranka_upravit.php?id=uvod tak to vezme soubor ze složky ../stranky/hlavni_stranka/uvod.php a dále to může upravovat v textarea a pak uložit zpátky do toho souboru uvod.php.
Když v souboru uvod.php je text tak v textarea nic není a smaže to i obsah souboru uvod.php
Například -> stranka_upravit.php?id=novinky vezme to soubor ../stranky/hlavni_stranka/novinky.php
Nevíte, kde mám chybu? Snažil jsem se to několikrát upravovat a nic. Stále stejný problém.

Kód:
<?php
    if(isset($_GET["id"])) 
    $stranka = $_GET["id"].".php";
    $retezec = substr($stranka, 0, -4);
    if(file_exists("../stranky/hlavni_stranka/$stranka")) 
    if (isSet($_REQUEST['ulozit'])){
    file_put_contents("../stranky/hlavni_stranka/$stranka",$_POST['editor1']);  
    } 
    $editor1 = file_get_contents("../stranky/hlavni_stranka/$stranka");
    ?>
<form method="post" action="stranka_upravit.php?id=<?php echo $retezec;?>">
<textarea id="editor1" name="editor1"><?php echo $editor1;?></textarea>
<br><input type="submit" value="Uložit" name="ulozit" id="ulozit">
</form></div>

Děkuji za odpoveď
Sir Tom
Profil
asseN:
Také dobrý den, problém bude asi v tom smazaném obsahu souboru - viníka bych hledal v podmínce s $_REQUEST. Co se stane, když nepoužiješ file_put_contents()? Obsah se načte? Do action napiš "stranka_upravit.php?id=<?php echo $retezec;?>&ulozeno=ulozit" a uprav podmínku s $_REQUEST na (isset($_POST["ulozeno"]) AND $_POST["ulozeno"]=="ulozit"). Jinak $retezec je totožný s $_GET["id"] -> nemusíš používat substr a dokonce ani není potřeba ta proměnná $retezec.
asseN
Profil
Když smažu file_put_contents(), obsah se v pohodě načte, ale zase nejde upravit.
Smazal jsem $retezec a psalo to chybu Warning: file_get_contents(../stranky/hlavni_stranka/uvod.php.php
V tom $retezec jsem si nastavil ze to vypise jen "uvod" misto "uvod.php"

<?php
    if(isset($_GET["id"])) 
    $stranka = $_GET["id"].".php";
    $retezec = substr($stranka, 0, -4);
    if(file_exists("../stranky/hlavni_stranka/$stranka")) 
    if(isset($_POST["ulozeno"]) AND $_POST["ulozeno"]=="ulozit");
    $editor1 = file_get_contents("../stranky/hlavni_stranka/$stranka");
    ?>
<form method="post" action="stranka_upravit.php?id=<?php echo $retezec;?>&ulozeno=ulozit">
<textarea id="editor1" name="editor1"><?php echo $editor1;?></textarea>
<br><input type="submit" value="Uložit" name="ulozit" id="ulozit">
</form></div>
jenikkozak
Profil
asseN:
Prospělo by tobě i tvému kódu, kdybys konstrukce if zapisoval se složenými závorkami. Za podmínkou se středník nedělá. Mrkni se někam na základy syntaxe.

Ten $retezec fakt vyhoď. I zde platí, že zřejmě ještě úplně nevíš, co ty řádky znamenají.
Sir Tom
Profil
asseN:
Když smažu file_put_contents(), obsah se v pohodě načte, ale zase nejde upravit.
Ano - to je důkaz, že ten problém se smazaným obsahem dělá právě file_put_contents() - resp. ta podmínka, která jej spouštěla.
Upravil jsi to jinak, než jsem myslel. Měl jsi upravit jenom podmínku.

<?php
    if(isset($_GET["id"])){ 
    $stranka = $_GET["id"].".php";
    $retezec = substr($stranka, 0, -4);
    if(file_exists("../stranky/hlavni_stranka/$stranka")){
     if(isset($_POST["ulozeno"]) AND $_POST["ulozeno"]=="ulozit"){
      file_put_contents("../stranky/hlavni_stranka/$stranka",$_POST['editor1']);  
     } 
     $editor1 = file_get_contents("../stranky/hlavni_stranka/$stranka");
    }else{
      $editor1 = "Obsah neexistuje!";
    }
    }
    ?>
<form method="post" action="stranka_upravit.php?id=<?php echo $retezec;?>&ulozeno=ulozit">
<textarea id="editor1" name="editor1"><?php echo $editor1;?></textarea>
<br><input type="submit" value="Uložit" name="ulozit" id="ulozit">
</form></div>

S tím $retezec jsem to myslel tak, že nejdřív si do $stranka načteš $_GET["id"] a přidáš ".php" (4 znaky na konec) a následně vytvoříš $retezec, kde ty 4 znaky z konce $stranka odebereš. Chyba to není, ale je to zvláštní.
Tori
Profil
asseN:
Tohle: $stranka = $_GET["id"].".php"; bych změnila na $stranka = basename($_GET["id"]).".php";, zabrání se tak tomu, aby uživatel mohl zadat i cestu k souboru a editovat kterýkoli skript (např. ?id=../../stranka_upravit).
asseN
Profil
Sir Tom:

Díky, zkouším to na wamp serveru a stále se mi to neche uložit.

Tori:

Díky, opravil jsem to. :)
asseN
Profil
Stále nemůžu přijít, proč to nechce uložit. :(
A zase když mi to zapisovat jde, tak se obsah souboru při dalším spuštění odstraní.
peta
Profil
Posli kod s vsemi novymi zmenami. Nejspis tam mas ve spatnem poradi nacteni a prepisovani souboru. nebo nezamykas soubory v pripade vice uzivatelu pracujicich s jednim souborem.
asseN
Profil
Uz mi to funguje. Musel jsem to trosicku poupravovat. Diky vsem za rady.
jenikkozak
Profil
asseN:
Když už tu máme sbírku chybného kódu, nepřidáš správné řešení?
AoJ.HgTS
Profil
asseN:
tvůj kód obsahuje velké mnosžtví vážných bezpečnostních, napsal bych děr, ale v tomhle případě spíše dveří. Nenačítej soubory podle jejich názvu z url, dá se poté načíst jakkýkoliv jiný soubor.
asseN
Profil
A jak je lepší načítat všechny soubory ve složce? Zápis do databáze?
Sir Tom
Profil
asseN:
Zápis do databáze?
Ano.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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