ďťż

[PHP] Zapis do pliku

       

Podstrony


telcocafe

Otóż mam sobie plik tekstowy z jakimś tekstem i teraz chciałbym, aby za pomocą formularza dodać do niego tekst. Jednak chciałbym, aby tekst został dodany na początku tego pliku a nie na końcu. Czy jest jakaś funkcja, która to umożliwia ?



oczywyiście. Podaje ci gotowy plik, który miałem kiedyś na stronie w księdze gości.
<?php function info($s,$klasa) { echo ('<div align="center"><p class="'.$klasa.'">'.$s.'</p></div>'); } function konwertuj($s) { $s=strip_tags($s,'<b><i><u>'); $s=stripslashes($s); $s=str_replace('"','&quot;',$s); return ($s); } if (isset($_POST['imie'])) { $_POST['imie']=konwertuj($_POST['imie']); $_POST['email']=konwertuj($_POST['email']); $_POST['klasa']=konwertuj($_POST['klasa']); $_POST['www']=konwertuj($_POST['www']); $_POST['opinia']=konwertuj($_POST['opinia']); $blad=''; if (strlen($_POST['opinia'])<10 || strlen($_POST['opinia'])>1024) $blad='Opinia jest zbyt krótka'; if ($_POST['www']!='') { if (strtolower(substr($_POST['www'],0,7))!='http://') $_POST['www']='http://'.$_POST['www']; if (strlen($_POST['www'])<11) $blad='¬le podano adres strony WWW'; } { if (strlen($_POST['klasa'])<1 || strlen($_POST['klasa'])>3 ) $blad='Żle wprowadziłe¶ numer klasy' ; } if (! ereg ("^.+@.+\..+$", $_POST['email'])) $blad='Podaj poprawny adres e-mail'; if (strlen($_POST['imie'])<3) $blad='¬le wprowadzono imie i nazwisko'; if ($blad!='') info($blad,'blad'); else { //zapisujemy dane do pliku if (file_exists('wpisy.txt')) $dane=file('wpisy.txt'); else $dane=array(); $plik=fopen('wpisy.txt','w'); flock($plik,2); fputs($plik,"<table border='0'>"); fputs($plik,"<tr><td align='right'><b>Data wpisu:</b></td><td>".date('d.m.Y H:i:s')."</td></tr>"); fputs($plik,"<tr><td align='right'><b>Imie i nazwisko:</b></td><td>$_POST[imie]</td></tr>"); fputs($plik,"<tr><td align='right'><b>E-mail:</b></td><td><a href='mailto:$_POST[email]'>$_POST[email]</a></td>< /tr>"); fputs($plik,"<tr><td align='right'><b>Klasa:</b></td><td>$_POST[klasa]< /td></tr>"); if ($_POST['www']!='') fputs($plik,"<tr><td align='right'><b>WWW:</b></td><td><a href='$_POST[www]'>$_POST[www]</a></td></tr>" ); fputs($plik,"<tr><td align='right' valign='top'><b>Opinia:</b></td><td><i>$_POST[opinia] </i></td></tr>"); fputs($plik,"</table><hr />"); for ($i=0;$i<count($dane);$i++) fputs($plik,$dane[$i]."\r\n"); flock($plik,3); fclose($plik); { if (strlen($_POST['klasa'])<1 || strlen($_POST['klasa'])>3 ) $blad='Żle wprowadziłe¶ numer klasy' ; } info('Formularz został zapisany.','ok'); include('lista.php'); return; } } else { $_POST['imie']=''; $_POST['email']=''; $_POST['klasa']=''; $_POST['www']=''; $_POST['opinia']=''; echo '<p>Wypełnij poprawnie poniższy formularz.</p>'; } ?>
Wystarczy że odpowiednio go zmienisz.

Nie jestem pewien, ale mi się zdaję, że to nie zadziała w ten sposób jakbym chciał. Do zapisu użyłeś tryb w, ale jeżeli istnieje jakiś tekst już w tym pliku to jego zawartość jest kasowana, a ja chcę, żeby dopisało jakiś tekst przed istniejącym tekstem.

A sprawdzałeś?
Zwróć uwagę, że przed skasowaniem zawartości, pobieramy ją:
if (file_exists('wpisy.txt')) $dane=file('wpisy.txt'); else $dane=array();
po czym zapisujemy całość.



No tego nie zauważyłem :frusty: Teraz jest OK

Mozecie mi powiedziec co TU jest zle??
<html> <head><title>Invite giver v0.1 by Kokoss</title></head> <body> <form> <?php function info($s,$klasa) { echo ('<div align="center"><p class="'.$klasa.'">'.$s.'</p></div>'); } function konwertuj($s) { $s=strip_tags($s,'<b><i><u>'); $s=stripslashes($s); $s=str_replace('"','&quot;',$s); return ($s); } if (isset($_POST['nick'])) { $_POST['nick']=konwertuj($_POST['nick']); $_POST['miesiac']=konwertuj($_POST['miesiac']); $_POST['dzien']=konwertuj($_POST['dzien']); } else { //zapisujemy dane do pliku if (file_exists('inv_furora.txt')) $dane=file('inv_furora.txt'); else $dane=array(); $plik=fopen('inv_furora.txt','w'); flock($plik,2); fputs($plik,"<TR BGCOLOR=#D4C0A1><TD><A HREF="http://www.tibia.com/community/?subtopic=characters&name=[nick]">[ nick]</A></TD>"); fputs($plik,"<TD>[miesiac] [dzien] 2007</TD></TR>"); for ($i=0;$i<count($dane);$i++) fputs($plik,$dane[$i]."\r\n"); flock($plik,3); fclose($plik); info('Formularz został zapisany.','ok'); include('give_invite.php'); return; } } else { $_POST['nick']=''; $_POST['miesiac']=''; $_POST['dzien']=''; echo '<p>Wypełnij poprawnie poniższy formularz.</p>'; } ?> <center>Nick:<input name="nick" /><br><br> Miesiac: <input name="miesiac" maxlengh="3" /> Dzien: <input name="dzien" maxlengh="2" /> <input type="submit" value="Invite" /> </form> <html>
Jest to skrypt z pliku give_invite.php
Czy moglby ktos poprawic bledy?
Użytkownik kokoss15 edytował ten post 04 lipiec 2007, 07:50
jaki błąd otrzymujesz konkretnie, a po drugie umieść to w "codebox" zanim dostaniesz ostrzeżenie.

ja już znalazłem błąd:
fputs($plik,"<TR BGCOLOR=#D4C0A1><TD><A HREF="http://www.tibia.com/community/?subtopic=characters&name=[nick]">[ nick]</A></TD>");
zamień na
fputs($plik,"<TR BGCOLOR=#D4C0A1><TD><A HREF='http://www.tibia.com/community/?subtopic=characters&name=[nick]'>[ nick]</A></TD>");
dałeś cudzysłow i przy odsyłaczu, i na początku, używaj edytora z kolorowaniem składni, to napewno unikniesz takich błędów


jaki błąd otrzymujesz konkretnie, a po drugie umieść to w "codebox" zanim dostaniesz ostrzeżenie.
Teraz system jest przeciazony i strona nie wchodzi (System overloaded. Please visit us later...) ale wcześniej to był bodajże błąd w 43 linijce. (przed samym kode php sa jeszcze 4 linijki)... było coś ze znakiem '

Po pierwsze zle zamkniete cudzyslowy w 33 linii, a po drugie - balagan w zamknieciach nawiasow klamrowych w okolicach 44 linii

usuwając nawias klamrowy w 44 lini wywołałem błąd: Parse error: syntax error, unexpected T_ELSE in ścieżka do pliku/give_invite.php on line 44
a gdy ten nawias jest pojawia się błąd: Parse error: syntax error, unexpected '}' in ścieżka do pliku/give_invite.php on line 44
Jak mam uporządkować nawiasy? (Ilość nawiasów zamykających i otwierających jest równa bez nawiasu w lini 44 więc nie wiem w czym rzecz..
Teraz kod wygląda tak:
<html> <head><title>Invite giver v0.1 by Kokoss</title></head> <body> <form> <?php function info($s,$klasa) { echo ('<div align="center"><p class="'.$klasa.'">'.$s.'</p></div>'); } function konwertuj($s) { $s=strip_tags($s,'<b><i><u>'); $s=stripslashes($s); $s=str_replace('"','&quot;',$s); return ($s); } if (isset($_POST['nick'])) { $_POST['nick']=konwertuj($_POST['nick']); $_POST['miesiac']=konwertuj($_POST['miesiac']); $_POST['dzien']=konwertuj($_POST['dzien']); } else { //zapisujemy dane do pliku if (file_exists('inv_furora.txt')) $dane=file('inv_furora.txt'); else $dane=array(); $plik=fopen('inv_furora.txt','w'); flock($plik,2); fputs($plik,"<TR BGCOLOR=#D4C0A1><TD><A HREF='http://www.tibia.com/community/?subtopic=characters&name=[nick]'>[nick] </A></TD>"); fputs($plik,"<TD>[miesiac] [dzien] 2007</TD></TR>"); for ($i=0;$i<count($dane);$i++) fputs($plik,$dane[$i]."\r\n"); flock($plik,3); fclose($plik); info('Formularz został zapisany.','ok'); include('give_invite.php'); return; } } else { $_POST['nick']=''; $_POST['miesiac']=''; $_POST['dzien']=''; echo '<p>Wypełnij poprawnie poniższy formularz.</p>'; } ?> <center>Nick:<input name="nick" /><br><br> Miesiac: <input name="miesiac" maxlengh="3" /> Dzien: <input name="dzien" maxlengh="2" /><br><br> <input type="submit" value="Invite" /> </form> </body> </html>
Użytkownik kokoss15 edytował ten post 04 lipiec 2007, 12:01
Po prostu usuwając ten nawias stworzyłeś konstrukcję "if (isset($_POST['nick'])) { ... } else { ... } else { ... }", która nie ma żadnego sensu. Zastanów się co chcesz uzyskać, pomyśl logicznie i popraw.
Użytkownik bryn edytował ten post 04 lipiec 2007, 14:15

Po prostu usuwając ten nawias stworzyłeś konstrukcję "if (isset($_POST['nick'])) { ... } else { ... } else { ... }", która nie ma żadnego sensu. Zastanów się co chcesz uzyskać, pomyśl logicznie i popraw.
usuwając ostatnią część else uzyskałem:
"if (isset($_POST['nick'])) { ... } else { ... }"
Teraz widzę następujący błąd: Gdy wchodze na strone zamiast formulaza wyswietla sie bezposrednio "Formulaż został zapisany" a poniżej:
Fatal error: Cannot redeclare info() (previously declared in ściezka do pliku/give_invite.php:6) in ściezka do pliku/give_invite.php on line 9
(Kod wygląda teraz następująco:
<html> <head><title>Invite giver v0.1 by Kokoss</title></head> <body> <form> <?php function info($s,$klasa) { echo ('<div align="center"><p class="'.$klasa.'">'.$s.'</p></div>'); } function konwertuj($s) { $s=strip_tags($s,'<b><i><u>'); $s=stripslashes($s); $s=str_replace('"','&quot;',$s); return ($s); } if (isset($_POST['nick'])) { $_POST['nick']=konwertuj($_POST['nick']); $_POST['miesiac']=konwertuj($_POST['miesiac']); $_POST['dzien']=konwertuj($_POST['dzien']); } else { //zapisujemy dane do pliku if (file_exists('inv_furora.txt')) $dane=file('inv_furora.txt'); else $dane=array(); $plik=fopen('inv_furora.txt','w'); flock($plik,2); fputs($plik,"<TR BGCOLOR=#D4C0A1><TD><A HREF='http://www.tibia.com/community/?subtopic=characters&name=[nick]'>[nick] </A></TD>"); fputs($plik,"<TD>[miesiac] [dzien] 2007</TD></TR> "); for ($i=0;$i<count($dane);$i++) fputs($plik,$dane[$i]."\r\n"); flock($plik,3); fclose($plik); info('Formularz został zapisany.','ok'); include('give_invite.php'); return; } ?> <center>Nick:<input name="nick" /><br><br> Miesiac: <input name="miesiac" maxlengh="3" /> Dzien: <input name="dzien" maxlengh="2" /><br><br> <input type="submit" value="Invite" /> </form> </body> </html>

Jakoś mam wrażenie że próbujesz nie znając PHP na oślep posklejać kawałki kodu w całość :|

Po co ten skrypt include'uje samego siebie? Po co zapisujesz do pliku pustą zmienną? Czemu wywołujesz zapis do pliku nie mając wypełnionego formularza?
Użytkownik bryn edytował ten post 05 lipiec 2007, 10:48
Trafiłeś w samo sedno... Nie znam się na php a kombinuje.
Oto co teraz wymyśliłem:
Kod z pliku give_invite.php:
<html> <head><title>Invite giver v0.1 by Kokoss</title></head> <body> <form method="post" action="invite1.php"> <center>Nick:<input name="nick" /><br><br> Miesiac: <input name="miesiac" maxlengh="3" /> Dzien: <input name="dzien" maxlengh="2" /><br><br> <input type="submit" value="Invite" /> </form> </body> </html>
I kod z pliku invite1.php:
<?php function info($s,$klasa) { echo ('<div align="center"><p class="'.$klasa.'">'.$s.'</p></div>'); } function konwertuj($s) { $s=strip_tags($s,'<b><i><u>'); $s=stripslashes($s); $s=str_replace('"','&quot;',$s); return ($s); } if (isset($_POST['nick'])) { $_POST['nick']=konwertuj($_POST['nick']); $_POST['miesiac']=konwertuj($_POST['miesiac']); $_POST['dzien']=konwertuj($_POST['dzien']); } else { //zapisujemy dane do pliku if (file_exists('inv_furora.txt')) $dane=file('inv_furora.txt'); else $dane=array(); $plik=fopen('inv_furora.txt','w'); flock($plik,2); fputs($plik,"<TR BGCOLOR=#D4C0A1><TD><A HREF='http://www.tibia.com/community/?subtopic=characters&name=[nick]'>[nick] </A></TD>"); fputs($plik,"<TD>[miesiac] [dzien] 2007</TD></TR> "); for ($i=0;$i<count($dane);$i++) fputs($plik,$dane[$i]."\r\n"); flock($plik,3); fclose($plik); info('Formularz został zapisany.','ok'); return; } ?>
Ok. wyswietla sie formularz ale gdy klikne invite przechodzi do invite.php i nie zapisuje do pliku...
Gdy było tak jak poprzednio za każdym razem do pliku dopisywał się tekst ale oczywiście bez odpowiednich zmiennych (czyli zamiast nicku było [nick] itd...
Czy mógłbyś mi jakoś pomóc?
Użytkownik kokoss15 edytował ten post 05 lipiec 2007, 15:17
<? //ustaw sciezke do pliku: $filename = ""; //zdefiniuj nowy wiersz $nowy = "..."; $plik = file($filename); $plik = implode("",$plik); $plik = $nowy."\r\n".$plik; $fp = fopen($filename , "w"); flock($fp,2); fputs( $fp , $plik); flock($fp,3); fclose($fp); ?>
z http://forum.webhelp...aqforum.php?f=1
powinno dizalac :>


<? //ustaw sciezke do pliku: $filename = ""; //zdefiniuj nowy wiersz $nowy = "..."; $plik = file($filename); $plik = implode("",$plik); $plik = $nowy."\r\n".$plik; $fp = fopen($filename , "w"); flock($fp,2); fputs( $fp , $plik); flock($fp,3); fclose($fp); ?>
z http://forum.webhelp...aqforum.php?f=1
powinno dizalac :>

Dzięki wielkie!! Ten kod wkońcu działa!! :)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.