PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 06-10-2010 18:06:16

rvgotti
Membre
Lieu : Grenoble
Inscription : 21-09-2010
Messages : 33
Site Web

comparer variable à plusieurs résultat possible d'une requete

Bonjour à tous,

Je récupère cette variable en GET :

$id_voiture = $_GET['id_voiture'];

Et je veux comparer l'égalité entre cette variable avec le résultat d'une requête mysql contenant dans un des champs de la table  toute une série de valeur séparé par un "/".

Par exemple :

$id_voiture= 18;

si dans le champs de ma table, il y a : 3/9/15/18/30/59

J'aimerai que ca me détecte le 18 !!

J'espere que je m'explique corectement...

J'ai essayé ce code, mais ca ne fonctionne pas... :


$id_voiture = $_GET['id_voiture'];
$cat = $_GET['cat'];

$sql='SELECT GROUP_CONCAT( `auto` ) AS "autos" FROM pieces_historique WHERE categories="$cat"';
$res = mysql_query( $sql );

$dataautos = mysql_fetch_assoc( $res );

if ( in_array( $id_voiture, explode( '/', $dataautos['autos'] ) ) ) {
echo "Oui";   // ok
}
else {
echo "non"; //pas ok
}
 

Merci d'avance pour votre aide.

Hervé

Hors ligne

#2 06-10-2010 18:58:40

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : comparer variable à plusieurs résultat possible d'une requete

$sql='SELECT GROUP_CONCAT( `auto` ) AS "autos" FROM pieces_historique WHERE categories="$cat"';
dans tous les cas, cette requete ne retoourne rien wink
en php, les variables ne sont pas parsées entre les simples cotes (de porc) wink

a++

Hors ligne

#3 06-10-2010 19:18:19

rvgotti
Membre
Lieu : Grenoble
Inscription : 21-09-2010
Messages : 33
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

j'ai pas compris.... sad

Hors ligne

#4 06-10-2010 19:23:45

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete


$var = "toto";
echo 'Nom : $var';
echo "nom : $var";

Testes ceci et tu comprendras tout de suite. smile

Hors ligne

#5 06-10-2010 19:33:08

rvgotti
Membre
Lieu : Grenoble
Inscription : 21-09-2010
Messages : 33
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Ok, compris.

J'imagine que c'est mieux comme ça :
$sql="SELECT GROUP_CONCAT( `auto` ) AS \"autos\" FROM pieces_historique WHERE categories=\"$cat\" GROUP BY categories";

wink
Ca marche nickel ! merci bcp pour m'avoir fait voir mon erreur d'inatention ...

++
rv

Hors ligne

#6 06-10-2010 19:42:47

rvgotti
Membre
Lieu : Grenoble
Inscription : 21-09-2010
Messages : 33
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Par contre, je m'apercois que ca me prend uniquement la premier ligne de ma table. Je ne comprends pas pourquoi

Hors ligne

#7 06-10-2010 21:00:22

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : comparer variable à plusieurs résultat possible d'une requete

normal, tu ne fait aucune boucle
donc, un seul tuple est lu wink
while($dataautos = mysql_fetch_assoc( $res )
{
ton code
};

a++

Hors ligne

#8 07-10-2010 17:44:58

rvgotti
Membre
Lieu : Grenoble
Inscription : 21-09-2010
Messages : 33
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Merci Pierrot,

Ca fonctionne mieux ainsi. wink

Derniere petit question, et apres je pense avoir terminé : maintenant, je voudrais récupéré les infos de la table sql mais je vois pas ce que je peux mettre dans le WHERE auto='$.............'"); à la ligne 10.

Voici le code avec le while :


<?
$sql="SELECT GROUP_CONCAT( `auto` ) AS \"autos\" FROM pieces_historique WHERE categories=\"$cat\"";
$res = mysql_query( $sql );

while($dataautos = mysql_fetch_assoc( $res ))
{

if ( in_array( $id_voiture, explode( '/', $dataautos['autos'] ) ) )
  {
$result_query = mysql_query("SELECT * FROM pieces_historique WHERE auto='$.............'");
$res = mysql_fetch_array ($result_query);
$id = $res['id'];
$nom = $res['nom'];
$description = $res['description'];
$photo = $res['photo'];
$prix = $res['prix'];
$ref = $res['ref'];
}
else {
echo "ARTICLE NON DISPO";
}
};
?>
 

A+
Hervé

Hors ligne

#9 07-10-2010 23:59:20

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

heu j'ai pas compris, tu veut faire quoi avec ta requete ligne 10 ?

parce que bon le where n'est "remplis" qu'en sachant ce que tu veut faire de la requete wink

si c'est le résultat de la requete précedente c'est $dataautos['autos'] qu'il faut mettre ...

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#10 09-10-2010 09:09:18

rvgotti
Membre
Lieu : Grenoble
Inscription : 21-09-2010
Messages : 33
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

En fait à la ligne 10, j'aimerai récupéré les infos (prix, reference, designation) qui sont dans la table pieces_historique pour l'identifiant de la voiture choisi, d'où le WHERE auto = ... mais quand je place $dataautos['autos'], j'ai une erreur..
J'avoue que je ne maitrise plus vraiment mon code ...

Si $id_voiture = 18;
A quoi est égale cette variable : $dataautos['autos'] ??

Hors ligne

#11 09-10-2010 09:30:42

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

on va faire simple parce que je pige pas trop ta tambouille :d

le résultat de ta requete SQL (avec le group concat) te retourne des lignes avec dedans des chose comme ça : 3/9/15/18/30/59 ?
$dataautos['autos'] est ce que tu récupère avec mysql_fetch_assoc dans la boucle while

ligne 8 tu cherche a savoir si $idvoiture (sortie d'un chapeau magique ?) est dans les valeurs fournis par la requete. Ceci par le biais de explode qui te fournis les valeurs dans un tableau et in_array qui cherche si une valeur est dans un tableau.

Si ton $idauto est ce que tu veut mettre dans la requete sql ligne 10, je vois pas trop à quoi sert le reste.

on n'a pas assez d'info sur ce que tu veut faire, car dans ton cas tu pourrais très bien utiliser le explode après ta requete et regarder la valeur à l'index 3 du tableau
$tableau = explode( '/', $dataautos['autos'] ) ;
//$tableau[3] ==18 si la structure de ce que tu a mis a ton 1er message est toujours la même.

Mon avis sur la question :
Ta table est mal pensée. Je pense que tu doit pouvoir faire 'plus simple' que ce que tu fait actuellement.

si tu nous explique comment tu a créer ta table, peut être pourrions nous mieux comprendre ce que tu souhaite faire (mais la c'est super alambiqué pour pas grand chose j'ai l'impression).

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#12 09-10-2010 09:46:21

rvgotti
Membre
Lieu : Grenoble
Inscription : 21-09-2010
Messages : 33
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Ok ok, je m'explique un peu mieux :

Déjà, mon $id_voiture provient d'un Get de cette façon là : $id_voiture = $_GET['id_voiture'];
Cette variable sera un nombre.

Ensuite, vu qu'une ref d'une piece auto peut s'adapter sur plusieurs sortes de voiture, dans ma table pieces_historique j'ai créé un champs qui se nomme 'auto' où je rempli de cette façon : 15/59/65/73/98 (qui siginifie toutes les sortes de voiture pour laquelle la pièce est compatible)

Donc, si notre $id_voiture = 65, j'aimerai que la pièce où le champs auto est : 15/59/65/73/98 s'affiche avec son prix, designation, reference etc.......

Si notre $id_voiture = 21, ca affiche PIECE NON DISPO POUR CETTE VOITURE.

En gros, je n'aurais pas eu ce probleme si une piece s'adapter que sur une unique sorte de voiture. Là, j'aurais simplement fait :
WHERE auto = '$id_voiture'.

Est ce que c'est un peu plus claire ?

Merci d'avance ... smile

Dernière modification par rvgotti (09-10-2010 09:49:53)

Hors ligne

#13 09-10-2010 10:28:35

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Wé c'est plus clair

Tu a un probleme de modelisation de ta base.

Par exemple pour modifier ton champ tu est obligé de le faire a la main au risque de faire anerie. Imagine la taille du champ pour une rondelle ou les pneus de ma saxo wink

Il te faut une table auto : ok
Une table pieces : ok ( sans le champ disgracieux avec les id auto)
Une table piecesauto qui va faire la jointure entre les deux premieres
Par exemple
Id clef primaire
Idpieces
Idauto

Pas besoin d'autre chose et cela te permet de faire ta requete facilement wink

Je te fait un exemple plus concret si besoin quand je rentre smile

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#14 09-10-2010 10:56:34

rvgotti
Membre
Lieu : Grenoble
Inscription : 21-09-2010
Messages : 33
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Ah oui, je veux bien un peu d'aide car je ne comprend pas comment faire...

Hors ligne

#15 09-10-2010 13:11:42

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Le principe est simple : 3 tables pour tout faire
une table auto (qui contient les modèle de véhicule)
create table autos(
id int unsigned not null auto_increment,
designation tinytext,
primary key(id)
)type=myisam;
insert into autos values (null,'saxo'),(null,'yaris');
une table pour les pieces détachées
create table pieces (
id int unsigned not null auto_increment,
designation tinytext,
primary key(id)
)type=myisam;

insert into pieces values(null,'pneu saxo'),(null,'penu yaris'),(null, 'frein saxo'),(null,'cardan yaris'),(null,'capot saxo');
une table qui fait la liaison entre les deux premières
create table piecesautos(
id int unsigned not null auto_increment,
idpiece int unsigned not null,
idauto int unsigned not null,
primary key (id)
)type=myisam;
insert into piecesautos values(null,1,1),(null,2,2),(null,3,1),(null,4,2),(null,5,1);

A partir de la si tu choisis une auto dans la 1ère table tu peu récupérer ls pièces qui y sont associées en utilisant une jointure
http://sqlpro.developpez.com/cours/sqlaz/jointures/.

Grosso modo c est quoi une jointure ?
He ben c'est les fait de faire une requete sur deux tables en même temps avec des infos identique entre les deux tables.
Dans notres cas idauto c'est la clef primaire de la table auto. Elle permet d'identifier un véhicule car c'est "id" est UNIQUE (a cause de la primary key wink ).
Même chose pour idpiece.

si tu choisis une voiture tu aura la clef primaire de la voiture que tu pourra utiliser sur la table piecesautos
select designation, piecesautos.id as idpiecesauto from piecesautos inner join pieces on idpiece=pieces.id where idauto=1;
select designation ,piecesautos.id as idpiecesauto from piecesautos inner join autos on idauto=autos.id where idpiece=6;
ici le 1 représente la valeur fournis par ton 1er formulaire ou lien. (donc $_GET['idauto'] par exemple)).

L'avantage de cette solution c'est que si tu te trompe sur une pice c'est facile a modifier et tu n'est pas obligé de modifier un champ bizard où tu a des chances de faire une annerie wink

si par exemple tu veut savoir a quelle voiture correspond une pièce (et afficher le nom de la piece) :
select autos.designation as auto, pieces.designation as piece from piecesautos inner join autos on idauto=autos.id inner join pieces on idpiece
=pieces.id where idpiece=6;

Comment aller plus loin ?
Par exemple en créant une table constructeurs qui contiendra .... (renault, citroen, peugeot, bmw etc). Dans la table autos tu ajoutera le idconstructeur wink
ensuite les requetes sont un poil plus compliqué mais le principe est  la :d

par exemple on peu avoir

create table pays (
id smallint unsigned not null auto_increment,
nom tinytext not null,
primary key(id)
)type=myisam;
insert into pays values (null,'France'),(null,'Japon'),(null,'Allemagne'),(null,'Italie');

create table constructeurs (
id int unsigned not null auto_increment,
idpays smallint unsigned not null,
nom tinytext not null,
primary key(id)
)type=myisam;
insert into constructeurs values (null,1,'Citroën'),(null,1,'Peugeot'),(null,1,'Renault'),(null,2,'toyota'),(null,4,'Ferrari'),(null,4,'maserati'),(null,3,'BMW');

create table autos(
id int unsigned not null auto_increment,
idconstructeur int unsigned not null,
designation tinytext,
primary key(id)
)type=myisam;
insert into autos values (null,1,'saxo'),(null,4,'yaris');

pour avoir les voitures et les constructeurs et pays associés

select autos.designation as auto, constructeurs.nom as constructeur, pays.nom as pays from autos inner join constructeurs on autos.idconstructeur=constructeurs.id inner join pays on constructeurs.idpays=pays.id;
résultat
+-------+--------------+--------+
| auto  | constructeur | pays   |
+-------+--------------+--------+
| saxo  | Citroën      | France |
| yaris | toyota       | Japon  |
+-------+--------------+--------+

tu trouvera à cette adresse http://phpdebutant.org/wall2162.php le fichier sql que j'ai utilisé pour mes tests pour ce que j'ai mis plus haut wink

amuse toi bien

@+

PS : le lien sur les jointures est a lire en priorité si tu ne connais pas smile


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#16 09-10-2010 17:01:04

rvgotti
Membre
Lieu : Grenoble
Inscription : 21-09-2010
Messages : 33
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Merci Moogli, j'ai plus qu'à apprendre les jointures, chose que je ne connais pas du tout.
Je tiens au courant dès que je m'en suis sorti wink

en tout cas, un grand merci a toi pour cette réponse hyper détaillée...

Hors ligne

#17 09-10-2010 17:22:48

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

po de quoi ça m'a fait une p'tite révision :d

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#18 10-10-2010 19:16:16

rvgotti
Membre
Lieu : Grenoble
Inscription : 21-09-2010
Messages : 33
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Re,

Ma requete me donne aucun résultat, j'ai pourtant suivi toute ton explication :


$sql="SELECT voitures.id as auto, pieces_historique.nom, pieces_historique.id as piece FROM piecesautos INNER JOIN voitures ON idauto=voitures.id INNER JOIN pieces_historique ON idpiece=pieces_historique.id WHERE idpiece=3";
$res = mysql_query( $sql );
$nom = $res['nom'];
echo "$nom";
 

Seuls modifs :

Ta table 'autos', est 'voitures'
Ta table 'pieces' est 'pieces_historique'
Ta table 'piecesautos' a le même nom chez moi.

Pour rappel, ta requete :

select autos.designation as auto, pieces.designation as piece from piecesautos inner join autos on idauto=autos.id inner join pieces on idpiece
=pieces.id where idpiece=3;

A+
hervé

Dernière modification par rvgotti (11-10-2010 07:09:37)

Hors ligne

#19 11-10-2010 08:01:40

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Cela vient du fait que tu as des lacunes sur comment interroger une table.
La petite lecture que tu as du faire un peu trop en diagonale : http://phpdebutant.org/article66.php

Hors ligne

#20 11-10-2010 10:13:59

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

hum xTG je suis curieux de savoir ce qui n'est pas bon dans la requete, parce que j'ai moi "ça marche" ;

apres je corrigerais la requete ainsi : SELECT voitures.nom as auto, pieces_historique.nom as nompiece, pieces_historique.id as idpiece FROM piecesautos INNER JOIN voitures ON idauto=voitures.id INNER JOIN pieces_historique ON idpiece=pieces_historique.id WHERE idpiece=3

voitures.nom est le "nom" de l'auto pas la clef primaire, ceci afin d'afficher une liste du style

+-------+----------------------+
| auto  | piece                |
+-------+----------------------+
| saxo  | macaron BZH en force |
| yaris | macaron BZH en force |
+-------+----------------------+

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#21 11-10-2010 12:21:35

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Sa requête est bonne, mais il n'interprète aucunement la ressource retournée par mysql_query() : cf code de son dernier post.
Donc il a beau avoir une bonne requête il ne sait pas exploiter son résultat. smile

Hors ligne

#22 11-10-2010 21:25:13

rvgotti
Membre
Lieu : Grenoble
Inscription : 21-09-2010
Messages : 33
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

C'est ok, j'ai compris le probleme, j'arrive enfin à afficher le resultat de la requete. Merci à tous pour votre aide.
ca a été laborieux mais au moins j'ai compris les requetes avec les jointures.

encore merci wink

Hors ligne

#23 11-10-2010 22:45:46

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

raaa xTG t'était po clair smile


@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#24 12-10-2010 05:48:37

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Mais non c'est le titre du cours qui est pas clair non ? yikes

Content que tu ais trouvé ce qui n'allait pas. smile

Hors ligne

#25 12-10-2010 07:50:56

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : comparer variable à plusieurs résultat possible d'une requete

Saluton,
En fait, xTG, tu verras, à l'usage, que c'est surtout Moogli qui n'est jamais trop clair.
Hein ranuleto ?

Il serait tout simplement peut-être bon de rappeler à chacun le sens du verbe anglais to fetch


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums