Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Problem z apostrofem w rekordzie
RafalBeginner
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 3.06.2015

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


Hej,

Pracuję nad stworzeniem prostego słownika branżowego na zasadzie wyszukiwarka + funkcja "Zobacz również" z hasłami zawierającymi wyszukiwane słówko. Jest to słownik angielsko-polski. Jestem językowcem, nie programistą, proszę o wyrozumiałość (IMG:style_emoticons/default/smile.gif)

Udało mi się stworzyć prymitywny skrypt, który działa i wyświetla podobne hasła zawierające wpisane słówko w formie przycisków (później ostylowanych), które po kliknięciu wracają do wyszukiwania (tak jak "czy chodziło Ci o..." w Google).

Problem polega na tym, że jeśli mam zwrot z apostrofem np. "John's house" to mi ładnie wyszukuje. Ale jeśli wpiszę "house" i wyskoczy mi podpowiedź typu Zobacz również "John's house" to już kliknięcie na "John's house" nie działa. Nie wyskakuje żaden błąd.

Wiem, że problem był wałkowany kilkakrotnie, ale nie umiem dalej znaleźć błędu. Rekordy ładuję do bazy danych przez mysql_real_escape_string i w bazie wyświetlają się pięknie, z apostrofami. Nawet na przyciskach "Zobacz również" wyświetla się hasło z apostrofem, ale po kliknięciu klapa.

  1. <?php
  2. if(isset($_POST['wpisane']))
  3. {
  4. $slowo = $_POST['wpisane'];
  5. $slowo = trim($slowo);
  6.  
  7. $serwer = 'localhost';
  8. $uzytkownik = 'root';
  9. $haslo = 'password';
  10.  
  11. $polaczenie = mysql_connect($serwer, $uzytkownik, $haslo);
  12. mysql_select_db('slownik', $polaczenie) or die ('Error: ' . mysql_error());
  13.  
  14. // WYSZUKIWANIE HASŁA
  15. mysql_query("SET NAMES 'utf8'");
  16. $wyniki1 = mysql_query("SELECT angielski, polski FROM slownik WHERE trim(angielski) = '$slowo'");
  17.  
  18. //pobieramy cały wiersz, potem element z kolumny
  19. $kolumna1 = mysql_fetch_array($wyniki1);
  20. $wyszukaj = $kolumna1['polski'];
  21. $source = $kolumna1['angielski'];
  22.  
  23. // generujemy gotowe tłumaczenie
  24. echo $kolumna1['polski'];
  25. //KONIEC WYSZUKIWANIA
  26.  
  27.  
  28.  
  29. // WYSZUKIWANIE HASEŁ ZAWIERAJĄCYCH WPROWADZONE SŁÓWKO:
  30. mysql_query("SET NAMES 'utf8'");
  31. mysql_query("CREATE FULLTEXT INDEX angielski ON slownik (angielski);");
  32.  
  33. //wyszukujemy wszystkie kolumny, które pasują do wzorca "$slowo"
  34. $podobne = mysql_query("SELECT angielski FROM slownik WHERE MATCH(angielski) AGAINST('$slowo');");
  35. // teraz je wszystkie wyniki wypisujemy w formie przycisków
  36. $wszystkie = array();
  37. while ($row = mysql_fetch_array($podobne)) {
  38. $wszystkie[] = $row['angielski'];
  39. }
  40. $wszystkie1 = array();
  41. $wszystkie1[] = "$slowo";
  42. $wszystkie = array_merge(array_diff($wszystkie,$wszystkie1));
  43. $n = count($wszystkie);
  44. if($n==0)
  45. {
  46. echo '';
  47. }
  48. else
  49. {
  50. echo '<p> Zobacz również:</p>';
  51. for ($i=0;$i<$n; $i++){
  52. //wypisujemy przyciski - po przyciśnięciu danego przycisku skrypt wyszukuje to słowo w słowniku
  53. echo "<form method='post'><button formaction='index.php' name='wpisane' value='$wszystkie[$i]'>$wszystkie[$i]</button></form>";
  54. }
  55. }
  56. //koniec wyszukiwania haseł zawierających wprowadzone słówko. Amen
  57. }
  58. mysql_close($polaczenie);
  59. ?>


Proszę życzliwych o pomoc...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Wyszukiwane słowo też musisz przepuścić przez mysql_real_escape_string() zanim je wyszukasz.

Dodatkowo wyświetl sobie zapytanie w echo które wyszukuje słowo to zobaczysz gdzie masz błąd.

Ten post edytował Pyton_000 8.09.2015, 09:59:00
Go to the top of the page
+Quote Post
RafalBeginner
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 3.06.2015

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


Cytat(Pyton_000 @ 8.09.2015, 10:58:27 ) *
Wyszukiwane słowo też musisz przepuścić przez mysql_real_escape_string() zanim je wyszukasz.

Dodatkowo wyświetl sobie zapytanie w echo które wyszukuje słowo to zobaczysz gdzie masz błąd.


Hej, dzięki za megabłyskawiczną odpowiedź (IMG:style_emoticons/default/smile.gif)

Wywaliłem echo (żadnych błędów poza "Depreciated..." ale to chyba tylko ostrzeżenie).

Spróbowałem też mysq_real_escape_string() i też nic.

Czy to ma wyglądać mniej więcej tak? :

  1. $slowko = trim($slowko);
  2. $slowko=mysql_real_escape_string($slowko);


a do bazy ładuję tak:

  1. $zmienna1="haslo'z apostrofem";
  2. $zmienna1=mysql_real_escape_string($zmienna1);
  3. $zmienna2="wersja polska";
  4. $zmienna2=mysql_real_escape_string($zmienna2);
  5. mysql_query("INSERT INTO slownik (angielski, polski) VALUES ('$zmienna1','$zmienna2')");


bo może tu jakieś bzdury robię.

Cytat(Pyton_000 @ 8.09.2015, 10:58:27 ) *
Dodatkowo wyświetl sobie zapytanie w echo które wyszukuje słowo to zobaczysz gdzie masz błąd.


Nie wiem czy to zrozumiałem poprawnie - jest echo w linii 53, które wyświetla (na przycisku) poprawny zwrot "haslo'z apostrofem", więc wygląda na to, że w zmiennej przechowuje się wszystko jak należy, ale wyniku i tak brak (IMG:style_emoticons/default/sad.gif) po kliknięciu na przycisk z podpowiedzią powinno pojawić się echo z linii 24 - tak się dzieje w przypadku wszystkich haseł bez apostrofu... Więc najwidoczniej gdzieś błąd powoduje apostrof.
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: 24.08.2025 - 17:44