[RESOLU] requete depuis un lien

Petit nouveau ! | 5 Messages

30 juil. 2012, 15:32

bonjour

je suis pas très a l'aise avec php et sollicite donc votre aide

j'ai fais 2 tables : (suis pas sur que ce soit le plus judicieux)
1 comprennant les metiers "metier" (boulanger, charcutier)
et 1 comprenant les details: nom prenom etc de chaque métier "liste" (mr dupond boulanger, mr durant boulanger, mr jean charcutier)

je recupere mon menu regroupant les metier grace a la requete

$requete2="SELECT corpsMetier FROM metiers ";
$resultat2=mysql_query($requete2);

$requete="SELECT reference,nom FROM liste ";
$resultat=mysql_query($requete);

affiche mon menu grace
<div id="navigation">
<ul>
<?php while($metiers=mysql_fetch_array($resultat2)) { ?>
<li><a href="""><?php echo $metiers['corpsMetier']; ?></a></li>

<?php } ?>


</ul>
</div><!-- #navigation -->

mon menu affiche bien les corps de metier
maintenant je voudrais cliquer sur boulanger par exemple et afficher tout les nom de boulanger de la table liste dans un nouvelle page

en vous remerciant

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 juil. 2012, 16:01

salut,
j'ai fais 2 tables : (suis pas sur que ce soit le plus judicieux)
si si très judicieux, tu viens de prendre en compte la 1ere forme normale (l'atomicité des informations dans la base ;) )

pour réaliser ce que tu veux il te faut mettre dans le lien la clef primaire de la table métier qui correspond au métier que l'on souhaite voir :)

oui je sais c'est pas clair : exemple
tes tables doivent ressembler à ceci (je pense) ?
create table metiers (
	idMetier int auto_increment not null primary key, 
	corpsMetier varchar(20)	
)engine:=innodb;

create table artisants(
	idArtisant int auto_increment not null primary key, 
	idMetier int not null,
	nom varchar(40) not null,
	prenom varchar(40) not null,
	foreign key idMetier references metiers(idMetier)
) engine=innodb;
lorsque tu affiche le menu tu créer un lien
 
<?php
while($metiers=mysql_fetch_array($resultat2)) { 
    echo '<li><a href="pagedetailsmetier.php?idmetier='..$metiers['idMetier'].'">'. $metiers['corpsMetier'].'</a></li>';
} ?>
dans la page pagedetailsmetier.php tu récupère la valeur pasée dans l'url (idmetier) et tu peux donc faire une requete avec un where sur la seconde tabel avec.

select * from artisants where idmetier = $_GET['idmtier'] avec mon exemple.


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

31 juil. 2012, 16:20

merci beaucoup moogli dis donc c du reactif ^^

j'ai pas encore trouvé pour le moment mais apres quelques heures j'en suis la

il y avait une petite erreur dans le la boucle

et j'ai enfin trouvé il y avait un point en trop devant $metiers et quelques majuscule en moins

si ca peut servir je met la version qui convient (enfin je crois)

Code : Tout sélectionner

<?php while($metiers=mysql_fetch_array($resultat2)) { echo '<li><a href="pagedetailsmetier.php?idMetier='.$metiers['idMetier'].'">'. $metiers['corpsMetier'].'</a></li>'; } ?>
bon pour la suite sur ma pagedetailsmetiers.php

je lance :

Code : Tout sélectionner

<?php $requete2="SELECT * FROM artisants WHERE 'idMetier' = $_GET ['idMetier']"; ?> <table width="100%" border="0"> <tr> <td>nom</td> <td>prenom</td> </tr> <?php while($artisants=mysql_fetch_array($resultat2)) { ?> <tr> <td><?php echo $artisants['nom']; ?></td> <td>&nbsp;</td> </tr> <?php } ?> </table>
mais rien ne s'affiche

ViPHP
xTG
ViPHP | 7331 Messages

31 juil. 2012, 16:24

Il te manque un mysql_query().
Aussi ta variable n'est pas correctement injectée dans la requête :
$requete2="SELECT * FROM artisants WHERE 'idMetier' = $_GET ['idMetier']"; // non
$requete2="SELECT * FROM artisants WHERE 'idMetier' =". $_GET ['idMetier']; // oui
$requete2="SELECT * FROM artisants WHERE 'idMetier' = {$_GET['idMetier']}"; // oui
Sachant aussi qu'il faut éviter les injections frauduleuses et donc protéger toute variable insérée dans une requête.
Tu as pour cela la fonction mysql_real_escape_string().

Petit nouveau ! | 5 Messages

01 août 2012, 13:09

merci XTG
j'ai bien essayé plusieurs technique mais je n'y arrive pas
bon alors je recapitule mais je crois qu'il manque quelque chose quand meme ou j'appele pas les bonnes choses

j'ai donc :
une table artisants >>idArtisants,idMetiers,nom,prenom
une table metiers >> idMetiers, corpsMetiers

ma navigation s'effectue grace a
<ul>
<?php $requete2="SELECT corpsMetier FROM metiers ";
$resultat2=mysql_query($requete2);
?>



<?php
while($metiers=mysql_fetch_array($resultat2)) { 
    echo '<li><a href="pagedetailsmetier.php?idMetier='.$metiers['idMetier'].'">'.$metiers['corpsMetier'].'</a></li>';
} ?>
         
			   
			</ul>
sur ma pagedetailsmetier.php

j'essaie d'afficher les nom des artisants
<?php $requete2="SELECT * FROM artisants WHERE 'idMetier' =". $_GET ['idMetier'];$resultat2=mysql_query($requete2);
		
?>
   
    <table width="100%" border="0">
  <tr>
    <td>nom</td>
    <td>prenom</td>
  </tr>
  <?php while($artisants=mysql_fetch_array($resultat2)) { ?>
  <tr>
    <td><?php echo $artisants['nom']; ?></td>
    <td>&nbsp;</td>
  </tr>
 <?php } ?>
</table>
je demandais d'ailleurs si je devais pas avoir un nom de requet different ?
pour le mysql_real_escape_string() je ne sais pas m'en servir il n'y pas d'identification pour le moment est ce important tout de meme

Petit nouveau ! | 5 Messages

02 août 2012, 12:41

bon alors en cherchant j'ai trouve que c mon lien qui ne fonctionne pas
<?php $requete2="SELECT corpsMetier FROM metiers ";
$resultat2=mysql_query($requete2);
?>
<?php
while($metiers=mysql_fetch_array($resultat2)) { 
    echo '<li><a href="pagedetailsmetier.php?idMetier='.$metiers['idMetier'].'">'.$metiers['corpsMetier'].'</a></li>';
} ?>
car si je rajoute a la main un 2 la fin de ma barre d'adresse ca fontionne
pagedetailsmetier.php?idMetier=2
si quelqu'un trouve comment aficher l'id dans mon lien


il fallait également enlever les ' ' a idMetier dans la pagedetails.php
ce qui donne :
 <?php $requete2="SELECT * FROM artisants WHERE  idMetier =". $_GET ['idMetier'];$resultat2=mysql_query($requete2);
		
?>

Petit nouveau ! | 5 Messages

02 août 2012, 16:54

alors apres 5 heures de recherche et bien il suffisait de faire un SELECT *

et tout marche parfaitement
mille pardon :oops: