Autor Zpráva
Babameta
Profil *
Dobrý den,
mám problém s jednoduchou diskusí v php... V tomto jazyku jsem naprostý začátečník takže to určitě bude nějaká banální chyba :-). Předem se za to omlouvám :-).
Ale k věci:
Mám soubor navstevnikniha.php:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> 
<head> 
<title>Návštěvní kniha</title> 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> 
 <link rel="stylesheet" href="style.css" type="text/css" media="screen, projection">
</head> 
<body> 
<form action="vyhodnoceni.php" method="post"> 
<b>Jméno:*</b><input type="text" name="jmeno"><br> 
<b>E-mail:</b><input type="text" name="email"><br>
<input type="text" name="text"><br> 

<input type="submit" value="Odeslat" cols="50" rows="30"> 
</form> 
  
 <p>* položky označené hvězdičkou jsou povinné</p>
 
<?php
$handle = fopen("diskuse.txt", "r");
  if ($handle)
    echo "<br>";
  else
    die("Otevření souboru selhalo.");

$nacteno = fread($handle);
 echo "<b>Diskuse:</b><br> ", $nacteno;
?>

<div id="diskuse">
</div>
</body> 
</html>
</body>
</html>	


a pak soubor vyhodnoceni.php:
<?php
 $jmeno = $_POST["jmeno"];
$email = $_POST["email"];
$text = $_POST["text"];

$handle = fopen("diskuse.txt","a");
fclose($handle);

$handle = fopen("diskuse.txt","a");
fwrite($handle, ".$jmeno");
fwrite($handle, ".$email");
fwrite($handle, ".$text");
fclose($dhandle);
?>


Jak by to mělo fungovat asi poznáte. Zdá se že všechno funguje dobře až na zapisování do souboru (pro jistotu jsem ho i založil, kdyby byl problém v tom, že si ho php samo neumí založit ,ale nepomohlo. Web můžete najít ZDE

Díky moc za odpovědi

Babameta
Nox
Profil
kromě toho že máš fclose($dhandle) ... řádky 2-4 ve vyhodnocení jsou celkem zbytečné, jinak si vypiš - var_dump() - jestli v nich je opravdu požadovaný text
na začátek skriptu dej error_reporting(E_ALL); a mrkni se, jestli ti to nevypisuje žádnou chybu

na práci se soubory (pokud nemusí být optimalizovaná) máš jednodušší file_get_contents/file_put_contents

mj. jak plánuješ rozlišovat kde končí 1 záznam když ti někdo do $text dá tečku? (což je celkem používaný znak)
mckay
Profil
A jako dodatek… nevidím tu nikde ochranu proti XSS, nebo jsem se přehlédl?
Babameta
Profil *
Díky za rychlou odpověd.

Error hlášku te nevypisuje. Pak se chci zeptat jak funguje ten var_dump()? Díky.

Já jsem to dělal podle článků na www.zive.cz (třeba tady). Takže jsem se řídil tím co mají tam...

Je to můj první vlastní php kód takže s tim jsem ještě nějak nepočítal. Jinak asi bych to změnil na diskuse.dat místo .txt jak to měli někde uvedený a pak bych tam dal aby se zapisovala oddělovací čára...
Babameta
Profil *
mckay: jsem začátečník a tomuhle ještě nerozumim :-( Rozhodně o žádné ochraně nevim. díky (sory nemůžu editovat nejsem registrovanej)
panther
Profil
Babameta:
Pak se chci zeptat jak funguje ten var_dump()?
var_dump


jak to měli někde uvedený a pak bych tam dal aby se zapisovala oddělovací čára...
oddělovač si můžeš zvolit vlastní, téměř cokoliv, co nikdo nebude používat (např. ~~). Samozřejmě, ideální by byla databáze, co si budeme povídat.

Když už sem píšu, v HTML si místo toho nataženého textového inputu chtěl využít asi textareu, tvoje stylování skrze atribut name navíc nebude fungovat v IE6. Nikde tam není ani ošetření e-mail, koukni se třeba na funkci filter_var.
Babameta
Profil *
panther: Díky za rady.
Už jsem to předělal na textareu. Díky
Z toho anglického popisu jsem filter var moc nepochopil...přecejenom nejsem ještě dokonalý angličtinář :-)

U var_dumpu jsem na tom podobně...

Fakt pardon za mojí nechápavost, ale php dělám teprve pár dní jako samouk. Díky moc
panther
Profil
Babameta:
u obou funkcí jsou příklady, ty jsou pochopitelné. Var_dump vypíše obsah pole (zatímco echo ti napíše jen „array“). U druhé zmiňované funkce se podívej na příklad, Example #1. Poradil jsem ti to k ošetření e-mailové adresy, z těch pár řádek použití pochopíš, snad.
Babameta
Profil *
Ještě jak jsem tam dal to textarea tak mi nevim proč zmizelo tlačítko odeslat a ta věta podtim :-(
panther
Profil
Babameta:
podívej se na JPW, jak se textarea zapisuje. Tohle jsou věci, s kterými nemusíš sem psát hned, jak ti něco nejde. Nad problémem přemýšlej, studuj odkázané materiály. Nebudu/eme ti tu všechno říkat, musíš se snažit sám taky trochu.
Babameta
Profil *
panther: Díky moc. To filter_var už chápu (snad): takže to zkontroluje tvar emailu, ale pokud není správný tak se stane co? Bude příkaz die? Nebo se email prostě nevypíše? Co se var_dump týče tak mám ho používat místo echo pro vypsání diskuse?
panther
Profil
Babameta:
ad. filter_var: zkus si otestovat pár příkladů (platných a neplatných mailů), pochopíš.
ad. var_dump: ne. Jen ke zjištění, co je obsahem pole $_POST.

Podívej se na rozdíl mezi
var_dump ('text');
echo 'text';

Zase, než jsi se zeptal, snad se dá ověřit, co co vypisuje. Další ze série zbytečných otázek.
Babameta
Profil *
Textareu jsem zapomněl uzavřít. Promiň.
Babameta
Profil *
Promiň. var_dump jsem použil a opravdu ty proměnný jsou vyplňěný datama z formuláře takže chyba asi fakt bude v zápisu...
Babameta
Profil *
Teď jsem zkoušel tu funkci filter_var. Už to chápu.

Myslel jsi to použití nějak takhle:
$overeni = filter_var('$email', FILTER_VALIDATE_EMAIL);
if ($overeni == "bool(false)")
die ("Neplatný tvar e-mailu");
else
echo ("");


??
Babameta
Profil *
Mohl by mi prosím někdo ještě pomoci tenhle problém dořešit? Díky.
panther
Profil
Babameta:
nikdy nepiš více příspěvků za sebou za účelem vytažení diskuse. To, že ti nikdo nenapíše během odpoledne nic neznamená.

<?php
if (filter_var('mail@mail.com', FILTER_VALIDATE_EMAIL))
	echo 'Je mail';
else
	echo 'Neni mail';
?>
Babameta
Profil *
Tak jsem dosáhl jistýho pokroku. Přepnul jsem se na webzdarma, který mi začal vypisovat chyby. Prozatimně jsem zrušil filter_var, protože mi to tam hlásilo nějakou chybu (jen abych věděl jestli to půjde). A soubor txt se vytvořil a zpráva se do něj zapsala. Bohužel teď zase nefunguje čtení ze souboru hlásí mi to tuhle chybu: Warning: Wrong parameter count for fread() in /3w/wz.cz/k/ks-webs/php/navstevnikniha.php on line 27
a řádek 27:
$nacteno = fread($handle);
panther
Profil
Babameta:
filter_var tam asi fungovat nebude, nevím, jaké tam je PHP (funguje od PHP 5.2.0). V tom případě hledej regulární výrazy.

Druhou chybu si dohledej sám (manuál).
Babameta
Profil *
Díky. Regulární výrazy znám z zive.cz odkud se taky php učim.
Babameta
Profil *
Ahoj,
teď se snažim diskusi vylepšit tak aby se příspěvky od sebe oddělovaly sepsal jsem to nějak takhle:
$zprava="<br><i>"$jmeno", </i>" date("j.n.Y G:i:s) "<br>"$email"<br>"$zprava"<br><hr>"; 


ale nefunguje to a hází mi to:
Parse error: syntax error, unexpected T_VARIABLE in /3w/wz.cz/k/ks-webs/php/vyhodnoceni.php on line 15

Mohl by mi někdo prosím vysvětlit (nebo dát odkaz, kde je to vysvětlené) jak se tedy vkládají html značky do php. Jestli je teda problém v tom.

Díky
panther
Profil
Babameta:
řetězce se spojují tečkou.
Tasartir
Profil
Textové řetězce do proměnné musíš skládat pomocí tečky. A pak máš chybu v uvozovkách u date. Mělo by to být takhle nějak:

$zprava="<br><i>".$jmeno.", </i>".date("j.n.Y G:i:s")."<br>".$email."<br>".$zprava."<br><hr>";

(A myslím, že date ti nebude fungovat tak, jak chceš. Takhle ti to vždy vypíše aktuální datum a čas při načtení stránky.)

A nebo pak třeba takhle:
$datum = date("j.n.Y G:i:s");
$zprava = "<br><i>$jmeno, </i>$datum<br>$email<br>$zprava<br><hr>";

Pokud je v php proměnná v uvozovkách, tak se provede tak, jak má.
Babameta
Profil *
Taartir: Díky moc¨, že ses rozepsal :-D Už to chápu. Fakt moc díky.

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