21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
« 1 2 »
Autor Zpráva
Davestark
Profil
Ahoj,
nevím si rady se zpracováním formuláře.

Mám formulář:

    <form method="post" action="prispevky.php">
    <input type="text" name="nadpis" value="nadpis">
    <input type="submit" value="Odeslat">
    </form>

a mělo by to vypsat nějak takto:

<h1>nadpis</h1>
<hr>

A tento výpis vložit do html nebo php za <body>
Půjde to nějak?
Předem díky za rady.
Davestark
Profil
prispevky.php
<h1> <?php echo $_POST["nadpis"]; ?></h1>
<br>
<hr>

Toto mi formulář zpracuje.
A poté výsledek z příspěvky.php potřebuji vložit/uložit do souboru
lionel messi
Profil
Davestark:
A poté výsledek z příspěvky.php potřebuji vložit/uložit do souboru
S tým ti pomôže funkcia file_put_contents (prečítaj si aj o jej druhom parametri).

prispevky.php
if (isset($_POST["nadpis"])) {
  $data = <<<DAT
<h1>$_POST["nadpis"]</h1>
<br>
<hr>
DAT;
  $filename = "subor.txt";
  file_put_contents($filename, $data);
}
smitka
Profil
Hned v začátcích bych doporučil naučit se ošetřovat vstupy - viz např. http://cs.wikipedia.org/wiki/Cross-site_scripting, jakmile se dostaneš k databázím, tak ještě http://php.vrana.cz/obrana-proti-sql-injection.php . Je to zkušenost, která se v budoucnu bude rozhodně hodit.

Můžeš ze začátku použít techniku "izolátorů" = na jednom místě v kódu si všechny $_GET, $_POST, $_COOKIE atd. uložíš do lokálních proměnných a ve zbytku kódu se ti už $_XY nesmí objevit, což lze jednoduše ověřit.

<?php
$nadpis = htmlspecialchars($_POST["nadpis"], ENT_QUOTES);
//dalsi zpracovani $_GET, $_POST, ...
?>
<h1> <?php echo $nadpis; ?></h1>
<br>
<hr>
Davestark
Profil
Ten nadpis je jen příklad. Ve finále formulář bude vypadat minimálně takto:

    <form action="process.php" method"post">
    <input type="text" name="nadpis" value="nadpis">
    <input type="text" name="name" value="name">
    <textarea rows="4" cols="50">Text. </textarea>
    <input type="submit" value="Odeslat">
    </form>

A já netuším jak to zapsat, když je tam toho tolik...
lionel messi
Profil
Davestark:
A já netuším jak to zapsat
Čo konkrétne potrebuješ dosiahnuť? K prvkom formulára môžeš pristupovať prostredníctvom $_POST["xxx"], kde xxx je hodnota atribútu name daného formulárového prvku.
Tomáš123
Profil
Davestark:
V tomto stave sa pravdepodobne údajom pod $_POST nedopátraš. Uprav si prvý riadok kódu.
Taps
Profil
Davestark:
<form action="process.php" method="POST">
Davestark
Profil
Tudíž to mám změnit na <form action="process.php" method="get"> nebo nemám method zadávat vůbec?

Toto je to co se mi vypíše z toho formuláře:
<h1><?php echo $_POST["nadpis"]?></h1><br>
<h3><?php echo "Vloženo " . date("Y/m/d")?> <?php echo $_POST["name"]?></h3><br>
<?php echo $_POST["text"]?>
<hr>

a vypsaná stránka vypadá:
<h1>nadpis</h1><br>
<h3>Vloženo 2015/02/07 jméno </h3><br>
Zde může být text.<hr>
Tomáš123
Profil
Davestark:
Tudíž to mám změnit na...
Nie, chýbal ti tam symbol "=".
Davestark
Profil
Ahá, díky, ale teď už tam "=" byl...

Teď už řeším jen jak tohle uložit:

<h1><?php echo $_POST["nadpis"]?></h1><br>
<h3><?php echo "Vloženo " . date("Y/m/d")?> <?php echo $_POST["name"]?></h3><br>
<?php echo $_POST["text"]?>
<hr>

