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.
<?php $pyt =mysql_query("SELECT produkty.prod_id,produkty.prod_kod,rodzaj.rodzaj_nazwa,kategoria.kat_nazwa, produkty.prod_nazwa,wymiary.wymiar_wart,cennik.cena_wart FROM produkty LEFT JOIN rodzaj ON produkty.rodzaj_id = rodzaj.rodzaj_id LEFT JOIN kategoria ON produkty.kat_id = kategoria.kat_id LEFT JOIN wymiary ON wymiary.wymiar_id = produkty.wymiar_id LEFT JOIN cennik ON cennik.wymiar_id = produkty.wymiar_id echo '<div class="prod_id"><input type="text" name="prod_id" disabled=disabled value="'.$prod_data->prod_id.'"/></div>'; echo '<div class="prod_kod"><input type="text" name="prod_kod" value="'.$prod_data->prod_kod.'"/></div>'; echo '<div class="produkt_type"><form method="GET" action=""><select id="w_produkt_type" name="rodzaj">'; if($row->rodzaj_nazwa == $prod_data->rodzaj_nazwa) else } LEFT JOIN rodzaj ON kategoria.rodzaj_id=rodzaj.rodzaj_id if($row->kat_nazwa == $prod_data->kat_nazwa) else } echo '<div class="prod_nazwa"><input style="width: auto;" type="text" name="prod_nazwa" maxlength="255"value="'.$prod_data->prod_nazwa.'" /></div>'; LEFT JOIN rodzaj ON wymiary.rodzaj_id = rodzaj.rodzaj_id if($row->wymiar_wart == $prod_data->wymiar_wart) echo '<option style="text-align: left;" value="'.$row->wymiar_wart.'" SELECTED>'.$row->wymiar_wart.'</option>'; else echo '<option style="text-align: left;" value="'.$row->wymiar_wart.'">'.$row->wymiar_wart.'</option>'; } echo '<div class="cena_wart"><input style="text-align: right;" type="text" name="cena_wart" disabled=disabled value="'.$prod_data->cena_wart.'"/></div>'; ?>
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
<?php include_once('polacz_z_baza.php'); $alert=''; $alert = $alert.'Podałeś błędny kod produktu!(min 4 znaki)<br />'; } else { } if($_GET['prod_nazwa']==''){ $alert = $alert.'Nie podałeś nazwy produktu! <br />'; } else { $prod_nazwa = $_GET['prod_nazwa']; } else{ $pyt = "SELECT kat_id FROM kategoria LEFT JOIN rodzaj ON kategoria.rodzaj_id = rodzaj.rodzaj_id WHERE kat_nazwa = '".$_GET['kat_nazwa']."' AND rodzaj.rodzaj_nazwa ='".$_GET['ptype']."'"; $kat = $pyt->kat_id; $wym = $pyt->wymiar_id; $pyt = "UPDATE produkty SET prod_kod='".$_GET['prod_kod']."',kat_id=".$kat.", prod_nazwa='".$prod_nazwa."',wymiar_id=".$wym." WHERE prod_id=".$_GET['pid']; //echo '<script TYPE="text/javascript">alert(\'Wpis został poprawiony! \');location.href="polacz.php";</SCRIPT>'; } ?>
Teraz przejdę do opisu problemu. Chodzi głównie o wystąpienie w zmiennej przesyłanej przy pomocy ajax() znaku & 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 & 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.