Autor Zpráva
laky941
Profil
Dobrý den dělám své první vebové stránky http://zaklinac.funsite.cz/index.php a mám problém s diskuzí s databázemi jestě neumím tak jsem se ji rozhodl udělat přes *.txt soubor ale vyskytl se mi problem s podmínkami jak mam nastavit if a kam bych ho měl umístit tak aby se mi odesílal text z formuláře po kliknutí na tlačítko odeslat a pouze pokud je formulář vyplněný ?
<form action="diskuze.php" method="post"> 
<table align=center width=400 height=100>
<th>
<b>Jméno:</b>
</th>
<th>
<input type="text" name="jmeno" size="25" maxlength="25">
</th>
<tr>
<th>
<b>Text:</b>
</th>
<th>
<textarea name="text" cols="50" rows="5"></textarea>
</th>
</tr>
<th colspan="2">
<input type="submit" value="Odeslat" name="odeslano"/> 
</th>
</table>
</form> 
  
  
  
<hr /> 

<div id="diskuze">
 
 
<?php 
 
         
$filename = 'Diskuze.txt'; 
$velikost=filesize($filename); 
$cteni = fopen($filename, "r"); 
$i = fread($cteni,$velikost); 
fclose($cteni); 
$zapis = fopen($filename, "w"); 


{
   
 fwrite ($zapis, "<p class=jmeno><b>");
 fwrite ($zapis, $_POST["jmeno"]); 
 fwrite ($zapis, "</b>&nbsp;&nbsp; : &nbsp;&nbsp;");
 fwrite ($zapis, date("G:i:s - j.n.Y")); 
 fwrite ($zapis, "</p><br />");
 fwrite ($zapis, "<p>");  
 fwrite ($zapis, $_POST["text"]); 
 fwrite ($zapis, "</p><br />"); 
 fwrite ($zapis, $i); 
 fclose ($zapis);  
} 

?> 
 
<br /> 
 
 
<?php 
include ("Diskuze.txt"); 
?>


 
 </div>
Darker
Profil
if(isset($_POST["odeslano"])) {
  /**zápis do souboru**/
}
Několik věcí mimo téma:
1. Odeslané příspěvky projeď funkcí htmlspecialchars, aby ti uživatelé nemohli posílat do stránky HTML.
2. Nikdy neměň velikost textu při najetí myší.
3. Efekt změny obrázku při najetí myší se dá udělat pomocí CSS pseudotřídy :hover a vlastnosti background.
4. Možná jen překlep, ale středník za HTML vlastnosti nepatří: <img src="Mec.png" width="750" height="80"; >
laky941
Profil
if(isset($_POST["odeslano"])) {
  /**zápis do souboru**/
}
Jsem již zkoušel ale když to použiji tak to jde normálně ale jen do té doby než odejdete ze stránky http://zaklinac.funsite.cz/diskuze.php protože když se tam pak znovu vrátíte tak je diskuze znovu prazdná :/
A jeste prosím jestli by jste mohl trozku blíze vysvetlit co jste mysliel funkcí htmlspecialchars a jak jí do kódu zakomponovat
Someone
Profil
Darker:
To co uvedl Darker zajistí, že se script zpracuje pouze tehdy, když je formulář odeslaný.. Pokud bys chtěl zajistit aby se odeslal jen tehdy kdy jsou uvedené všechny údaje tak:
if (!empty($_POST['text']) && !empty($_POST['text'])) {
    // odeslat
}
laky941
Profil
Použil jsem tedy
if (!empty($_POST['text']) && !empty($_POST['jmeno']))
{
   
 fwrite ($zapis, "<p class=jmeno><b>");
 fwrite ($zapis, $_POST["jmeno"]); 
 fwrite ($zapis, "</b>&nbsp;&nbsp; : &nbsp;&nbsp;");
 fwrite ($zapis, date("G:i:s - j.n.Y")); 
 fwrite ($zapis, "</p><br />");
 fwrite ($zapis, "<p>");  
 fwrite ($zapis, $_POST["text"]); 
 fwrite ($zapis, "</p><br />"); 
 fwrite ($zapis, $i); 
 fclose ($zapis);  
} 
Ale pokud nyní někdo odešle prázdný formulář tak se celá diskuze vymaže.
A stále zůstává problém s tím že pokud něco napíšete do diskuze tak to tam zůstává jen do doby než stránku opustíte jakmile se pak znovu vrátíte diskuze zas prázdná
Darker
Profil
if (!empty($_POST['text']) && !empty($_POST['jmeno']))
{
 $soubor="diskuse.txt";
 $text = "<p class=jmeno>".htmlspecialchars($_POST["jmeno"])."&nbsp;&nbsp; : &nbsp;&nbsp;".date("G:i:s - j.n.Y")."</p>\n";
 $text.= "<p>".htmlspecialchars($_POST["text"])."</p>\n\n";
 file_put_contents($soubor, file_get_contents($soubor).$text);
} 
To je celé.
Vymazání diskuse pravděpodobně způsobilo to, že se soubor diskuse.txt na řádku 38 otevře a pak nezavře - diskuse není vymazaná ale nedostupná v systému.


