Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Jak sprawdzić czy zmienna zawiera znaki niedrukowane ?
Forum PHP.pl > Forum > Przedszkole
mefistofeles
Dodaje sobie nowy rekord do bazy jeśli zmienna tytul nie jest pusta:


  1. if ($tytul != '') { dodanie rekordu do bazy } ;


Jednak w bazie dodają mi się rekordy, których tytul nie jest podany - pole w bazie 'tytul' jest puste, chociaż
powyższa instrukcja miała przed tym zabezpieczać.

Dlaczego w takim razie mimo iż tytułu nie ma rekord został dodany ?

Może chodzi o jakieś znaki niedrukowane których nie widać ?

Jak to sprawdzić ?
Meares
  1. if(!empty($tytul)) { // jesli tytul jest inny niz pusty
  2. // dodawanie rekoru
  3. }
  4. // inaczej, aczkolwiek tak samo
  5. if(isset($tytul)) {
  6. // dodawanie rekordu
  7. }


Takie rzeczy sprawdzaj, którymś z powyższych sposobów.
mefistofeles
Dokładnie taki sam efekt, dalej dodaje mi przy niektórych rekordach pusty tytul :/
thek
To weż pozbaw ewentualnie ich zmienna... trim się kłania winksmiley.jpg
mefistofeles
Użyłem tego do oczyszczenia, ale nie pomaga:

  1. function clean($nazwa) {
  2. $nazwa = ereg_replace ("(\t)+", "\t", $nazwa);
  3. $nazwa = ereg_replace ("\r\n", "", $nazwa);
  4. return ereg_replace (" +", " ", $nazwa);
  5. }
  6.  
  7. $nazwa = clean($nazwa);
  8.  
  9. $nazwa = trim($nazwa);


W takim razie jak zobaczyć jakie znaki niedrukowane znajdują się w danym wierszu tabeli (teoretycznie pustym) ?
Meares
Tego nie zobaczysz. haha.gif Musisz się pobawić w ich ponowne dodawanie, przy sprawdzaniu, czy coś jest w tytule.
thek
A po co je ujawniać? Skoro chcesz wyczyścić je ze zmiennej i jesteś pewien, że nie powinno w niej być niczego to po użyciu trim() wszystkie z lewej i prawej niedrukowalne znaki powinny zniknąć. Jeśli tylko one są w zmiennej to stanie sie ona całkowicie pusta. A chyba o to, a nie ich wyświetlenie, Ci chodzi...
webdice
Formalnie:

Cytat(Meares @ 21.10.2009, 23:53:32 ) *
  1. if(!empty($tytul)) { // jesli tytul jest inny niz pusty
  2. // dodawanie rekoru
  3. }
  4. // inaczej, aczkolwiek tak samo
  5. if(isset($tytul)) {
  6. // dodawanie rekordu
  7. }


Takie rzeczy sprawdzaj, którymś z powyższych sposobów.


Nie jest tak samo, nie wprowadzaj ludzi w błąd. Empty sprawdza czy zmienna jest pusta, isset czy zmienna istnieje i nie ma wartości NULL (stąd mylne wrażenie że działają tak samo).
thek
Webdice ma rację. isset sprawdza istnienie zmiennej, którego empty nie zrobi. Innymi słowy empty na nieistniejącej zmiennej zwróci błąd, zaś isset jest na taką możliwość przygotowany. Zajrzyj dokładniej do manuala bo zapewne nie uwierzysz winksmiley.jpg

EDIT:
@down: zależy od podejścia... Dla mnie notice to także błąd, ale małego kalibru. Tak czy inaczej powinien się go programista pozbyć, nie używając "małpowania" winksmiley.jpg Bo kto wie czy ten mały notice, którego się nie zauważy, nie spowoduje gdzieś indziej znacznie większego. Miałem ostatnio podobny motyw, bo programista zrobił @ w mysql_query i interpreter wywalał mi błąd w mysql_fetch_array dopiero, przez co szukałem w złym miejscu. Mysql_query zwróciło oczywiście brak rekordów, co nie jest błędem, tyle że nie było kontroli tego i poszło do mysql_fetch_array, tyle że ileś linii dalej i samo query było "zamałpowane". Dopiero po chwili załapałem, że błąd jest zupełnie gdzie indziej. Dlatego małpom mówię "nie", nawet jeśli to tylko notice, bo problemy to może w późniejszym etapie sprawiać takie, że trzeba cały kod analizować od tyłu, a nie tam gdzie interpreter błąd pokazuje. Jakby nie patrzeć, po to jest obsługa wyjątków z try-catch, czy choćby zwykłymi if by to wyłapywać.
ddiceman
thek nie błąd (error) a ostrzeżenie (notice)
mefistofeles:
  1. $tytul = trim($tytul);
  2. if( !empty($tytul) ){
  3. //ciag dalszy
  4. }
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.