Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]dodatkowy przecinek
Forum PHP.pl > Forum > Przedszkole
HTFhere
Cześć!
Mam 2 problemy z kodem, który powinien działać następująco-pobierać przez formularz imie i nazwisko, a następnie zapisywać je do odpowiedniego pliku. Z założenia imiona powinny być zapisywane w pliku tak : imie1,imie2,imie3 itd., analogicznie dla nazwisk.
  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  4. </head>
  5. <body>
  6. <font size="7" color="red"><b>Dodawanie osoby do bazy danych</b></font><br>
  7. <form>
  8. Podaj Imię:<input type="text" name="imie"><br>
  9. Podaj Nazwisko:<input type="text" name="nazwisko"><br>
  10. <input type="submit" value="Dodaj osobę"><br>
  11. </form>
  12. <?php
  13. @$imie = $_GET['imie'];
  14. @$nazwisko = $_GET['nazwisko'];
  15. $plik = 'imiona.txt';
  16. $zapis_imie = "$imie,";
  17. $uchwyt = fopen($plik, 'a');
  18. fputs($uchwyt, $zapis_imie);
  19. fclose($uchwyt);
  20. $plik2 = 'nazwiska.txt';
  21. $zapis_nazwisko = "$nazwisko,";
  22. $uchwyt2 = fopen($plik2, 'a');
  23. fputs($uchwyt2, $zapis_nazwisko);
  24. fclose($uchwyt2);
  25. ?>
  26. <br><a href="menu.php">Powrót do menu</a>
  27.  
  28.  
  29.  
  30.  
  31. </body>
  32. </html>

Niestety z jakiegoś powodu, kod ten zawsze na poczatku pliku PRZED zapisaniem imienia/nazwiska daje przecinek, mam więc : ,imie1,imie2,imie3. Ktoś wie dlaczego dostaję ten dodatkowy przecinek na początku? I drugi problem, gdy odczytam tą bazę danych takim kodem:
  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  4. </head>
  5. <body>
  6. <?php
  7. $plik = 'imiona.txt';
  8. $uchwyt = fopen($plik, 'r');
  9. $zawartosc = fread($uchwyt, filesize($plik));
  10. fclose($uchwyt);
  11. $dane_imiona = explode(",", $zawartosc);
  12. //wczytalem wszystkie imiona
  13. $plik2 = 'nazwiska.txt';
  14. $uchwyt2 = fopen($plik2, 'r');
  15. $zawartosc2 = fread($uchwyt2, filesize($plik2));
  16. fclose($uchwyt2);
  17. $dane_nazwiska = explode(",", $zawartosc2);
  18. //wczytalem wszystkie nazwiska
  19. $ilosc_osob = count($dane_imiona);
  20. //sprawdzilem ile tych nazwisk jest
  21. for( $a=0; $a < ($ilosc_osob-1); $a++) {
  22. echo "$a. $dane_imiona[$a] $dane_nazwiska[$a]<br>";
  23. }
  24. ?>
  25.  
  26. <br><a href="menu.php">Powrót do menu</a>
  27. </body>
  28. <html>

A potem spróbuję dopisać nową osobę, dostaję "osobę ducha" w gratisie, tzn mam wtedy tak zapisane w plikach: ,imie1,imie2,imie3,,dopisaneimie, . Jak się pozbyć tych problemów? Ps. wszelkie uwagi dotyczące kodu, jego estetyczności albo wszystkiego innego co wam przyjdzie na myśl mile widziane smile.gif

EDIT:Mała uwaga- zauważyłem, że ten przecinek dochodzi po prostu za każdym razem kiedy wchodzę albo odświeżam stronę z tym pierwszym kodem. może to jakoś pomoże ustalić przyczynę.
nospor
Odpalasz ten kod rowniez przed wyslaniem forma, wiec nic dziwnego ze pojawiaja ci sie puste przecinki.... ten kod ma byc odpalany dopiero po wyslaniu forma
HTFhere
To ma sens. Jak zapewne się domyślam, sprawienie, żeby kod odpalał się dopiero po wysłaniu formularza jest bardzo prostym zabiegiem? Móglbyś mnie nakierować na funkcję, której trzeba użyć? Jestem raczej początkujący smile.gif
nospor
zrob sobie
print_r($_POST);
przed wyslaniem forma i po wyslaniu forma, a odpowiedz najdzie Cie sama.
mar1aczi
@nospor - Będzie miał zawsze pusto, korzysta z $_GETa wink.gif
@autor: sprawdź tablicę $_GET
b4rt3kk
Albo sprawdź czy $_SERVER['REQUEST_METHOD'] jest równe POST.
nospor
Haha, racja, rob print_r($_GET); biggrin.gif
Swoja drogą to na przyszlosc slij formy postem a nie getem
HTFhere
Nie wiem jak użyć tej funkcji, a:
"print_r() displays information about a variable in a way that's readable by humans."
niewiele mi mówi :/ wyświetla informacje o zmiennej sposobem który jest czytelny dla ludzi?
nospor
Nie miales patrzec co ona robi, tylko co zobaczysz na ekranie po jej uzyciu.... czytaj ze zrozumieniem, do tego nie trzeba miec wprawy z php.

