[RESOLU] Problème requête

Eléphanteau du PHP | 11 Messages

24 sept. 2015, 18:58

Bonsoir à tous,

Je n'arrive pas à résoudre mon problème donc je fais appel à votre savoir,

j'ai un problème de requette sqli

Code : Tout sélectionner

$chaine=implode(',',$_POST['options']); $requet = 'SELECT SUM (fcd) AS somme1 FROM bdd_cotisation WHERE cle_adherent = ('.$chaine.') '; $result = $mysqli->query($requet) or die ('Erreur '.$requet.' '.$mysqli->error);
J'ai l'erreur suivante
Erreur SELECT SUM (fcd) AS somme1 FROM bdd_cotisation WHERE cle_adherent = (e8b8a3be28fa8f73f3eacbca2f8ac3ea,a8cd711954e860db3a86ed3e76ad6b11,bdde0a7b09061152221bb27c7268e676) FUNCTION fcsadlig_asm2016ski.SUM does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual
je n'arrive pas à trouver la soluce

Merci de votre aide

ynx
Mammouth du PHP | 586 Messages

25 sept. 2015, 11:09

Salut,

L'erreur vient de l'espace après SUM, il ne doit pas y en avoir.
Si tu veux chercher les clés adhérent dans un liste d'éléments, il faut utiliser l'opérateur IN à la place de = :
$requet = 'SELECT SUM(fcd) AS somme1 FROM bdd_cotisation WHERE cle_adherent IN ('.$chaine.') ';
Edit: puisque les éléments à comparer sont des chaines, il faut les entourer de quotes. Dans l'idéal il faut également utiliser la méthode mysqli::real_escape_string pour éviter les injections sql. Ce qui donne :
$options = array_map(array($mysqli, 'real_escape_string'), $_POST['options']); // sécurise les données post
$chaine= "'" . implode("','", $options) . "'"; // conversion du tableau en chaines entourées de quote
$requet = 'SELECT SUM (fcd) AS somme1 FROM bdd_cotisation WHERE cle_adherent = ('.$chaine.') ';
$result = $mysqli->query($requet) or die ('Erreur '.$requet.' '.$mysqli->error);
Bonne journée

Eléphanteau du PHP | 11 Messages

25 sept. 2015, 22:12

Bonsoir ynx

merci de ton aide

avec

Code : Tout sélectionner

$options = array_map(array($mysqli, 'real_escape_string'), $_POST['options']); // sécurise les données post $chaine= "'" . implode("','", $options) . "'"; // conversion du tableau en chaines entourées de quote $requet = 'SELECT SUM(fcd) AS somme1 FROM bdd_cotisation WHERE cle_adherent in ('.$chaine.') '; $result = $mysqli->query($requet) or die ('Erreur '.$requet.' '.$mysqli->error);
ça fonctionne pas

Code : Tout sélectionner

Fatal error: Cannot use object of type mysqli_result as array in /home/fcsadlig/public_html/skiclubadmin/zp_tableau_comptable.php on line 38

Eléphanteau du PHP | 11 Messages

25 sept. 2015, 22:44

Re ynx

Désolé fausse alerte j'ai réussi

Code : Tout sélectionner

$options = array_map(array($mysqli, 'real_escape_string'), $_POST['options']); // sécurise les données post $chaine= "'" . implode("','", $options) . "'"; // conversion du tableau en chaines entourées de quote $requet = 'SELECT SUM(fcd) AS somme1 FROM bdd_cotisation WHERE cle_adherent in ('.$chaine.') '; $result = $mysqli->query($requet) or die ('Erreur '.$requet.' '.$mysqli->error); while ($ligne2 = $result->fetch_array()) { echo $ligne2['somme1']; }
Encore merci de ton aide