Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Jak sprawdzić czy zmienna zawiera znaki niedrukowane ?
mefistofeles
post 21.10.2009, 22:46:54
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
Meares
post 21.10.2009, 22:53:32
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.


--------------------
manual mmocenter
Nie pomagam na PW!
Go to the top of the page
+Quote Post
mefistofeles
post 21.10.2009, 22:59:10
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 21.10.2009, 23:12:04
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 winksmiley.jpg


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
mefistofeles
post 21.10.2009, 23:16:29
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 21.10.2009, 23:46:53
Post #6





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

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


Tego nie zobaczysz. haha.gif Musisz się pobawić w ich ponowne dodawanie, przy sprawdzaniu, czy coś jest w tytule.


--------------------
manual mmocenter
Nie pomagam na PW!
Go to the top of the page
+Quote Post
thek
post 22.10.2009, 07:48:02
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...


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
webdice
post 22.10.2009, 08:51:04
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 22.10.2009, 09:33:50
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 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ć.

Ten post edytował thek 22.10.2009, 11:28:08


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
ddiceman
post 22.10.2009, 10:35:18
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 16:21