Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przeszukiwanie pliku tekstowe kod kątem frazy
Forum PHP.pl > Forum > Przedszkole
lewozmywak
  1.  
  2.  
  3. <form action="nauka.php" method="POST">
  4. <input type="text" name="pesel">
  5. <input type="submit">
  6. </form>
  7.  
  8. <?php
  9.  
  10. $czytpesel = $_POST["pesel"];
  11.  
  12. // utworzenie uchwytu do pliku
  13. $plik = fopen('pesele.txt','r');
  14.  
  15. $index = 1;
  16. $ind = 1;
  17. $zawartosc = '';
  18.  
  19. // przypisanie zawartości do zmiennej
  20. while(!feof($plik))
  21. {
  22. $linia = fgets($plik);
  23. $zawartosc .= $linia;
  24. if($linia == $czytpesel)
  25. {
  26. $pesel = true;
  27. $ind = $index;
  28. }
  29. $index++;
  30.  
  31. }
  32.  
  33. echo $zawartosc;
  34.  
  35. if($pesel == true)
  36. {
  37.  
  38. echo "znaleziono pesel na pozycji ".$ind;
  39. }
  40. else
  41. {
  42.  
  43. echo "brak peselu";
  44. }
  45.  
  46. ?>
  47.  
  48.  


A plik tekstowy pesele.txt tak wygląda...

8000<br>
5123<br>
2314<br>
2222<br>
4555<br>

po wpisaniu któregokolwiek z wyżej wymienionych peselów ciągle mi wywala "brak peselu", i oczywiście warning Notice: Undefined variable: pesel in C:\xampp\htdocs\janerka\nauka.php on line 34

skrypt jednak działa jeśli w tym miejscu
  1. if($linia == $czytpesel)
  2. {
  3. $pesel = true;
  4. $ind = $index;
  5. }


zmienną $czytpesel zastąpię jakiś peslem np. 8000 . Wtedy wyświetli że pesel jest, i na indeksie 1... O co w tym chodzi? Przecież dobrze zczytuje zmienną pesel z formularza do tablicy POST... Nie wiem, nie rozumiem... btw... macie jakiś lepszy pomysł na napisanie tego? Bo nie wiem jak dodać indeksy do pliku tekstowego, żeby nie miał problemów z sczytywaniem i porównywaniem wierszy.
phpion
Jeśli po podstawieniu na sztywno wartości do $czytpesel działa to jest problem z tą zmienną, tj. z przesyłaniem danych z $_POST. Daj sobie var_dump($czytpesel) i zobacz co tam siedzi. Spróbuj jeszcze na zmiennej $linia zrobić trim($linia) - możliwe, że siedzą Ci tam jakieś białe znaki, ale wówczas podstawienie pod $czytpesel wartości na sztywno też by nie zadziałało. Dalej: możesz w pętli dać var_dump() obu porównywanych wartości - to powinno Ci pokazać najwięcej.
lewozmywak
wpisałem ten var_dump po obu stronach warunku if($linia == $czytpesel) ...

Oto co skrypt pokazuje...

Notice: Undefined index: pesel in C:\xampp\htdocs\janerka\nauka.php on line 9
string(10) "8000
" NULL string(10) "5123
" NULL string(10) "2314
" NULL string(10) "2222
" NULL string(8) "4555
" NULL 8000
5123
2314
2222
4555
znaleziono pesel na pozycji 5NULL

a działa to teraz jak chce...

wróciłem do punktu wyjscia tylko na sam koniec programu dodałem var_dump($czytpesel). To co wpisze i zatwierdze pojawia się w tym wywołaniu ,np. jak wpisze 8000 to wywoła "8000" ... sam już nie wiem, jestem poczatkujacy a raczej walcze z tym by zaliczyć przedmiot na studiach, bo zbliża się kolos chciałbym ogarnąć takie rzeczy :/
phpion
1.
string(10) "8000
"
Czyli masz albo znak końca linii albo <br> na końcu. Do pozbycia się użyj odpowiednio trim lub str_replace (w zależności od potrzeb - oba).

2. NULL - nie wiem czego to jest var_dump, ale zapewne zmiennej $czytpesel, czyli jak widzisz jest ona NULLem (z jakiego powodu - ciężko powiedzieć).

Drąż dalej.
lewozmywak
nie ogarniam jak to zastosować w tej sytuacji...
phpion
Spróbuj tak:
  1. $linia = fgets($plik);
  2. $linia = trim($linia);
  3. $linia = str_replace($linia, '<br>', '');

W kodzie powyżej jest 1 psikus. Za pomocą manuala zapewne go wyeliminujesz.
lewozmywak
poprzestawiałeś str_place smile.gif
wielkie dzięki ogarnąłem to, działa teraz mniej więcej tak jak chciałem
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.