Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Jak sprawdzić czy zmienna zawiera znaki niedrukowane ?
mefistofeles
post
Post #1





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 23.06.2009

Ostrzeżenie: (10%)
X----


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ć ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Meares
post
Post #2





Grupa: Zarejestrowani
Postów: 102
Pomógł: 13
Dołączył: 16.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
mefistofeles
post
Post #3





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 23.06.2009

Ostrzeżenie: (10%)
X----


Dokładnie taki sam efekt, dalej dodaje mi przy niektórych rekordach pusty tytul :/
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To weż pozbaw ewentualnie ich zmienna... trim się kłania (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
mefistofeles
post
Post #5





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 23.06.2009

Ostrzeżenie: (10%)
X----


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) ?

Ten post edytował mefistofeles 21.10.2009, 23:23:23
Go to the top of the page
+Quote Post
Meares
post
Post #6





Grupa: Zarejestrowani
Postów: 102
Pomógł: 13
Dołączył: 16.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Tego nie zobaczysz. (IMG:style_emoticons/default/haha.gif) Musisz się pobawić w ich ponowne dodawanie, przy sprawdzaniu, czy coś jest w tytule.
Go to the top of the page
+Quote Post
thek
post
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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...
Go to the top of the page
+Quote Post
webdice
post
Post #8


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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).
Go to the top of the page
+Quote Post
thek
post
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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 (IMG:style_emoticons/default/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" (IMG:style_emoticons/default/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ć.

Ten post edytował thek 22.10.2009, 11:28:08
Go to the top of the page
+Quote Post
ddiceman
post
Post #10





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


thek nie błąd (error) a ostrzeżenie (notice)
mefistofeles:
  1. $tytul = trim($tytul);
  2. if( !empty($tytul) ){
  3. //ciag dalszy
  4. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:12