« 1 2 »
Autor Zpráva
Molny
Profil *
Ahoj,
potřebuji aby se z odeslaného formuláře zapsali data pomocí PHP scriptu do souboru news.txt
Zatím jsem to řešil takto, ale uložila se pouze statická data (<br>,<b>,...)

HTML soubor - index.html

<html> 
<body> 

<form method="post" action="zpracovat.php" accept-charset="windows-1250"> 
Jméno: 
<input type="text" name="jmeno" size="50" maxlength="15"><br> 
Text novinky: 
<textarea name="text" rows="5" cols="38"></textarea><br> 
<input type="submit" value="Uložit novinku"> 
<input type="reset" value="Reset"> 
</form> 

</body> 
</html> 



PHP soubor - zpracovat.php


<?php 
$data = file_get_contents("news.txt"); 

$f =fopen("news.txt", "w"); //otevření souboru 

fwrite($f, "<b>".$jmeno."</b><br>".$text."<hr>".$data); 

fclose($f); 
echo("Novinka uložena "); 
?> 



Prosím poraďte jak na to, ale jako pro blbce (teprve se pomalu učím a toto docela hoří)



kamarad mi psal že:

Musíš si v tom PHP skriptu vytáhnout proměnné z globálního pole POST:

$jmeno = $_POST['jmeno']; 
$text = $_POST['text'];



ale nevím jak to přesně zapsat dotoho kodu aby šel, co stím? jak to má přesně vypadat?
děkuji předem

Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Buk
Profil *
Pokud má input name="jmeno" a textarea name="text" a je uvedeno method="post", ukládá se to v PHP pro přidání do obsahu souboru takto
file_put_contents("news.txt", $_POST["jmeno"].$_POST["text"].file_get_contents("news.txt"));
Molny
Profil *
ehm... děkuji ale nějak tomu nerozumím :(:(, tady přikládám přesný příklad co potřebuji, ztoho to pochopíš, tak to prosím skus hodit dotoho php souboru a uploadnout... byl bych ti moc vděčný! :)))

www.ulozisko.sk/264063/2009_06_08_18_03_39_demo.zip
TomasJ
Profil
Molny:

<?php 

$f =fopen("news.txt", "a");
/* !!! pro přidání dalšího údaje je třeba použít parametr otevírání "a" ... Parametr "w" vymaže obsah souboru a začne psát nový! */

fwrite($f, "<b>".$_POST['jmeno']."</b><br>".$_POST['text']."<hr>");
fwrite($f,"\n");
/* pro další uložení na nový řádek (kvůli přehlednosti) použijte na konci textu  \n  to vytvoří pro příště nový řádek
nový fwrite(); jsem dal kvůli přehlednosti */
fclose($f); 
echo "Novinka uložena."; 
?>
TomasJ
Profil
Molny:
Musíš si v tom PHP skriptu vytáhnout proměnné z globálního pole POST:

$jmeno = $_POST['jmeno'];
$text = $_POST['text'];

Je jedno jestli použijete
$_POST['jmeno'];
nebo
$jmeno;
... funkce je stejná ale $_POST přijímá proměnné pouze odeslané pomocí metody POST tedy pomocí <form>.
Keeehi
Profil
TomasJ:
No jedno to není, záleží na na stavení servru. (Register globals)
Hlavně, pokud jsou register globals zapnuté, tak pozor na bezpečnost!
Molny
Profil *
Velice ti děkuji! Ano!, už to funguje :)))) děkuji vám za pomoc
Molny
Profil *
Chci se zeptat, pokud mám $f =fopen("news.txt", "a"); tak to píše zespoda nahoru, ale já potřebuji ze shora dolu, jak? co máám dosadit místo a?
Buk
Profil *
Nejjednodušeji takto.
Soubor zpracovat.php:
<?php
$jmeno = strip_tags($_POST["jmeno"]);
$text = strip_tags($_POST["text"]);
file_put_contents("news.txt", file_get_contents("news.txt")."<b>".$jmeno."</b><br>".$text."<hr>");
?>
Molny
Profil *
špatně jsem se vyjádřil, tedka je nahoře na stránce první příspěvěk a poslední dole, já potřebuji aby nahoře byl ten nejnovější a ty nejstarší by se posouvali dolů, jak?
TomasJ
Profil
Molny:
zkus ještě:
<?php
$a = file_get_contents("news.txt");
$f =fopen("news.txt", "w");
fwrite($f, "<b>".$_POST['jmeno']."</b><br>".$_POST['text']."<hr>"."\n".$a);
fclose($f); 
echo "Novinka uložena."; 
?>



