Autor Zpráva
novacek90
Profil
Ahoj chtěl jsem si napsat script pro vytvoření stránky, ale funguje mi pouze jedna část kódu. Ukážu na příkladu:

formular :
<form action="#" method="post" name="vytvoreni-stranky" >   
    <fieldset>
        <legend>Vytvoření nové stránky</legend>
      <label class="req">Název stránky:</label><br />
      <input type="text" name="name-page" /><br />
      <label class="req">Obsah stránky:</label><br />
      <textarea name="editor1"></textarea>
      <script type="text/javascript">
                CKEDITOR.replace( 'editor1' );
            </script>
      <label class="req">Titulka stránky:</label><br />
      <input type="text" name="title" /><br />
      <label class="req">Klíčová slova stránky:</label><br />
      <input type="text" name="keywords" /><br />      
      <label class="req">Popis stránky:</label><br />
      <input type="text" name="description" /><br />
      <label class="req">Autor:</label><br />
      <input type="text" name="author" /><br />
      <input type="submit" name="odeslat" value="Odeslat"> 
    </fieldset>          
</form> 

script

<?php
if (!empty($_POST)){                
  $strana = $_POST['name-page'];          
  $uprava = $_POST['editor1'];            
  $vytvoreni = fopen("../../web/obsah/".$strana.".php", "w+"); 
  fwrite($vytvoreni, $uprava);          
    if (fclose($vytvoreni)){                   
      echo("<p class='info'>Vytvoření stránky proběhlo úspěšně.</p>"); 
  }
//  $author = $_POST['author'];
//  $description = $_POST['description'];
//  $keywords = $_POST['keywords'];
//  $title = $_POST['title'];
  $newconf = fopen("../../web/conf/".$strana."-conf.php", "w+");
  $conf = "<?php
    $author = ".$_POST['author'].";
    $description = ".$_POST['description'].";
    $keywords = ".$_POST['keywords'].";
    $title = ".$_POST['title']."; ?>"   
                                            
  fwrite($newconf, $conf);
    if (fclose($newconf)){
      echo("<p class='info'>Vytvoření stránky proběhlo úspěšně 2.</p>");
    }
    else {
      echo("<p class='info'>Vytvoření stránky se nezdařilo. Zkuste opakovat akci. 2</p>")
    }
  else { 
    echo ("<p class='info'>Vytvoření stránky se nezdařilo. Zkuste opakovat akci.</p>");
  }
}


?>

ve scriptu mi funguje část jen vytvoření stránky.php ale stránku-conf.php mi k tomu nevytvoří, myslím že je chyba v $conf, že je v ní php kód, ale zase by to na to nemělo mít vliv, protože by to mělo brát jako textový řetězec, nebo ne??

Díky za radu
Tori
Profil
by to mělo brát jako textový řetězec, nebo ne??
Ne, máte to v uvozovkách, takže se proměnné nahrazují svými hodnotami. A jelikož $autor atd. nejsou definované, nahradí se prázdným řetězcem. Buď to dejte do apostrofů (v nich se proměnné nenahrazují), anebo escapujte dolary u proměnných v tom ukládaném PHP.
novacek90
Profil
Tori:
dejte do apostrofů

Zkoušel jsem to, ale asi špatně můžete mi ukázat jak to myslíte, jelikož mi to pořád nefunguje. Pročítám různé tutoriály atd. ale stále nic.
Tori
Profil
$conf = '<?php'.PHP_EOL
.'$author = "'.$_POST['author'].'";'.PHP_EOL
.'$description = "'.$_POST['description'].'";'.PHP_EOL
.'$keywords = "'.$_POST['keywords'].'";'.PHP_EOL
.'$title = "'.$_POST['title'].'";'.PHP_EOL
.'?>';
A možná (nevím, jak to máte udělané dál) by se ta POSTdata měla ošetřit proti vložení nežádoucího HTML/JS (např. pomocí htmlspecialchars).

↓ Děkuju za opravu.
Jan Tvrdík
Profil
Tori:
Nežádoucí HTML/JS je v tomhle případě minoritní problém. Hlavní problém je, že je náchylné na PHP injection =) Je potřeba to ošetřit pomocí var_export, viz také phpfashion.com/escapovani-definitivni-prirucka.
novacek90
Profil
Řekl bych že jsem to měl s uvozovkama podobně, ale neměl jsem tam to PHP_EOL. Ošetření už nějak zvládnu =)
Díky za radu už to funguje ;)
Jan Tvrdík
Profil
novacek90:
neměl jsem tam to PHP_EOL
To zrovna nemá na funkčnost vůbec žádný vliv, protože jednotlivé příkazy jsou od sebe stejně odděleny středníkem.
Tori
Profil
novacek90:
PHP_EOL obsahuje sekvenci pro zalomení řádku v daném OS (\n nebo \r\n), přidala jsem jen aby to bylo čitelnější i pro člověka.
novacek90
Profil
Jo aha :D já už jsem to PHP_EOL už někde viděl, ale nikdy jsem nějak nehledal co to je.

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