Autor Zpráva
kikinet
Profil
Opět zdravím,
vytvářím jednoduchou knihu hostů, všechno ok až na to, že komentáře se nezapíší do souboru s komentáři. Tady je kód:
elseif ($jmeno!="" && $mail!="" && $zprava!=""){
  $new = StripSlashes ($jmeno . $mail . $zprava);  // ulož vše do $new
  if (File_Exists ($file)) {             
    $komentare = file_get_contents ($file); //soubor ulož do $komentare        
    file_put_contents ($file, $new.$komentare);}} //zapiš nové a staré komentáře

Je to ořezané o věci typu povinných polí atd.
Zápis do promměné new i komentare funguje (ověřeno echem)
Someone
Profil
kikinet:
máš správně nastavený CHMOD?
kikinet
Profil
Someone:
No ano, na 777
Someone
Profil
Co je v proměnné $file?


Uveď sem i ty podmínky nad tim, třeba se to k samotnému ukládání ani nedostane.
kikinet
Profil
Someone:
Ty podmínky všechny podle mě jedou, už jsem to testovala, ale možná tam najedete chybu.
$file = "Komentare.txt";
if($odeslat == "Odeslat") {                   
  if ($zprava=="" || $jmeno=="") { 
     echo "Vyplňte prosím všechna pole.";}
  elseif (substr_count($mail, '@') != 1) {
     echo "Zadali jste neplatnou e-mailovou adresu.";}
  elseif ($jmeno!="" && $mail!="" && $zprava!=""){
     $jmeno = "<b>Jméno: </b>".$jmeno."<br>";
     $mail = "<b>E-mail: </b>".$mail."<br>";
     $zprava = $zprava."<br><hr>";
     $new = StripSlashes ($jmeno . $mail . $zprava);
     if (File_Exists ($file)) {             
       $komentare = file_get_contents ($file);     
       file_put_contents ($file, $new.$komentare);} 
     echo "Komentář byl úspěšně odeslán.";}                                
  else {               
     echo "Komentář se nepodařilo odeslat. Zkuste to prosím znovu.";}}