Třeba pomocí file_get_contents, ale pořád si s tím lámu hlavu.
lionel messi
Profil
Davestark:
Třeba pomocí file_get_contents
Na ukladanie slúži file_put_contents, ako som už ostatne písal v [#3].

ale pořád si s tím lámu hlavu.
Čo konkrétne ti robí problém?
Davestark
Profil
Ten zápis nemůže vypadat takto:

<?php
$file = 'posts/posts.html';

<h1><?php echo $_POST["nadpis"]?></h1><br>
<h3><?php echo "Vloženo " . date("Y/m/d")?> <?php echo $_POST["name"]?></h3><br>
<?php echo $_POST["text"]?>
<hr>

file_put_contents($file, $person, FILE_APPEND | LOCK_EX);
?>

Já nevím jak výsledky těch proměnných vložit do toho file_put_contents.
Nevím jestli to říkám správně, php do jiného php.
Tomáš123
Profil
Davestark:
Ak som to správne pochopil, potrebuješ získané údaje zapísať do súboru, však.
Sú dve cesty:
1.) Pomocou file_put_contents (novšia funkcia, ktorá zastupuje celý druhý bod)
2.) Pomocou fopen, fwrite, fclose.

Je jednoduchšie, celý proces vykonať pomocou jednej funkcie. Mohlo by to vyzerať napríklad takto:
if (isset($_POST['nadpis'], $_POST['name'], $_POST['text'])) {
  $file = "subor.txt";
  $content = "<h1>".$_POST['nadpis']."</h1><br><h3>Vložené: ".date("Y/m/d")."</h3><br><p>".$_POST['text'];
  file_put_contents($file, $content, FILE_APPEND);
}
else {
  echo "<p>Musíte vyplniť všetky údaje.</p>";
}

Funkcia file_put_contents prijíma ako prvý parameter názov súbor, druhým je konkrétny obsah a ďalšie dva sú nepovinné. Uvedenie parametru FILE_APPEND zabezpečí, že nový obsah nenahradí ten pôvodný, ale pripojí sa na koniec.

V tvojom prípade neexistuje premenná, v ktorej by sa mal obsah nacádzať, nehovoriac o tom, že funkcia sa nevykonáva v skripte. Snáď som v tom mojom neurobil chybu. Vyskúšaj a keď tak sa ozvi.
lionel messi
Profil
Davestark:
Já nevím jak výsledky těch proměnných vložit do toho file_put_contents.
Išlo by to zhruba takto (zápisov je možných viacero, subjektívne najprehľadnejší mi prišiel tento:
<?php
$file = 'posts/posts.html';
 
$person = "<h1>". $_POST["nadpis"]. "</h1><br>";
$person .= "<h3>Vloženo"  . date("Y/m/d").  $_POST["name"]. "</h3><br>";
$person .= $_POST["text"]. "<hr>";

file_put_contents($file, $person, FILE_APPEND | LOCK_EX);
?>

Ešte lepšie je ošetriť to celé podmienkou kontrolujúcou existenciu premenných, pozri odpoveď Tomáša123 v predošlom príspevku.
juriad
Profil
Celé to (4. - 7. řádek) musíš uložit do proměnné:

<?php
$file = 'posts/posts.html';

# definujeme si šablonu, kde jednotlivá místa označíme pomocí %s (tak to chce funkce sprintf)
$template = '<h1>%s</h1>
<h3>Vloženo dne %s uživatelem %s</h3>
%s
<hr>';

$content = sprintf($template, 
  htmlspecialchars($_POST['nadpis']), # toto půjde na místo toho prvního %s
  date("Y/m/d"), # druhé %s
  htmlspecialchars($_POST['name']), #třetí %s
  htmlspecialchars($_POST['text'])); # čtvrté %s
 
$original = file_get_contents($file);
file_put_contents($file, $content . $origial);
?>

Doplněna chybějící závorka na 11. řádku
Doplněno přidávání na začátek.
Davestark
Profil
juriad:
na řádku 14 mi hlásí chybu. U lionel messi byla na ř.6 stačilo udělat "<hr>"

Tomáš123, lionel messi
Kód od vás funguje, díky. Který z nich mi spíše doporučíte?

A snad poslední dotaz: rád bych aby se to zapisovalo na začátek souboru ne nakonec... Půjde to?
lionel messi
Profil
Davestark:
Který z nich mi spíše doporučíte?
Tomášov [#14].
Tomáš123
Profil
Davestark:
rád bych aby se to zapisovalo na začátek souboru ne nakonec
Ak je súbor prázdny, samozrejme sa to zapíše na začiatok. Ak chceš, aby sa novinky písali zdola nahor, asi bude potrebné použiť aj funkciu file_get_contents.
if (isset($_POST['nadpis'], $_POST['name'], $_POST['text'])) {
  $file = "subor.txt";
  if (file_exists($file) {
    $default_content = file_get_contents($file);
    $content = "<h1>".$_POST['nadpis']."</h1><br><h3>Vložené: ".date("Y/m/d")."</h3><br><p>".$_POST['text'].$default_content;
    file_put_contents($file, $content, FILE_APPEND);
}
else {
  echo "<p>Musíte vyplniť všetky údaje.</p>";
}
Nerozumiem, prečo mi nevyznačuje kód. Ostatné kódy sú vyznačené... Zobrazuje sa vám, ostatným, môj kód farebne?

Moderátor juriad: Pokud to automatika nezvládne, použij jako počáteční značku [prephp]
lionel messi
Profil
Tomáš123:
Zobrazuje sa vám, ostatným, môj kód farebne?
Nie. keď píšeš PHP kód, môžeš použiť namiesto [pre] značku [prephp].

Pardon, namiesto zobrazenia náhľadu som príspevok rovno odoslal a tak som nechtiac zduplikoval juriadovu informáciu.
Tomáš123
Profil
V kóde bola chyba. Ak použiješ file_get_contents na záchranu údajov, nie je potrebné používať nepovinný parameter FILE_APPEND funkcie file_put_contents.

Ďakujem za pomoc juriad.
Davestark
Profil
Čili tatko?

<?php
if (isset($_POST['nadpis'], $_POST['name'], $_POST['text'])) {
  $file = "posts/posts.txt";
  if (file_exists($file) {
    $default_content = file_get_contents($file);
    $content = "<h1>".$_POST['nadpis']."</h1><br><h3>Vložené: ".date("Y/m/d")."</h3><br><p>".$_POST['text'].$default_content;
}
else {
  echo "<p>Musíte vyplniť všetky údaje.</p>";
}
?>
Tomáš123
Profil
Davestark:
Čili tatko?
Áno, jediné čo mi na tom kóde vadí je, že všetky premenné sú po anglicky, iba 'nadpis' nie. Ak to zmeníš, zaspím spokojnejší. :-)
juriad
Profil
A chybí ti tam file_put_contents za 6. řádkou.
Davestark
Profil
Dobře změním ten jazyk, až ten kód rozchodím.

Mám v tom ještě chybu na 6. řádku

<?php
if (isset($_POST['nadpis'], $_POST['name'], $_POST['text'])) {
  $file = "posts/posts.txt";
  if (file_exists($file) {
    $default_content = file_get_contents($file);
    $content = "<h1>".$_POST['nadpis']."</h1><br><h3>Vložené: ".date("Y/m/d")."</h3><br><p>".$_POST['text'].$default_content;
    file_put_contents($file, $content,)
}
else {
  echo "<p>Musíte vyplniť všetky údaje.</p>";
}
?>
Tomáš123
Profil
Davestark:
Mám v tom ještě chybu na 6. řádku
Jediné, čím si v kóde nie som istý je pripojenie pôvodného obsahu. Ak ten problém pretrváva aj po vymazaní poslednej bodky na riadku 6, pošli sem prosím znenie chyby.

Úprava: Vymaž čiarku za posledným parametrom na riadku 7 a doplň bodkočiarku (středník) na jeho koniec.
Davestark
Profil
Píše syntaktická chyba

Promiň byl to řádek 4

<?php
if (isset($_POST['nadpis'], $_POST['name'], $_POST['text'])) {
  $file = "posts/posts.txt";
  if (file_exists($file);
    $default_content = file_get_contents($file);
    $content = "<h1>".$_POST['nadpis']."</h1><br><h3>Vložené: ".date("Y/m/d")."</h3><br><p>".$_POST['text'].$default_content;
    file_put_contents($file, $content);
}
else {
  echo "<p>Musíte vyplniť všetky údaje.</p>";
}
?>
Tomáš123
Profil
Davestark:
Bodkočiarku na konci nahraď otváracou zloženou zátvorkou "{".
lionel messi
Profil
Tomáš123:
Davestark:
Bodkočiarku na konci nahraď otváracou zloženou zátvorkou "{".

Davestark:
A na 12. riadok dopíš uzatváraciu }.
Tomáš123
Profil
V celku by to malo byť takto:
<?php
if (isset($_POST['nadpis'], $_POST['name'], $_POST['text'])) {
  $file = "posts/posts.txt";
  if (file_exists($file) {
    $default_content = file_get_contents($file);
    $content = "<h1>".$_POST['nadpis']."</h1><br><h3>Vložené: ".date("Y/m/d")."</h3><br><p>".$_POST['text'].$default_content;
    file_put_contents($file, $content);
  }
}
else {
  echo "<p>Musíte vyplniť všetky údaje.</p>";
}
?>
Snáď sa tam už žiadny chyba nenájde.
« 1 2 »

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0