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.
<?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 id="wiersz">'; 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)
echo '<option value="'.$row->rodzaj_nazwa.'" SELECTED >'.$row->rodzaj_nazwa.'</option>'; else
echo '<option value="'.$row->rodzaj_nazwa.'">'.$row->rodzaj_nazwa.'</option>'; }
echo '</select></form></div>'; $pyt = mysql_query("SELECT kategoria.kat_nazwa FROM kategoria LEFT JOIN rodzaj
ON kategoria.rodzaj_id=rodzaj.rodzaj_id
WHERE rodzaj.rodzaj_nazwa='".$prod_data->rodzaj_nazwa."'") or
die (mysql_error()); echo'<div class="category"><select id="kat_nazwa" name="kategoria">'; if($row->kat_nazwa == $prod_data->kat_nazwa)
echo '<option value="'.$row->kat_nazwa.'" SELECTED >'.$row->kat_nazwa.'</option>'; else
echo '<option value="'.$row->kat_nazwa.'">'.$row->kat_nazwa.'</option>'; }
echo '<div class="prod_nazwa"><input style="width: auto;" type="text" name="prod_nazwa" maxlength="255"value="'.$prod_data->prod_nazwa.'" /></div>'; echo '<input type=hidden id="prod_nazwa2" value="'.urlencode($prod_data->prod_nazwa).'"/>'; echo'<div class="wymiar_wart">'; $pyt = mysql_query("SELECT wymiary.wymiar_wart FROM wymiary LEFT JOIN rodzaj
ON wymiary.rodzaj_id = rodzaj.rodzaj_id
WHERE rodzaj.rodzaj_nazwa ='".$prod_data->rodzaj_nazwa."'") or
die (mysql_error()); echo '<select id="wymiar_wart" name="wymiar_wart">'; 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>'; echo '<div class="button_edytuj"><button type=button id="button_edytuj">Zatwierdź</button></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='';
if(strlen($_GET['prod_kod'])<4
){ $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'];
}
if ($alert != '') echo $alert; 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;
WHERE wymiar_wart='".$_GET['wymiar_wart']."'") or
die (mysql_error()); $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.