Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Kodowanie przy dodawaniu za pomocą formularza
Forum PHP.pl > Forum > Przedszkole
in5ane
Mam problem, otóż nie mam polskich znaków jak dodaję polskie znaki za pomocą formularz.

W bazie mam jakieś questionmark.gifquestionmark.gif? (same znaki zapytania), zamiast polskich znaków.

Metoda porównywania napisów bazy: latin2_general_ci
Metoda porównywania napisów rekordów w tabeli: latin2_general_ci
System porównań dla połączenia MySQL: utf8_unicode_ci
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)

I jak dodaje poprzez phpMyAdmin to są te polskie znaki, a jak przez formularz w pliku to nie ma polskich znaków.


Fragmentu kodu odpowiedzialne z dodawanie:
  1. <?php
  2. echo '<div align="center">
  3. <form method="post" action="?akcja=1">
  4. <table border="0" style="border-collapse: collapse">
  5.  
  6. <tr>
  7. <td width="50%"><b>Nick:</b></td>
  8. <td width="50%"><input type="text" name="nick" style="font-family: Verdana; font-size: 10px"><br /></td>
  9.  </tr>
  10.  
  11. <tr>
  12. <td width="50%"><b>Wiek:</b></td>
  13. <td width="50%"><input type="text" name="wiek" style="font-family: Verdana; font-size: 10px"><br /></td>
  14.  </tr>
  15.  
  16. <tr>
  17. <td width="50%"><b>Miejscowość:<br /><font size="1">(pisać z polskimi znakami)</font></b></td>
  18. <td width="50%"><input type="text" name="miejscowosc" style="font-family: Verdana; font-size: 10px"><br /></td>
  19.  </tr>
  20.  
  21. <tr>
  22. <td width="50%"><b>Cel ogłoszenia:</b></td>
  23. <td width="50%"><select name="cel" style="font-family: Verdana; font-size: 10px">
  24. <option value="1">Miłość</option>
  25. <option value="2">Przyjaźń</option>
  26. </select><br /></td>
  27.  </tr>
  28.  
  29. <tr>
  30. <td width="50%"><b>Wzrost:</b></td>
  31. <td width="50%"><select name="wzrost" style="font-family: Verdana; font-size: 10px">
  32. <option value="">----</option>';
  33. for ($i = 110; $i <= 220; $i++) {
  34. echo "<option value='$i'>$i cm</option>";
  35. }
  36. echo '
  37. </select><br /></td>
  38. </tr>
  39.  
  40. <tr>
  41. <td width="50%"><b>Kolor oczu:</b></td>
  42. <td width="50%"><select name="oczy" style="font-family: Verdana; font-size: 10px">
  43. <option value="">----</option>
  44. <option value="1">szare</option>
  45. <option value="2">zielone</option>
  46. <option value="3">niebieskie</option>
  47. <option value="4">piwne</option>
  48. <option value="5">czarne</option>
  49. </select><br /></td>
  50. </tr>
  51.  
  52. <tr>
  53. <td width="50%"><b>Kolor włosów:</b></td>
  54. <td width="50%"><select name="wlosy_kolor" style="font-family: Verdana; font-size: 10px">
  55. <option value="">----</option>
  56. <option value="1">blond</option>
  57.  <option value="2">brunet(ka)</option>
  58. <option value="3">szatyn(ka)</option>
  59.  <option value="4">czarne</option>
  60. <option value="5">rude</option>
  61. <option value="6e">farbowane</option>
  62. </select><br /></td>
  63.  </tr>
  64.  
  65. <tr>
  66. <td width="50%"><b>Długość włosów:</b></td>
  67. <td width="50%"><select name="wlosy_dlugosc" style="font-family: Verdana; font-size: 10px">
  68. <option value="">----</option>
  69. <option value="1">krótkie</option>
  70. <option value="2">średnie</option>
  71. <option value="3">długie</option>
  72. </select><br /></td>
  73.  </tr>
  74.  
  75. <tr>
  76. <td width="50%"><b>Wymarzony partner/ka:</b></td>
  77. <td width="50%"><textarea name="partner" cols="15" rows="1" style="font-family: Verdana; font-size: 10px"></textarea><br /></td>
  78.  </tr>
  79.  
  80. <tr>
  81. <td width="50%"><b>O sobie:</b></td>
  82. <td width="50%"><textarea name="osobie" cols="15" rows="1" style="font-family: Verdana; font-size: 10px"></textarea><br /></td>
  83. </tr>
  84.  
  85. <tr>
  86. <td width="50%"><b>Numer telefonu:</b></td>
  87. <td width="50%"><input type="text" name="telefon" style="font-family: Verdana; font-size: 10px"><br /></td>
  88.  </tr>
  89.  
  90. <tr>
  91. <td width="50%"><b>E-Mail:</b></td>
  92. <td width="50%"><input type="text" name="email" style="font-family: Verdana; font-size: 10px"></td>
  93.  </tr>
  94.  
  95.  <tr>
  96. <td width="50%"></td>
  97. <td width="50%"><input type="reset" value="Wyczyść" style="font-family: Verdana; font-size: 10px">
  98. <input type="submit" value="Dodaj" style="font-family: Verdana; font-size: 10px"></td>
  99.  </tr>
  100. </table>
  101. </form>
  102. <br /><font color="red">Aby poprawnie dodać ogłoszenie, należy uzupełnić wszystkie pola.</font>
  103. </div>';
  104. ?>


  1. <?php
  2. function sprawdz_email($email) {
  3.  if(!preg_match('/^[a-z0-9.-_]+@[a-z0-9-_]+.([a-z0-9-_]+.)*?[a-z]+$/is', $email)) {
  4. return false;
  5.  }
  6.  else {
  7. return true;
  8.  }
  9. }
  10.  
  11. if((empty($nick) or empty($wiek) or empty($miejscowosc) or empty($cel) or empty($wzrost) or empty($oczy) or empty($wlosy_kolor) or empty($wlosy_dlugosc) or empty($partner) or empty($osobie) or empty($telefon) or empty($email))) {
  12.  echo '<center>Nie wypełniłeś/aś wszystkich pól.<br><br><a href="ogloszenie.php">Wstecz</a></center>';
  13.  } else {
  14.  if(sprawdz_email("$email")) {
  15. $query = "INSERT INTO users (id, nick, wiek, miejscowosc, cel, wzrost, oczy, wlosy_kolor, wlosy_dlugosc,
     partner, osobie, telefon, email, status, data_dodania) VALUES ('', '$nick', '$wiek', '$miejscowosc', '$cel', '$wzrost', '$oczy', '$wlosy_kolor', '$wlosy_dlugosc', '$partner', '$osobie', '$telefon', '$email', '2', '"
    .time()."');";
  16. $result = mysql_query ($query);
  17. $id = mysql_insert_id();
  18. echo '<center>Dodano poprawnie!<br /><br /> Aby przejść do następnego etapu kliknij <a href="?akcja=2&id='.$id.'">tutaj</a>.</center>';
  19. } else {
  20. echo '<center>Podany zły adres e-mail!<br><br><a href="ogloszenie.php">Wstecz</a></center>';
  21. }
  22. }
  23. ?>


