Autor Zpráva
Martin02
Profil
Dobrý den, vytvořil jsem si script, ve kterém si návšěvník může vybrat stránku, kterou chce upravit, a pak ji upraví (jednoduché CMS). K zobrazení kódu souboru používám funkci file_get_contents. Když ale script jde dál, přestane fungovat a soubor se neupraví.
<h2>Úprava textů</h2>
<hr />
<p style="text-align: center;" class="odkazy"><a href="./access.php?ul=uprava&ul_uprava=uvod" title="Upravit Úvodní stránku">Úvod</a> | <a href="./access.php?ul=uprava&ul_uprava=stredisko" title="Upravit stránku Středisko">Středisko</a> | <a href="./access.php?ul=uprava&ul_uprava=zakladny" title="Upravit stránku Základny">Základny</a> | <a href="./access.php?ul=uprava&ul_uprava=oddily" title="Upravit stránku Oddíly">Oddíly</a> | <a href="./access.php?ul=uprava&ul_uprava=informace" title="Upravit stránku Všeobecné informace">Informace</a> | <a href="./access.php?ul=uprava&ul_uprava=akce" title="Upravit stránku Akce">Akce</a></p>

<?php
  if(isset($_GET['ul_uprava']) OR $_GET['ul_uprava'] != "") {
  switch($_GET['ul_uprava']) {
    case 'uvod':
      $_SESSION['nazev'] = "Úvod";
      $_SESSION['adresa'] = "../includes/uvod.php";
      $nazev = "Úvod";
      $adresa = "../includes/uvod.php";
      break;
    case 'stredisko':
      $_SESSION['nazev'] = "Středisko";
      $_SESSION['adresa'] = "../includes/stredisko.php";
      $nazev = "Středisko";
      $adresa = "../includes/stredisko.php";
      break;
    case 'zakladny':
      $_SESSION['nazev'] = "Základny";
      $_SESSION['adresa'] = "../includes/zakladny.php";
      $nazev = "Základny";
      $adresa = "../includes/zakladny.php";
      break;
    case 'oddily':
      $_SESSION['nazev'] = "Oddíly";
      $_SESSION['adresa'] = "../includes/oddily.php";
      $nazev = "Oddíly";
      $adresa = "../includes/oddily.php";
      break;
    case 'informace':
      $_SESSION['nazev'] = "Všeobecné informace";
      $_SESSION['adresa'] = "../includes/informace.php";
      $nazev = "Všeobecné informace";
      $adresa = "../includes/informace.php";
      break;
    case 'akce':
      $_SESSION['nazev'] = "Střediskové akce";
      $_SESSION['adresa'] = "../includes/akce.php";
      $nazev = "Střediskové akce";
      $adresa = "../includes/akce.php";
      break;
  }
    echo "<p>Zde můžete měnit text stránky $nazev</p>";
    echo '<form action="./zapis_textu.php" method="post">';
    echo '<textarea cols="60" rows="16" name="uprava">'.file_get_contents($adresa).'</textarea>';
    echo '<p><input type="submit" value="Upravit stránku '.$nazev.'"></p>';
    echo '</form>';
  } else {
    echo "<p>Vyberte stránku, kterou chcete upravit.</p>";
    if(isset($_SESSION[htv])) {
      echo $_SESSION['htv'];
    }
  }
  
?>

Tahle část ještě funguje, ale problém nastává při odeslání formuláře na soubor zapis_textu.php
<?php
  session_start();
  $adresa = $_SESSION['adresa'];
  $text_pro_upravu = $_POST['uprava'];
  $id = fopen($adresa, "w");
        fwrite($id, $text_pro_upravu);
        fclose($id);
  
  $nazev = $_SESSION['nazev'];
  $_SESSION['htv'] = "echo 'Text stránky'.$SESSION['adresa'].'byl upraven.';";
  echo '<script type="text/javascript">
          window.location.href="./access.php?ul=uprava";
        </script>';


?>

Myslím, že problém je ve funkci file_get_contents, protože když provedu změnu souboru, která se nedokončí a podívám se do zdrojového kódu souboru zapis_textu.php (v prohlížeči) zobrazí se mi zdrojový kód tohoto souboru, ale přímo kód php, takže asi bude problém v tom, že funkce přetrvává, a tím se k=od neprovede, ale jen zobrazí.
ybznek
Profil
četl jsem si asi 3x v čem je problém a nepochopil jsem, co se vlastně děje

nevím, co načítáš v těch souborech, ale já bych tam dal asi
echo '<textarea cols="60" rows="16" name="uprava">'.htmlspecialchars(file_get_contents($adresa)).'</textarea>';
- zkus, neručím za to

btw. když už používáš
file_get_contents()
tak jsem použít také
file_put_contents()
pro zápis
Martin02
Profil
Zkusil jsem to htmlspecialchars(file_get_contents($adresa)), ale nic. Jak mám použít to file_put_contents() pro zápis? kam to dát?

Vlastně mi jde jen o to, že když odešlu formulář s daty, které se mají upravit, zobrazí se mi soubor uprava_zapis.php, kde vůbec nic není (přičemž je v něm php kód), ale když si otevři zdroják (v prohlížeči), tak se mi zobrazí kód php, který se neprovedl a v tom je problém. Nejspíš je to tou funkcí file_get_contents(), který dokáže zobrazit kód, ale když se formulář odešle, funkce nejspíš přetrvává a kód php, který má zapsat do souboru změněná data se jen zobrazí, ale nevykoná.
Jake898
Profil
Na začátku scriptu ti chybí session_start();.
Martin02
Profil
nechybí, ten kód není celý a začátek sesion je ještě před tím
Jake898
Profil
Jsou tam nějaké chyby v syntaxi (řádek 52 v prvním souboru, řádek 10 v druhém), ale po opravení mi to fungovalo. Máš správně nastavená práva k zápisu?
Martin02
Profil
A poslal bys mi opravenou verzi? Mě to nefungovalo i když jsem vymazal vše ohledně tý session[htv] (napsání, že soubor byl upraven). A ano, mam nastavená práva správně.

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:

0