Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Usuwanie wiersza z pliku .txt
Forum PHP.pl > Forum > Przedszkole
tomtolo
Witajcie.
Posiadam dwa pliki z kodem PHP, które służą mi jako lista zapisów na grupowe zajęcia sportowe.

1. Pierwszy z nich index.php (służy jako formularz do zapisu uczestnika):

  1. <div align="center">
  2. <?php
  3. /*********************************************
  4.   * plik formularz.php
  5.   *********************************************/
  6.  
  7. $pole1 = trim($_POST['pole1']);
  8. $pole2 = trim($_POST['pole2']);
  9. $data = date("d-m H:i");
  10.  
  11. if(empty($pole1) and empty($pole2)) {
  12.  
  13. // prosty formularz zawierający dwa pola
  14. echo '<div align="center"><div class="top">&nbsp;</div><br>
  15. <h2>Dodaj wpis na <span class="red">Niedzielę</span> 18<sup>00</sup> - 19<sup>30</sup></h2>
  16.  
  17.  
  18. <div align="center" style="text-align:center;font-weight:bold;"><form action="" method="post">
  19. Imię: <br><input type="text" name="pole1" style="" /><br />
  20. Będziesz? <br><input name="pole2" value="tak">
  21. </textarea><br />
  22. <input type="submit" value="Dodaj" class="but"/>
  23. </form><br></div><div align="center"> <p class=\'buton1\'><a href="podglad.php">Lista zapisów</a></p></div><br><br>
  24. ';
  25. }
  26. else {
  27.  
  28. // dane pochodzące z formularza
  29. $dane = $pole1."`".$pole2."`".$data."\n";
  30. // przypisanie zmniennej $file nazwy pliku
  31. $file = "baza.txt";
  32. // uchwyt pliku, otwarcie do dopisania
  33. $fp = fopen($file, "a");
  34. // blokada pliku do zapisu
  35. flock($fp, 2);
  36. // zapisanie danych do pliku
  37. fwrite($fp, $dane);
  38. // odblokowanie pliku
  39. flock($fp, 3);
  40. // zamknięcie pliku
  41. fclose($fp);
  42.  
  43. echo "<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><b>Zapisujemy Cię na listę!</b><br /><br />";
  44. echo "<p><img src=images/preloader.gif></p>";
  45. //echo "<p class=\'buton1\'><a href=\"podglad.php\">Zobacz wyniki &raquo;</a></p>";
  46.  
  47.  
  48. //echo "<script>window.location = 'podglad.php'</script>";
  49. echo "<script>setTimeout('window.location.href=\"podglad.php\"', 2000)</script>";
  50. }
  51. ?>
  52. </div>



2. Drugi z nich podglad.php (wyświetla wyniki/listę zapisów):

  1. <h2>Lista wpisów na <span class="red">Niedzielę</span>
  2. </h2>
  3. godz. <b>18.00 - 19.30</b> <br>
  4. <br>
  5.  
  6. <?php
  7. /*********************************************
  8.   * plik podglad.php
  9.   *********************************************/
  10.  
  11. // wczytanie zawartości pliku do tablicy
  12. $file = file("baza.txt");
  13. // czytamy zawartość
  14. $tekst = file_get_contents("baza.txt");
  15. // przechodzimy przez tablicę za pomocą pętli foreach
  16. foreach($file as $value) {
  17. // rozbijamy poszczególne linie na części
  18. $exp = explode("`",$value);
  19. // wyświetlamy rozbity tekst
  20. echo "<b>".$exp[0].":</b> ".$exp[1]." <font style='font-family:tahoma;font-size:11px;color:#777;'>(dodał: ".$exp[2].")</font><hr />";}
  21. ?>
  22. <br>
  23. <br>Liczba wpisów na "<b>tak</b>":
  24. <b class="ziel">
  25. <?php
  26. echo substr_count ($tekst,"tak");
  27. ?>
  28. </b>
  29. <br>
  30. <p class="buton1"><a href="index.php">Dodaj kolejny wpis</a></p>
  31.  


3. Trzeci to plik tekstowy baza.txt, który przechowuje dane:

  1. Maks`tak`22-12 20:43
  2. Tomek`tak`25-12 15:28


Cel: Moim celem jest aby dodać kod, który będzie umieszczał się w każdym wierszu na końcu i pozwoli na jego usunięcie (tego konkretnego wiersza z pliku baza.txt):

  1. Maks`tak`22-12 20:43 Usuń
  2. Tomek`tak`25-12 15:28 Usuń



