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 |
#2 · Zasláno: 19. 2. 2012, 11:40:35
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 |
#3 · Zasláno: 19. 2. 2012, 12:03:11
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 |
#6 · Zasláno: 19. 2. 2012, 12:27:11
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 |
#8 · Zasláno: 19. 2. 2012, 19:33:56
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 |
#10 · Zasláno: 22. 2. 2012, 10:27:42
Uz mi to funguje. Musel jsem to trosicku poupravovat. Diky vsem za rady.
|
||
jenikkozak Profil |
#11 · Zasláno: 22. 2. 2012, 10:47:43
asseN:
Když už tu máme sbírku chybného kódu, nepřidáš správné řešení? |
||
Časová prodleva: 3 dny
|
|||
AoJ.HgTS Profil |
#12 · Zasláno: 25. 2. 2012, 19:03:31
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 |
#14 · Zasláno: 25. 2. 2012, 23:45:58
asseN:
„Zápis do databáze?“ Ano. |
||
Časová prodleva: 12 let
|
0