Connexion
Pour récupérer votre compte, veuillez saisir votre adresse email. Vous allez recevoir un email contenant une adresse pour récupérer votre compte.
Inscription
En vous inscrivant, vous acceptez les conditions d'utilisation du site et de nous vendre votre âme pour un euro symbolique. Amusez vous, mais pliez vous à la charte.

Un Rédacteur Factornews vous demande :

Forums

1
Galère AJAX/PHP
Morty
Membre Factor
Membre 665 msgs
Je suis en train de mettre à disposition des gens dans l'entreprise des infos qu'ils croyaient emprisonnées dans l'ERP. Pour leur montrer que les interfaces ont évolué depuis ces ignominies de progiciels old-school, je glisse un peu d'AJAX dedans. Auto-formé, depuis un mois, je précise. J'utilise Scriptaculous et Prototype.

Le problème en lui-même :
Lors de l'appel en AJAX de ma page PHP censée filer les réponse, j'ai des problèmes avec le passage de mes checkboxes.

Ca c'est ce que j'ai tenté en JS pour passer mon tableau checkbox :

$filterstring = '';
for (i = 0; i < document.getElementsByName('filter[]').length; i++)
{
if (document.forms["stock_search_form"].elements[ i ].checked == true)
{
$filterstring += '&filter['+i+']=' + document.forms["stock_search_form"].elements[ i ].value;
}
}
if ($filterstring == '')
{
$filterstring = '&filter=false';
}

alert($filterstring);

new Ajax.Updater ('stock_values', base_url+'stocks/ajaxstocksearch', {method:'post', postBody:'stock_site='+$F('stock_site')+'&stock_product='+$F('stock_product')+$filterstring});

Je suppose qu'il y a plus propre, mais je cherche surtout à reconstituer un vrai groupe de checkboxes.

C'est à dire si on coche deux boxes genre box1 et box3 sur trois boxes on a comme résultat : ['nomcheckboxes'] == array('box1', 'box3').

N'hésitez pas pour des précisions. (Et merci d'avance !)
 
Narvaak
Membre Factor
Membre 125 msgs
Si tu veux faire de l'ajax en PHP je ne peux que te conseillé XAJAX. C'est super bien fait, et au lieu de se faire chier à coder en JS, bah tu codes ça en PHP.

Simplicité garantie.
 
Morty
Membre Factor
Membre 665 msgs
En fait, j'utilise le framework Code Igniter pour me simplifier une partie du boulot (je suis maintenant fan du MVC), et je n'ai pas dix mille choses à écrire en JS non plus. J'aurais peur de prendre un PSG-1 pour une mouche.
 
Akshell
Pedobear à poil roux
Membre 4167 msgs
je regarde, ça n'a pas l'air d'être grand chose.
 
Akshell
Pedobear à poil roux
Membre 4167 msgs
dans cette ligne :
$filterstring += '&filter['+i+']=' + document.forms["stock_search_form"].elements[ i ].value;
il suffit juste d'enlever le ...' + i + '...
pour être conforme à la syntaxe d'un post classique de checkbox.

<input type="checkbox" name="filter[]" value="box1" />

du coup je ne vois vraiment pas ton problème.
 
Morty
Membre Factor
Membre 665 msgs
Il me semblait avoir déjà essayé, mais je n'étais pas sûr. J'ai enlevé le i, et le résultat est le suivant si je fais un dump de mon filter :

array(2) { ["ITEM1"]=> int(0) ["ITEM2"]=> int(1) }

Sachant que j'avais pourtant coché les trois options.

Si je ne coche rien j'obtiens :

string(5) "false" (problème de loose typing).

Si je mets la 1ère et la 3ème :

array(1) { ["ITEM1"]=> int(0) }

Si je ne mets que la troisième :

array(0) { }

Ce qui est curieux c'est que d'une, il ne parcourt pas tous les éléments, (même si je remplace mon < par un <=. Ensuite, je ne comprends pas pourquoi int(0) et int(1).
 
Akshell
Pedobear à poil roux
Membre 4167 msgs
ah oui j'étais sur un cas particulier :
<script type="text/javascript">
$filterstring = '';

res = document.getElementsByName('filter[]')
for (i = 0; i < res.length; i++)
if (res.checked == true)
$filterstring += '&filter['+']=' + res.value;

if ($filterstring == '')
$filterstring = '&filter=false';

alert($filterstring);
</script>
l'erreur était de mélanger le résultat de ta recherche avec les sous-éléments de ton formulaire, ce ne sont pas les mêmes structures.
 
Morty
Membre Factor
Membre 665 msgs
Akshell a écrit :
ah oui j'étais sur un cas particulier :
<script type="text/javascript">
$filterstring = '';

res = document.getElementsByName('filter[]')
for (i = 0; i < res.length; i++)
if (res[ i ].checked == true)
$filterstring += '&filter['+']=' + res[ i ].value;

if ($filterstring == '')
$filterstring = '&filter=false';

alert($filterstring);
</script>
l'erreur était de mélanger le résultat de ta recherche avec les sous-éléments de ton formulaire, ce ne sont pas les mêmes structures.


J'ai changé mon script en accord avec ce que tu as posté. Malheureusement toujours les mêmes soucis. Le script PHP récupère un tableau qui est amputé (jamais la dernière valeur "ITEM3"), et malgré que je transmette ceci en AJAX ça ne marche pas :

new Ajax.Updater ('stock_values', base_url+'stocks/ajaxstocksearch', {method:'post', postBody:'stock_site='+$F('stock_site')+'&stock_product='+$F('stock_product')+$filterstring});

avec $filterstring = "&filter[]='ITEM1'&filter[]='ITEM2'&filter[]='ITEM3'.

Cela veut dire qu'il essaie de tout passer, mais que ça ne marche pas... Existe-t-il un autre moyen de passer un tableau ?
 
Galère AJAX/PHP
1

Règles à suivre

Écrire dans un français correct et lisible : ni phonétique, ni style SMS. Le warez et les incitations au piratage sont interdits. La pornographie est interdite. Le racisme et les incitations au racisme sont interdits. L'agressivité envers d'autres membres, les menaces, le dénigrement systématique sont interdits. Éviter les messages inutiles

 
Rechercher sur Factornews