Pokud chceš používat funkci fwrite, dělej to alespoň tak, abys připisoval na konec souboru. Jinak to docela postrádá smysl.
laky941
Profil
Když použiji
           <body>
             <?php
     include "vzhled.php" ; 
?>
  <div id="ram"> </div>  
  <div id="telo" >  </div>                       
  <div id="text">
  <h1 class=diskuze> DISKUZE </h1>
  <br />
  <br />
  
  

<form action="diskuze.php" method="post"> 
<table align=center width=400 height=100>
<th>
<b>Jméno:</b>
</th>
<th>
<input type="text" name="jmeno" size="25" maxlength="25">
</th>
<tr>
<th>
<b>Text:</b>
</th>
<th>
<textarea name="text" cols="50" rows="5"></textarea>
</th>
</tr>
<th colspan="2">
<input type="submit" value="Odeslat" name="odeslano"/> 
</th>
</table>
</form> 
  
  
  
<hr /> 

<div id="diskuze">
 
 
<?php 
 
         
$filename = 'Diskuze.txt'; 
$velikost=filesize($filename); 
$cteni = fopen($filename, "r"); 
$i = fread($cteni,$velikost); 
fclose($cteni); 
$zapis = fopen($filename, "w"); 

if (!empty($_POST['text']) && !empty($_POST['jmeno']))
{
 $soubor="Diskuze.txt";
 $text = "<p class=jmeno>".htmlspecialchars($_POST["jmeno"])."&nbsp;&nbsp; : &nbsp;&nbsp;".date("G:i:s - j.n.Y")."</p>\n";
 $text.= "<p>".htmlspecialchars($_POST["text"])."</p>\n\n";
 file_put_contents($soubor, file_get_contents($soubor).$text);
} 


?> 
 
<br /> 
 
 
<?php 
include ("Diskuze.txt"); 
?>


 
</div>
</div>

</body>
Tak mi to napíše pouze 1 komentář a pokud napíši další tak se ten první přepíše tím nastávajícím a stále nevím jak mám udělat to aby mi diskuze zůstávala i po opuštení stránky :(
Darker
Profil
Asi ses nenamáhal přemýšlet nad tím, co jednotlivé funkce dělají...
Tento blok tam nemá co dělat:
$filename = 'Diskuze.txt'; 
$velikost=filesize($filename); 
$cteni = fopen($filename, "r"); 
$i = fread($cteni,$velikost); 
fclose($cteni); 
$zapis = fopen($filename, "w"); 
A asi by bylo lepší kdyby se nové příspěvky řadily před staré, takže si tam oprav:
file_put_contents($soubor, $text.file_get_contents($soubor));
laky941
Profil
Ani nevíte jak jsem vám vděčný děkuji moc že jste si na mě našli čas :)

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: