Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Problem z apostrofem w rekordzie
Forum PHP.pl > Forum > Przedszkole
RafalBeginner
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ść 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...
Pyton_000
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.
RafalBeginner
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ź 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 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.
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.