Tutaj jest podgląd działania skryptu.
Będę wdzięczny za wszelką pomoc...

fate
Nie zapisuj w "bazie" słowa usuń,

podglad.php cos takiego

  1. $i=0;
  2. foreach($file as $value) {
  3. // rozbijamy poszczególne linie na części
  4. $exp = explode("`",$value);
  5. // wyświetlamy rozbity tekst
  6. echo "<b>".$exp[0].":</b> ".$exp[1]." <span style='font-family:tahoma;font-size:11px;color:#777;'>(dodał: ".$exp[2].")</span>
  7. <span style='color:red'><a href='usuwanie.php?line=$i'></a></span><hr />";
  8. i++;
  9. }
  10. //ja bym zamienil te cudzyslowia na '' do echo a w html ""


nowy plik usuwanie.php

  1. if(isset($_GET['line'])
  2. {
  3. $todel=$_GET['line'];
  4. $file = file("baza.txt");
  5. unset($file[$todel]);
  6. file_put_contents('baza.txt',$file);
  7. echo 'Usunięto wiersz nr :'.$_GET['line']+1;
  8. }


Dodam tylko że nie ma tu żadnej walidacji wystarczy wpisać odpowiedni link żeby usuwać Ci ludków z bazy, ale podobnie masz teraz przy dodawaniu - dostęp do tego panelu z usuwaniem powinien być po zalogowaniu, Bóg da że nikt nie będzie wam psuł tej inicjatywy
tomtolo
Witaj fate,
dzięki za pomoc.

Moj kod podglad.php po zmianie:

  1. <?php
  2. /*********************************************
  3. * plik podglad.php
  4. *********************************************/
  5.  
  6. // wczytanie zawartości pliku do tablicy
  7. $file = file("baza1.txt");
  8. // czytamy zawartość
  9. $tekst = file_get_contents("baza1.txt");
  10. // przechodzimy przez tablicę za pomocą pętli foreach
  11. $i=0;
  12. foreach($file as $value) {
  13. // rozbijamy poszczególne linie na części
  14. $exp = explode("`",$value);
  15. // wyświetlamy rozbity tekst
  16. echo '<b>'.$exp[0].':</b> '.$exp[1].' <span style="font-family:tahoma;font-size:11px;color:#777;">(dodał: '.$exp[2].')</span>
  17. <span style="color:red"><a href="usuwanie.php?line=$i">del</a></span><hr/>';
  18. i++;
  19. }
  20. ?>


daje error:
Parse error: syntax error, unexpected T_INC in ../podglad.php on line 47

linia 47 to: i++;

A plik usuwanie.php:

  1. <?php
  2. if(isset($_GET['line'])
  3. {
  4. $todel=$_GET['line'];
  5. $file = file("baza.txt");
  6. unset($file[$todel]);
  7. file_put_contents('baza.txt',$file);
  8. echo 'Usunięto wiersz nr :'.$_GET['line']+1;
  9. }
  10. ?>


daje error:
Parse error: syntax error, unexpected '{' in ../usuwanie.php on line 3

fate
literówki
  1. i++;
  2. $i++;
  3.  
  4. if(isset($_GET['line'])
  5. {
  6.  
  7. if(isset($_GET['line']))
  8. {
  9.  
  10.  
  11.  


lenistwo ?
tomtolo
no z mojej strony raczej nie lenistwo, a jedynie brak wiedzy...smile.gif

po korektach poszło, lecz dana linia w pliku tekstowym nie jest usuwana (za to sam plik jest modyfikowany)

Jest coś nie tak z numeracją wierszy, bo gdy podstawię w:
  1. <a href="usuwanie.php?line=0">del</a>

to usuwa ...pierwszy wiersz...
Link
fate
Jak uzywasz '' $zmienne musisz laczyc tak
echo 'text'.$zmienna.'<html>';
bo beda traktowane jak tekst
jak uzywasz "" wtedy wstawiane sa wartosci ale musisz escepowac cudzyslowia w htmlu

sprobuj uzyc petli for i funkcji count zamiast foreach

jesli chodzi o numeracje to w komunikscie masz +1:
echo 'Usunięto wiersz nr :'.$_GET['line']+1;
mozesz to 1 odejmowac przy unset, tablice zawsze sa numerowane od 0
tomtolo
Świetnie... piękne dzięki!

Miałeś racę z cudzysłowami... pomogło tak:
  1. <a class="del" href="?linia='.$i.'">del</a>

Co do foreach, zastosowałem:
  1. foreach($file as $i => $value) {

teraz wszystko działa.

Zamykam.
Jeszcze raz ...dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.