Witam. Mam pewnie banalny problem, ale nie bardzo wiem jak się za niego zabrać.

Mam plik edytuj_form.php w którym odczytuję dane wiersza tabeli , uzupełniam utworzone pola input lub select danymi zgodnymi z informacjami zawartymi w wierszu.
  1. <?php
  2. $pyt =mysql_query("SELECT produkty.prod_id,produkty.prod_kod,rodzaj.rodzaj_nazwa,kategoria.kat_nazwa,
  3. produkty.prod_nazwa,wymiary.wymiar_wart,cennik.cena_wart FROM produkty
  4. LEFT JOIN rodzaj
  5. ON produkty.rodzaj_id = rodzaj.rodzaj_id
  6. LEFT JOIN kategoria
  7. ON produkty.kat_id = kategoria.kat_id
  8. LEFT JOIN wymiary
  9. ON wymiary.wymiar_id = produkty.wymiar_id
  10. LEFT JOIN cennik
  11. ON cennik.wymiar_id = produkty.wymiar_id
  12. WHERE produkty.prod_id =".$_GET['prod_id']) or die (mysql_error());
  13. $prod_data = mysql_fetch_object($pyt);
  14. echo '<div id="wiersz">';
  15. echo '<div class="prod_id"><input type="text" name="prod_id" disabled=disabled value="'.$prod_data->prod_id.'"/></div>';
  16. echo '<div class="prod_kod"><input type="text" name="prod_kod" value="'.$prod_data->prod_kod.'"/></div>';
  17. $pyt = mysql_query("SELECT rodzaj_nazwa FROM rodzaj");
  18. echo '<div class="produkt_type"><form method="GET" action=""><select id="w_produkt_type" name="rodzaj">';
  19. while ($row = mysql_fetch_object($pyt)){
  20. if($row->rodzaj_nazwa == $prod_data->rodzaj_nazwa)
  21. echo '<option value="'.$row->rodzaj_nazwa.'" SELECTED >'.$row->rodzaj_nazwa.'</option>';
  22. else
  23. echo '<option value="'.$row->rodzaj_nazwa.'">'.$row->rodzaj_nazwa.'</option>';
  24. }
  25. echo '</select></form></div>';
  26. $pyt = mysql_query("SELECT kategoria.kat_nazwa FROM kategoria
  27. LEFT JOIN rodzaj
  28. ON kategoria.rodzaj_id=rodzaj.rodzaj_id
  29. WHERE rodzaj.rodzaj_nazwa='".$prod_data->rodzaj_nazwa."'") or die (mysql_error());
  30. echo'<div class="category"><select id="kat_nazwa" name="kategoria">';
  31. while ($row = mysql_fetch_object($pyt)){
  32. if($row->kat_nazwa == $prod_data->kat_nazwa)
  33. echo '<option value="'.$row->kat_nazwa.'" SELECTED >'.$row->kat_nazwa.'</option>';
  34. else
  35. echo '<option value="'.$row->kat_nazwa.'">'.$row->kat_nazwa.'</option>';
  36. }
  37. echo '</select></div>';
  38. echo '<div class="prod_nazwa"><input style="width: auto;" type="text" name="prod_nazwa" maxlength="255"value="'.$prod_data->prod_nazwa.'" /></div>';
  39. echo '<input type=hidden id="prod_nazwa2" value="'.urlencode($prod_data->prod_nazwa).'"/>';
  40. echo'<div class="wymiar_wart">';
  41. $pyt = mysql_query("SELECT wymiary.wymiar_wart FROM wymiary
  42. LEFT JOIN rodzaj
  43. ON wymiary.rodzaj_id = rodzaj.rodzaj_id
  44. WHERE rodzaj.rodzaj_nazwa ='".$prod_data->rodzaj_nazwa."'") or die (mysql_error());
  45. echo '<select id="wymiar_wart" name="wymiar_wart">';
  46. while ($row = mysql_fetch_object($pyt)){
  47. if($row->wymiar_wart == $prod_data->wymiar_wart)
  48. echo '<option style="text-align: left;" value="'.$row->wymiar_wart.'" SELECTED>'.$row->wymiar_wart.'</option>';
  49. else
  50. echo '<option style="text-align: left;" value="'.$row->wymiar_wart.'">'.$row->wymiar_wart.'</option>';
  51. }
  52. echo '</select>';
  53. echo '</div>';
  54. echo '<div class="cena_wart"><input style="text-align: right;" type="text" name="cena_wart" disabled=disabled value="'.$prod_data->cena_wart.'"/></div>';
  55. echo '<div class="button_edytuj"><button type=button id="button_edytuj">Zatwierdź</button></div>';
  56. echo '</div>';
  57. ?>


Po wprowadzeniu zmian przez naciśnięcie przycisku "Zatwierdź" dane zostają przesłane przy użyciu jQuery.ajax() do pliku update_row.php , w którym aktualizuje wpis w tabeli.

Funkcja przesyłająca dane.
CODE

function edytuj_(){
$.ajax({
type: 'GET',
url: 'update_row.php',
data: "ptype="+$("#w_produkt_type").val()+"&pid="+$("#wiersz div.prod_id input").val()+"&kat_nazwa="+$("select#kat_nazwa").val()+"&prod_kod="+$("div.prod_kod input").val()+"&prod_nazwa="+$("div.prod_nazwa input").val()+"&wymiar_wart="+$("div.wymiar_wart select").val(),
success: function(x) {
$("#zmienne").html(x);
}
});
}
$(document).ready(function(){
$("#button_edytuj").click(function(){
edytuj_();
});
});


Plik update_row.php
  1. <?php
  2. include_once('polacz_z_baza.php');
  3. $alert='';
  4. if(strlen($_GET['prod_kod'])<4){
  5. $alert = $alert.'Podałeś błędny kod produktu!(min 4 znaki)<br />';
  6. }
  7. else {
  8. $prod_kod = strtoupper($_GET['prod_kod']);
  9. }
  10. if($_GET['prod_nazwa']==''){
  11. $alert = $alert.'Nie podałeś nazwy produktu! <br />';
  12. }
  13. else {
  14. $prod_nazwa = $_GET['prod_nazwa'];
  15. echo $prod_nazwa;
  16. }
  17. if ($alert != '') echo $alert;
  18. else{
  19. $pyt = "SELECT kat_id FROM kategoria
  20. LEFT JOIN rodzaj
  21. ON kategoria.rodzaj_id = rodzaj.rodzaj_id
  22. WHERE kat_nazwa = '".$_GET['kat_nazwa']."'
  23. AND rodzaj.rodzaj_nazwa ='".$_GET['ptype']."'";
  24. $kat = $pyt->kat_id;
  25. $pyt = mysql_query("SELECT wymiar_id FROM wymiary
  26. WHERE wymiar_wart='".$_GET['wymiar_wart']."'") or die (mysql_error());
  27. $pyt = mysql_fetch_object($pyt);
  28. $wym = $pyt->wymiar_id;
  29. $pyt = "UPDATE produkty
  30. SET prod_kod='".$_GET['prod_kod']."',kat_id=".$kat.",
  31. prod_nazwa='".$prod_nazwa."',wymiar_id=".$wym."
  32. WHERE prod_id=".$_GET['pid'];
  33. echo $pyt;
  34. $pyt = mysql_query($pyt) or die (mysql_error());
  35. echo $prod_nazwa;
  36. //echo '<script TYPE="text/javascript">alert(\'Wpis został poprawiony! \');location.href="polacz.php";</SCRIPT>';
  37. }
  38. ?>


Teraz przejdę do opisu problemu. Chodzi głównie o wystąpienie w zmiennej przesyłanej przy pomocy ajax() znaku &amp; ampersand.
Dane odczytywane z bazy wyświetlane są poprawnie.
Natomiast przy wpisaniu w pole prod_nazwa np. 'cos & cos' przesłane zostaje tylko 'cos '. Reszta po znaku &amp; zostaje przesłana jako nowa zmienna bez żadnej wartości. Jeżeli nie mogę przesłać tego znaku, to co wykorzystać do zamiany go np na 'amp;' w ciągu przed wysłaniem danych.

Próbowałem już htmlspecialchar() oraz urlencode(). W obu przypadkach efekt był taki sam jak opisany wyżej.