Z góry dziękuję za pomoc.
prond
Przed wysyłaniem / odbieraniem danych z bazy powinieneś ją poinformować jakim kodowaniem się posługujesz w aplikacji.

Służy do tego poniższe polecenie:
  1. <?php
  2. mysql_query("SET names 'latin2';"); // jak posługujesz się w aplikacji ISO-8859-2
  3. mysql_query("SET names 'utf8';"); // jak posługujesz się w aplikacji UTF'em
  4. ?>


W pliku konfiguracyjnym MySQL'a można zmienić domyślne kodowanie dla klienta. Niestety wiele firm hostingowych ustawia ten parametr na 'latin2', a obecnie coraz więcej stron jest w UTF8.
in5ane
A może mi ktoś powiedzieć jak najlepiej kodować dane. Tzn.:

Metoda porównywania napisów bazy
Metoda porównywania napisów rekordów w tabeli
System porównań dla połączenia MySQL
System kodowania znaków dla MySQL

Oraz co w pliku.
prond
Ja korzystam praktycznie tylko z UTF'a (o ile firma hostingowa mi czegoś nie narzuca w bazie danych).

Za UTFem przemawiają takie argumenty:
- możesz obsłużyć nie tylko polskie ogonki,
- większość edytorów kodu PHP, czy SQL ma wsparcie dla UTF (latin2 rzadziej)
- UTF robi się coraz bardziej popularny (to ułatwi dołączanie nowych komponentów, zwłaszcza AJAXowych, gdzie UTF jest domyślnym kodowaniem)
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.