Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][MySQL][PHP] Problem w pobieraniu danych przez JS
Forum PHP.pl > Forum > Przedszkole
MateuszRyaN
Witam. Mam taki problem. Posiadam autocompletera który działa następująco. W pliku np. szukaj.php jest skrypt który wykonuje zapytanie do bazy poprzez LIKE (fraze lub część frazy) i pobiera elementy do znaczników <li></li> i podpięty jest pod onclick fill().

W głównym pliku php, po wpisaniu frazy, wysuwają mi się pozycje uzyskane z bazy, po kliknięciu w element wyświetlany jest jako value w polu input. proste.

Wszystko działa ślicznie pięknie bez zarzutów jeżeli wybiorę z listy pozycję np. typu: to jest pierwszy przykład.
Natomiast skrypt zachowuje się bardzo dziwnie i nie pokazuje mi w polu input zawartości bazy jeżeli wybiorę rekord typu: to jest "drugi" przykład.

Podsumowując -> skrypt działa poprawnie tylko wtedy gdy wybiorę stringa bez cudzysłowiów...jeżeli w liście pojawi się słowo w cudzysłowiu...sypie się.

1. myslałem że coś z kodowaniem, zmieniałem, kombinowałem ale zmiany nic nie dały.
2. potem myślałem że coś w tej linii jest nie tak, że któreś cudzysłówia czy apostrofy się wykluczają...ale nie widze tu błędów...
  1. echo "<li style='list-style-type:none; padding:3px;' onClick='fill(\"".$result->nazwa_firmy." , nip: ".$result->nip."\");'>".$result->nazwa_firmy." , nip: ".$result->nip."</li>";


Nie wiem...macie jakieś pomysły? Jak trzeba to mogę wrzucić część skryptu ale powiedzcie co.
Pozdrawiam,
RyaN.
Valker
Widocznie nie filtrujesz danych, które otrzymujesz z formularza. Pokaż to zapytanie, ale najpierw przeczytaj o np. http://pl2.php.net/manual/en/function.mysq...cape-string.php

Najlepiej by było, żebyś za pomocą np. FireBuga (w firefoxie) sprawdził jaka dokładnie jest odpowiedź servera i czy nie ma w niej błędu sql.
mat-bi
Cytat
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.


Jesli już podajesz linki, to popatrz. Obecnie używa się mysql_real_escape_string albo niezależnego od bazy addslashes
MateuszRyaN
Aaa...no to by wiele tłumaczyło ;]

  1. <?php
  2. require_once('db_configuration.php');
  3.  
  4. if(isset($_POST['queryString'])) {
  5. $queryString = mysql_real_escape_string($_POST['queryString']);
  6. if(strlen($queryString) >0) {
  7. $query = mysql_query("SELECT nazwa_firmy, nip FROM `kontrahenci` WHERE nazwa_firmy LIKE '$queryString%' or nip LIKE '$queryString%' LIMIT 10");
  8. if($query) {
  9. while ($result = mysql_fetch_object($query)) {
  10. echo "<li style='list-style-type:none; padding:3px;' onClick='fill(\"".$result->nazwa_firmy." , nip: ".$result->nip."\");'>".$result->nazwa_firmy." , nip: ".$result->nip."</li>"; }
  11. } else { echo '<div class="alert_n">Błąd zapytania</div>'; }
  12. } else {}
  13. } else { echo '<div class="alert_n">Brak dostępu do źródła danych</div>'; }
  14. ?>
Valker
No fakt ;P
Niestety dawno już tej funkcji nie używałem i wrzuciłem nazwę z pamięci (linka też nawet nie sprawdzałem co tam jest napisane) tongue.gif
Najważniejsze, że problem został rozwiązany (?) ;P
MateuszRyaN
Niezupełnie...to oznacza że mam się pozbyć tej funkcji czy zastąpić ją inną, czy może da się to jakoś ominąć?
Valker
Heh nawet nie spojrzałem na twój post ;P
Tak czy ianczej zapytanie wygląda poprawnie i wydaje się, że nie powinno sprawiać problemów. Sprawdzałeś za pomocą Firebufa lub innego narzędzia deweloperskiego (jak to nazwane jest w innych przeglądarkach) co dokładnie zwraca zapytanie do bazy przez ajax?
MateuszRyaN
Jeżeli chodzi o problem to wiem o co chodzi, w sumie to nie potrzebuje filtrować żadnych danych bo one już w tej bazie są...więc pozbyłem się tej funkcji.

A co do FireBuga...to powiem Ci szczerze że używam tego na codzień do podglądów styli błędów itp...ale nie wiem gdzie jest ta kontrola po stronie serwera o której mówisz biggrin.gif Gdzie się to włącza? Mam najnowszą wersje FireBuga pod firefoxa 4.0
Valker
Zależy czego używasz do obsługi AJAX, ale jak np. jquery to w zakładce "Konsola" powinien pojawiać się wpis dla wysłanego żądania przez AJAX. Widać tam nagłówki, dane przesyłane do servera oraz dokładnie jaka jest odpowiedź servera. Ale jeśli nie jest to błąd z zapytaniem (jak podejrzewałem na początku, ale już wiemy, że nie) to nie będzie tam żadnego błędu ;D A filtrować dane powinieneś nawet jak je pobierasz. Poczytaj o sql injection ;P

Tak czy inaczej nie mam pomysłu na powód, który powoduje twój problem sad.gif
MateuszRyaN
Czytałęm o SQL Injaction czytałęm tongue.gif Dlatego defakto przywróciłem tą funkcję...

Ale rzecz w tym że nawet bez mysql_real_escape_string nie chodziło tongue.gif Tak używam jQuery...
może w JS coś jest nie tak? tongue.gif Znasz sie troche?

  1. <script type="text/javascript">
  2. function lookup(inputString) {
  3. if(inputString.length == 0) {
  4.  
  5. $('#sugestia').hide();
  6. } else {
  7. $.post("search_nabywca.php", {queryString: ""+inputString+""}, function(data){
  8. if(data.length >0) {
  9. $('#sugestia').show();
  10. $('#autoSugestiaLista').html(data);
  11. }
  12. });
  13. }
  14. }
  15.  
  16. function fill(thisValue) {
  17. $('#inputString').val(thisValue);
  18. setTimeout("$('#sugestia').hide();", 200);
  19. }

Ale no cholera z JS też wygląda na to że jest wrzystko OK... sad.gif

Valker...

w tym firebugu wszystko śmiga ok. Wszystko na zielono... ale jak wybiore z tym apostrofem to wywala mi takie coś:

missing ) after argument list
[Wstrzymuj na tym błędzie] fill(""DAREX" Usługi i Handel Sokół Dariusz , nip: 647-235-43-81");

EDIT. kurde no już wiem gdzie jest ten błąd. Sypie się przy tej funkcji onclick...

Czy istnieje jakieś rozwiązanie na pobieranie elementów z bazy, które zawierają cudzysłowia??

To nikt nie pomoże?? Kombinowałem ale nic z tego...jak pobiera mi stringa z cudzysłowem to pierwszy cudzysłów jakby zamyka funkcje ;/ Nie wiem... nie umiem sobie sam poradzić.
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.