Zde test podle tvé struktury takže klikni na odkaz napiš něco a pak odešli ... pak se řiď podle instrukcí na webu
AM_
Profil
[#11] TomasJ
To je akorát zdlouhavěji napsané (a nezabezpečené!) toto: [#9] Buk.Ledaže by neměl PHP5, kde není file_put_contents, ale kromě webzdarma má php5 snad každý slušný hosting.

Správně a stručně je toto:
<?php
$jmeno = htmlspecialchars($_POST["jmeno"]); //Buk: Problémy řešíme, nezametáme pod koberec
$text = htmlspecialchars($_POST["text"]);
file_put_contents("news.txt", "<b>".$jmeno."</b><br>".$text."<hr>".file_get_contents("news.txt"));
?>


//Edit: TomasJ opraveno; omlouvám se, četl jsem sice dobře, ale zkopíroval špatný kus (spíš je zajímavé, proč to Buk napsal dobře a o pár příspěvků níže špatně).
TomasJ
Profil
AM_:
Špatně jste četl...

„já potřebuji aby nahoře byl ten nejnovější a ty nejstarší by se posouvali dolů“
TomasJ
Profil
Molny:
Takže tu máš Správné řešení, ošetřené by AM_ a mnou EDITOVANÉ podle tvých představ.

Zde máš přidanou i funkci datumu a času (aby jsi věděl kdy byla novinka poslána)
<?php
$jmeno = htmlspecialchars($_POST["jmeno"]);
$text = htmlspecialchars($_POST["text"]);
file_put_contents("news.txt", date('d.m.Y').date(' H:i:s')." - <b>".$jmeno."</b><br>".$text."<hr>"."\n".file_get_contents("news.txt"));
/* AM_  zapomněl jste vytvořit nový řádek ( "\n" - ten je kvůli přehlednosti v souboru)*/
?>


Test Z D E tam máš i náhled na finální soubor news.txt (náhled v html)

EDIT: Nezapoměn samozřejmě nastavit přístup k souboru na 777 !
Molny
Profil *
velmi ti děkuji! Ještě mám ale poslední dotaz. Chtěl bych se zeptat podle toho tvého kodu jestli by šlo este pomocí nějakého skriptu vytáhnout IP tooho dotyčného který odeslal novinku? jak máš "jmeno" "text novinky" tak se chci zeptat něco jako ten cas odeslani jestli by šlo aby se tam napsala jeho ip (z ktere to bylo odeslano) děkuji moc předem :)
Molny
Profil *
A ktomu poslední dotaz, pokud nic nevyplním tak novinka se stejně odešle :( s prázdným textem, šlo by udělat že pokud nevyplní jedno pole tak se to neodešle? a třeba mu to hodí chybu?
AM_
Profil
[#15] Molny
IP se nachází v $_SERVER['REMOTE_ADDR']. Není ale úplně košér zobrazovat IP uživatelů veřejně na webu, je to tak trochu citlivý elektronický údaj. Můžeš si ji ale zaznamenávat někam stranou, nebo např. spousta serverů vypisuje pouze první dva nebo tři byty (př. 123.123.xxx.xxx).

Molny:
naprosto triviální podmínkou,
if (trim($_POST['text']) == ''){
  echo 'neni vyplnen text';
} else {
  //odeslat
}
Molny
Profil *
jenom se chci zeptat, ta podmínka má jít do toho php souboru nebo do indexu? jelikož ten index kde se vyplnuje mám v html a ten php

<?php
$jmeno = htmlspecialchars($_POST["jmeno"]);
$text = htmlspecialchars($_POST["text"]);
file_put_contents("news.txt", date('d.m.Y').date(' H:i:s')." - <b>".$jmeno."</b><br>".$text."<hr>"."\n".file_get_contents("news.txt"));
/* AM_  zapomněl jste vytvořit nový řádek ( "\n" - ten je kvůli přehlednosti v souboru)*/
?>

-----------------------
a ohledně té IP, ano klidně ale tedy chtěl bych si tedy udělat klidně v php stránku která mi bude číst ze stránky kde budou uložené novinky "text.txt" a na tu stránku by to třebaa napsalo přesný čas odeslání a vedle toho IP kdo to poslal... jak říkáš "stranou".. jak tedy? :) promin jestli mám hloupé otázky učím se
AM_
Profil
tou podmínkou obalíš ten ukládací skript, jak jsem naznačil komentářem "//odeslat".
Ukládat IP stranou jsem myslel do jiného souboru, kam návštěvníci nemají přístup, protože IP adresa ostatních návštěvníku skutečně není nic, co by měli vědět. Bylo by to čistě pro tvé potřeby (např. banování lidí, kteří do stránky vkládají nevhodný obsah nebo se ji pokoušejí nabourat).
Molny
Profil *
Ano přesně tak! stou IP, taky pro tento účel, chci to aby tam nepsali blbosti apod a abych to měl pod kontrolou.... a ty tedy víš jak udělat stránku kam se mi bude ukládat IP dotyčného + datum a čas kdy co psal? nebo proste IP a něco aby tam nebyla jen IP bez toho aby poznal co psala ta ip... já tedy nevím jak bych to mohl udělat :/ víš?
Molny
Profil *
a tedy jak jsme říkali ohledně toho prázdného pole.... skript jak je <input type="submit" value="Odeslat stížnost">
a to nemůžu přeci obalit :

if (trim($_POST['text']) == ''){
  echo 'neni vyplnen text';
} else {
  //odeslat
}



když ten skript mám v HTML, tedy aspon nevím jak
AM_
Profil
Molny:
Stačilo by trochu přemýšlet. Pokud bys touhle podmínkou obalil HTML, znamenalo by to, že, v momentě, kdy uživatel přijde na stránku, a tedy ještě neměl šanci cokoli vyplnit:
- pokud vyplnil text, tak zobrazit formulář pro vyplnění
- pokud text nevyplnil, upozornit ho na to
To je dost velký nesmysl, ne?
Mimochodem, HTML je značkovací a nikoli skriptovací jazyk, takže když někde čteš skript, tak to určitě není HTML ;)

a ty tedy víš jak udělat stránku kam se mi bude ukládat IP dotyčného + datum a čas kdy co psal?
Pokud umíš zapisovat do souboru, používat proměnné a funkci date(), tak to víš taky. Zapoj vlastní snahu, není to o nic těžší (ba naopak), než napsat to, co jsi zatím napsal). Pokud ne, promiň, ale to tě učit nebudu, na internetu je tutoriálů základů PHP dost a od toho tu diskuse není.
Molny
Profil *
Mám to hotové, děkuji za rady ;)
JonnyN22
Profil
Jak je možné, že když skopíruju všechny zdrojové kódy a dám je na stejný hosting tak to nefunguje, kopíroval jsem odtud...
Prosím nějakou radu pro opravdu hodně nechápajcí. :(

EDIT: Práva samozřejmě na 777 mám nastavené.
David1256
Profil
Jestli si kopíroval pouze odtamtud je jasné, že ti to nefunguje, protože php scripty se ti nezobrazují, když kopíruješ ze zdrojáku a bez nich ti to jít ani nemůže.
David1256
Profil
Chtěl bych se ještě zeptat, jak to zdokonalit, aby se mi po odeslání formuláře nenačetla stránka zpracovat.php, ale aby mi to zůstalo na stejné stránce protože news.txt mám includly pod formulářem.

Kód formuláře + include news.txt:
<form method="post" action="zpracovat.php" accept-charset="windows-1250"> 
<table> 
<tr> 
<td>Jméno:</td> 
<td><input type="text" name="nick" size="50" maxlength="15"></td> 
</tr> 
<tr> 
<td>Text novinky:</td> 
<td><textarea name="text" rows="6" cols="38"></textarea></td> 
</tr> 
</table> 
<br> 
<input type="submit" value="Uložit novinku"> 
<input type="reset" value="Reset"> 
</form>
<br> 

<? include "news.txt"; ?>


zpracovat.php:
<?php
$nick = htmlspecialchars($_POST["nick"]);
$text = htmlspecialchars($_POST["text"]);
file_put_contents("news.txt", date('d.m.Y').date(' H:i:s')." - <b>".$nick."</b><br>".$text."<hr>"."\n".file_get_contents("news.txt"));
?>
JonnyN22
Profil
David1256:
Můžu se zeptat jestli je tvůj kód funkční?
Mě totiž při použití napíše stránka tohle:
Warning: file_get_contents() [function.file-get-contents]: Unable to access news.txt in /home/free/ic.cz/j/jonnyn22/root/www/test/zpracovat.php on line 4

Warning: file_get_contents(news.txt) [function.file-get-contents]: failed to open stream: No such file or directory in /home/free/ic.cz/j/jonnyn22/root/www/test/zpracovat.php on line 4

Warning: file_put_contents(news.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/free/ic.cz/j/jonnyn22/root/www/test/zpracovat.php on line 4

A už opravdu nevím co s tím...
Soubor existuje a je nastavenej na 777.
Poradí mi prosím někdo?....
Davex
Profil
Soubor s tímto názvem ve složce test/ opravdu neexistuje. Vyskytuje se tam pouze soubor s úplně jiným jménem news.TXT.
JonnyN22
Profil
Moc moc děkuju, už to funguje perfektně. Kdybych mohl nějak pomoct tak stačí napsat nejlíp na mail [jonnyn22@gmail.com]
Ještě jednou dík.
David1256
Profil
Rád bych ještě připomenul dotaz [#26], protože se nějak od něj odvedla řeč a dosud nebyl zodpovězen.
« 1 2 »

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: