Plusieurs valeurs pour une requête !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Plusieurs valeurs pour une requête !

par Megadeth » 03 mars 2006, 13:58

C'est ce que j'appelle du rapport :D

En tout cas encore merci :wink:

par Cyrano » 03 mars 2006, 11:36

Pour mémoire, on appelle ça "la précédence des opérateurs" ;)

par Hermès » 03 mars 2006, 10:42

C'est juste pour ne pas avoir de problèmes de priorité entre le AND et le OR.

Lorsque j'écris
"A AND B OR C", est-ce qu'il va faire "A AND (B OR C)" ou bien "(A AND B) OR C" ? Sans parenthèses, le AND est effectué en premier mais vu qu'on a vite fait de se tromper, je préfère regrouper avec des parenthèses pour éviter les accidents.

Dans ton cas, il faut des parenthèses, sinon il va faire
(id_abo=??? AND id_fac=???) OR id_fac=??? OR id_fac=??? OR ...
Ce qui n'est, il me semble, pas l'objectif voulu. Donc ça va marcher oui, mais ça risque de te donner des résultats que tu ne souhaites pas.

par Megadeth » 03 mars 2006, 10:09

Bonjour Hermès et surtout MERCIIIIIIIIIIiiiiiiiiiiiiiiiiiii ;)

J'avais trouvé un truc pas très académique il faut dire LOL, qui marchait, mais je préfère de loin la "propreté" de ton code.

Par contre, juste une dernière p'tite question avant de fermer ce topic. Quelle est l'utilité des parenthèses dans la ligne ci-dessous ? J'ai essayé sans, ca marche. Sont-ils indispensables. Je te rassure, je les ai gardé mais c'était juste de savoir le pourquoi du comment :)

Ligne ci-dessous :roll:
...id_abo='6432' AND ( id_fac='1' OR id_fac='10') order...

Encore merci

Megadeth

par Hermès » 02 mars 2006, 10:36

On va y arriver...
$q = "SELECT * FROM fac WHERE id_abo='".$_SESSION['num']."'";
$premier = 1;
foreach($_POST['idpost'] as $i => $idpost){
  if ($premier == 1) {
    $q .= " AND (";
    $premier = 0;
  } else {
    $q .= " OR";
  }
  $q .= " id_fac='".$idpost."'";
}
if ($premier == 0)
  $q .= ")";
$q .= " order by dat_fac";
echo $q;

par Megadeth » 01 mars 2006, 18:18

Merci à tous,

Je veux juste que ma requête fonctionne, peu importe son allure.
Voici ce que j'arrive à obtenir de mieux :

SELECT * FROM fac WHERE id_abo='4368' OR id_fac0='1' OR id_fac1='10' AND life_fac='1' order by dat_fac

On est proche de la soluce mais ca ne me renvoie rien car les champs id_fac0, id_fac1... n'existe pas en base erf.

Mega :?

par Hermès » 01 mars 2006, 16:04

donc ta requête doit avoir quelle allure ?
id_fac='???' OR id_fac='???' OR id_fac='???' (etc) ?

par Megadeth » 01 mars 2006, 16:00

Hé bien non, mon champ de la table factures s'appelle id_fac ni plus ni moins. C'est comme ci vous aviez à dispo vos relevés bancaires en ligne sur toute l'année passée et que vous vouliez créer un PDF reprennant les infos de mars, avril et septembre 2005 par exemple. Vous me suivez ?

Quand ma requête concerne toute l'année 2005, j'ai pas de soucis mais c'est de reprendre uniquement ce qu'à cocher l'internaute qui me pose problème...

C'est plus clair ?

Mega
:wink:

par Hermès » 01 mars 2006, 13:55

C'est normal, à chaque étape de ton foreach tu réécris la requete depuis le début :
$q = "SELECT * FROM fac WHERE id_abo='".$_SESSION['num']."'";
foreach($_POST['idpost'] as $i => $idpost){
  $q .= " AND id_fac".$i."='".$idpost."'";
}
$q .= " order by dat_fac";
echo $q; 
Normalement ça va te donner une requete de la forme :
SELECT * FROM fac WHERE id_abo='???' AND id_fac1='???' AND id_fac2='???' order by dat_fac

Cependant je sais pas si en base tes id_fac s'appelles "id_fac1", "id_fac2", "id_fac3", etc...

par Megadeth » 01 mars 2006, 13:47

Pratique cette manip', ca me renvoie avec 2 choix sélectionnés...

Array
(
[idpost] => Array
(
[0] => 1
[1] => 10
)

[Valider] => Valider
)

Ca correspond bien aux id dans ma base...

par Megadeth » 01 mars 2006, 13:44

Le script complet doit générer un fichier PDF construit en fonction des choix de l'internaute. J'utilise la classe FPDF pour se faire.
J'arrive à gérer le tout en général et faire un PDF relatif à un choix mais pas plusieurs :roll:

par Hermès » 01 mars 2006, 13:44

Tu peux nous faire un
echo "<PRE>";
print_r($_POST);
echo "</PRE>";
avant ta requête, et nous poster ce que ça affiche ?

par Megadeth » 01 mars 2006, 13:41

Je vois un peu mieux le truc mais je sèche encore... :cry:

J'ai fait :

foreach($_POST['idpost'] as $idpost){
$q="SELECT * FROM fac WHERE id_fac='$idpost' AND id_abo='".$_SESSION['num']."' order by dat_fac";
}
echo $q;

l'écho me renvoit :
SELECT * FROM fac WHERE id_fac='1' AND id_abo='6403' order by dat_fac

alors que j'ai sélectionné 2 cases à cocher

J'attends tes/vos commentaires ;)

par Ryle » 01 mars 2006, 13:18

La valeur par défaut d'une case lorsqu'elle est cochée est bien "on". Lorsqu'elle ne l'est pas, elle n'est pas envoyée (isSet ou $nomDeLaCase retourneront faux).

Si l'attribut value="" est renseigné, c'est cette valeur qui est renvoyée lorsque la case est cochée.

par Hermès » 01 mars 2006, 13:07

Il me semble que pour des cases à cocher, les valeurs par défaut sont "On" et "Off" selon si elle est cochée ou non et non pas 0 et 1, true et false, etc.

Au fait, ta requête doit faire quoi ? récupérer des données ? les insérer ? les mettre à jour ?