Jquery de () du réseau de retour
Question
Désolé pour le mauvais titre, mais je ne sais pas comment nommer cela. Mon problème est que chaque fois que je passe une valeur à partir d'une boîte de sélection je déclenche cet événement jquery afin de vérifier les cases à cocher. Bassically I echo $ res []; à selecctedgr.php. Ai-je besoin d'utiliser JSON? et comment puis-je faire?
Page principale:
$("#group_name").change(function(){
var groupname = $("#group_name").val();
var selectedGroup = 'gr_name='+ groupname;
$.post("selectedgr.php", {data: selectedGroup}, function(data){
$.each(data, function(){
$("#" + this).attr("checked","checked");
});
},"json");
});
PHP (selectedgr.php):
<?php
include_once '../include/lib.php';
$gr_name=mysql_real_escape_string($_POST['gr_name']);
$sqlgr = "SELECT * FROM PRIVILLAGE WHERE MAINGR_ID=".$gr_name;
$resultgr = sql($sqlgr);
while($rowgr = mysql_fetch_array($resultgr)){
$res[] = $rowgr['ACT_ID'];
}
echo $res[];
?>
La solution
Modifier la dernière ligne de votre échantillon PHP (echo $res[];
) à:
echo json_encode($res);
json_encode()
manuel vous en dira plus.
De même que @Unicron dit que vous devez valider la variable gr_name de $ avant de passer à l'instruction SQL.
Vous pouvez utiliser:
if(isset($_POST['gr_name'])) {
$gr_name = mysql_real_escape_string($_POST['gr_name']);
}
Voir: http://php.net/manual/ fr / function.mysql-évasion-réel string.php pour plus d'informations dans le manuel PHP.
Autres conseils
Vous pouvez utiliser la fonction json_encode pour convertir des données arbitraires en JSON. En supposant que vous voulez retourner un tableau de chaînes, voici comment vous utiliserez json_encode:
<?php
include_once '../include/lib.php';
$res = array(); // initialize variables
$sqlgr = sprintf("
SELECT ACT_ID
FROM PRIVILLAGE
WHERE MAINGR_ID=%d
",
$_POST['gr_name']
); // only select those columns that you need
// and do not trust user input
$resultgr = sql($sqlgr);
while($rowgr = mysql_fetch_array($resultgr)){
$res[] = $rowgr['ACT_ID'];
}
echo json_encode($res); // use json_encode to convert the PHP array into a JSON object
// this will output something like ['foo', 'bar', 'blah', 'baz'] as a string
?>
Du côté client, vous pouvez utiliser jQuery.post , comme ceci:
<script type="text/javascript">
$("#group_name").change(function () {
$.post("selectedgr.php", {
gr_name: $(this).val()
}, function (data) {
// console.log(data);
// jQuery will convert the string "['foo', 'bar', 'blah', 'baz']" into a JavaScript object
// (an array in this case) and pass as the first parameter
for(var i = 0; i < data.length; i++) {
$("#" + data[i]).attr("checked", "checked");
}
}, "json");
});
</script>
Si vous voulez utiliser JSON puis il suffit d'utiliser echo json_encode($res);
Mais je ne comprends pas vraiment ce que vous gagnerez si votre code fonctionne maintenant, puisque vous aurez encore à faire un peu de traitement dans le Javascript pour gérer le résultat.
J'ai trouvé mon problème majeur comme ci-dessous
au lieu de (avant):
$.post("selectedgr.php", {data: selectedGroup}, function(data){
faire (après):
$.post("selectedgr.php", selectedGroup, function(data){
Pardonnez mon mauvais. Ahh ya les gars, en ce qui concerne la fuite sur MySQL en fait #group_name
n'est pas un champ d'entrée, mais une boîte de sélection. Appréciez pour chaque commentaire, suggestion et guide.
Eric.