I zrob
print_r($_GET);
i porownaj wyniki przed i po....
HTFhere
Ok, już rozumiem smile.gif mój pomysł jest taki- zrobię instrukcję warunkową, która dla pustego geta nie będzie nic robiła, co o tym sądzicie?
nospor
Od biedy moze byc smile.gif Lepiej sprawdzaj isset()em czy istnieje zadane pole z forma
mar1aczi
Cytat(HTFhere @ 4.11.2013, 16:53:23 ) *
Ok, już rozumiem smile.gif mój pomysł jest taki- zrobię instrukcję warunkową, która dla pustego geta nie będzie nic robiła, co o tym sądzicie?

Zrób, sprawdź, osądź sam ;]
Turson
Generalnie GET jest bezsensu jak nospor wpomniał.
Dla przykładu POST przycisk
<input type="submit" value="Dodaj osobę" name="wyslano">

potem w kodzie

  1. if(isset($_POST["wyslano"]))
  2. {
  3. //Twój kod
  4. }



//Edit: się ludzi do pomocy znalazło hehe biggrin.gif
HTFhere
Dzięki wszystkim za pomoc! Poczytam o tym "POST" o którym piszecie smile.gif a jak narazie, żeby wszystko działało, zrobiłem tak:
  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  4. </head>
  5. <body>
  6. <font size="7" color="red"><b>Dodawanie osoby do bazy danych</b></font><br>
  7. <form>
  8. Podaj Imię:<input type="text" name="imie"><br>
  9. Podaj Nazwisko:<input type="text" name="nazwisko"><br>
  10. <input type="submit" value="Dodaj osobę"><br>
  11. </form>
  12. <?php
  13.  
  14. @$imie = $_GET['imie'];
  15. @$nazwisko = $_GET['nazwisko'];
  16. if (isset($imie) == NULL) {
  17. echo "Dodaj jakąś osobę!";
  18. } else {
  19. $plik = 'imiona.txt';
  20. $zapis_imie = "$imie,";
  21. $uchwyt = fopen($plik, 'a');
  22. fputs($uchwyt, $zapis_imie);
  23. fclose($uchwyt);
  24. $plik2 = 'nazwiska.txt';
  25. $zapis_nazwisko = "$nazwisko,";
  26. $uchwyt2 = fopen($plik2, 'a');
  27. fputs($uchwyt2, $zapis_nazwisko);
  28. fclose($uchwyt2);
  29. }
  30. ?>
  31. <br><a href="menu.php">Powrót do menu</a>
  32.  
  33.  
  34.  
  35.  
  36. </body>
  37. </html>
nospor
isset ma byc na $_GET a nie na zmiennej.
Do zmiennych masz wpisywac dopiero gdy są a nie bledy wygluszasz małpą @
HTFhere
w sensie wrzucić isset nad
  1. @$imie = $_GET['imie'];
  2. @$nazwisko = $_GET['nazwisko'];


i wpisać
  1. if ( isset($_GET) == NULL)

tak?
nospor


if ( isset($_GET['nazwisko']) )

A przypisanie zmiennych masz robic dopiero w tym IFie gdy jest spelniony
b4rt3kk
isset nie zwraca NULL tylko TRUE lub FALSE, także warunek nie ma szans by był spełniony.
nospor
Cytat
także warunek nie ma szans by był spełniony.
Oj ma, przeciez false == null jest prawdziwe. Co nie zmienia faktu, ze jego zapis jest bez sensu na dluższą mete dlatego podalem poprawny kod.
HTFhere
Heh jestem taki głupiutki w tym programowaniu, że aż mnie posądzają o nieczytanie smile.gif Dobra już zrobiłem jak poradziłeś. Dzięki za pomoc!
nospor
Jeszcze jedna rada: zawsze wyswietlaj wszystkie bledy, i nie uzywaj malp @, ktore te bledy wygluszają
http://nospor.pl/php-faq.html#faq-2
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.