Chro
Profil
kikinet:
Skript níže je základní provedení s bezpečnostními prvky. Kód stačí vložit do libovolné stránky (souboru s příponou php) mezi HTML tagy <body> a </body>. Skript si ukládací soubor automaticky vytvoří při prvním úspešně odeslaném komentáři. Při neúspěšném vyplnění formuláře pak doplňuje uživatelem zadaná data do jednotlivých formulářových polí.
<?php
$soubor = 'komentare.html';
if (isset($_POST['odeslat']))
{
$chyby = '';
$jmeno = $_POST['jmeno'];
$mail = $_POST['mail'];
$zprava = $_POST['zprava'];
if (get_magic_quotes_gpc())
{
$jmeno = stripslashes($jmeno);
$zprava = stripslashes($zprava);
}
$jmeno = htmlspecialchars($jmeno, ENT_QUOTES);
$zprava = htmlspecialchars($zprava, ENT_QUOTES);
if ($jmeno == '' || $zprava == '')
{
$chyby.= 'Nevyplnil(a) jste polozku Jmeno a/nebo Zprava.<br>';
}
if ($mail != '')
{
if (!filter_var($mail, FILTER_VALIDATE_EMAIL))
{
$chyby.= 'Uvedl(a) jste neplatnou e-mailovou adresu.<br>';
}
}
if ($chyby == '')
{
if (file_exists($soubor))
{
$starsi_komentare = file_get_contents($soubor);
}
else
{
$starsi_komentare = '';
}
$nova_zprava = 'Datum: '.date('d.m.Y H:i:s', time())."<br>\n";
$nova_zprava.= 'Jmeno: <b>'.$jmeno."</b><br>\n";
if ($mail != '')
{
$nova_zprava.= 'E-mail: '.$mail."<br>\n";
}
$nova_zprava.= '<br>'.$zprava."\n<hr>\n";
file_put_contents($soubor, $nova_zprava.$starsi_komentare);
echo 'Prispevek byl ulozen.<br>';
}
else
{
echo $chyby.'Prispevek proto nebyl ulozen.<br>';
$returnjmeno = $jmeno;
$returnmail = $mail;
$returnzprava = $zprava;
}
}
?>
<form action="" method="POST">
Jmeno *:<br>
<input type="text" name="jmeno" value="<?php if (isset($returnjmeno)) echo $returnjmeno; ?>" size="30" maxlength="30">
<br>
E-mail:<br>
<input type="text" name="mail" value="<?php if (isset($returnmail)) echo $returnmail; ?>" size="30" maxlength="30">
<br>
Zprava *:<br>
<textarea name="zprava" cols="40" rows="10"><?php if (isset($returnzprava)) echo $returnzprava; ?></textarea>
<br>
<input type="submit" name="odeslat" value=" Odeslat ">
</form>
<h3>Komentare</h3>
<?php
if (file_exists($soubor))
{
readfile($soubor);
}
else
{
echo 'Prozatim nebyly vlozeny zadne komentare.';
}
?>
kikinet
Profil
Chro:
Děkuji, že jste si dal tu práci, ale formulář má zabezpečený a při chybě to doplní vypsaná pole :)
<form method="POST" action="Koment.php">
  <table style="font-size: 14">
    <tr><td><b>Jméno: </b></td><td><input type="text" name="jmeno" value="<?php if(isset($_POST['jmeno'])) echo htmlspecialchars($_POST['jmeno'], ENT_QUOTES); ?>" size="39"></td></tr>
    <tr><td><b>E-mail: </b></td><td><input type="text" name="mail" value="<?php if(isset($_POST['mail'])) echo htmlspecialchars($_POST['mail'], ENT_QUOTES); ?>" size="39"></td></tr>
    <tr><td><b>Zpráva: </b></td><td><textarea name="zprava" rows="8" cols="31"><?php if(isset($_POST['zprava'])) echo htmlspecialchars($_POST['zprava'], ENT_QUOTES);?></textarea></td></tr>
    <tr><td><input type="hidden" name="message"></td><td><input type="hidden" name="url"></td></tr>
    <tr><td></td><td align="right"><input type="submit" name="odeslat" value="Odeslat"></td></tr>
  </table>
</form>

Spíš bych potřebovala říct ten důvod, proč to v mojem scriptu nefunguje to ukládání :/
Chro:
Mimochodem ten Váš script taky neukládá... Nevím kde dělám chybu
Tori
Profil
kikinet:
1. Zkuste použít absolutní cestu k souboru: $file = dirname(__FILE__)."/Komentare.txt"
2. velké písmeno v názvu souboru je schválně / správně? některé OS to rozlišují (linux), jiné ne (windows).
3. kromě file_exists testujte i is_writeable
4. Co přesně vrací file_put_contents - nulu, false, nebo číslo?
LaMMa
Profil
kikinet:
Mne to tvoje ukladanie funguje. Urcite sa pozeras do spravneho suboru, ked to kontrolujes?
Chro
Profil
Oprav si v kódu adresu u formu v atrhbutu action na koment.php s malým k na začátku.
kikinet
Profil
Tori:
- vyzkouším
- správně je to "komentare.txt"
- co vrací to netuším, jen vím že do souboru to nic nehází

LaMMa:
- jestli to funguje tak by mě zajímalo jak to děláte :D musím dělat nějakou blbou chybu... Určitě kontroluju ten správný soubor

Tady je ten formulář, kdyby se chtěl někdo podívat přímo

Edit: Už to funguje :) použila jsem Toriho verzi :)
Děkuji všem za pomoc. Kdyby se náhodou někdo nudil můžete se kouknout ještě na jeden problém
LaMMa
Profil
kikinet:
ci to nebolo tym velkym pismekom na zaciatku:
- správně je to "komentare.txt"
$file = "Komentare.txt";
kikinet
Profil
LaMMa:
No on ten soubor se vážně jmenoval Komentare.txt, ale pak jsem to menila na male písmena, ať se mi to neplete a nakonec jsem to asi neprepsala ve scriptu

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: