Associer 2 requete sql

Fermé
feyesh Messages postés 1 Date d'inscription mardi 16 octobre 2012 Statut Membre Dernière intervention 16 octobre 2012 - 16 oct. 2012 à 17:57
 feyesh - 17 oct. 2012 à 11:45
Bonjour,


Je débute en php / mysql à l'aide de tuto, bouquins et un cas pratique, une appli permettant de suivre le référencement de mes sites dans les annuaires web.

J'ai donc 4 tables :
- site (idsite, nomsite)
- annuaire (idannuaire, nomannuaire)
- statut (idstatut, etat)
- soumission (id, idsite, idannuaire, etat, date)

J'ai fais une page , rapport.php, qui liste toutes les soumissions réalisées mais provoque des doublons. Voici la requete :
$requete="SELECT * FROM site AS w, soumission AS s, annuaire AS a, statut AS e
WHERE w.idsite = s.idsite
AND a.idannuaire = s.idannuaire
AND e.idstatut = s.idstatut"; 


Cette requete me permet d'associer les noms correspondants aux ID des tables.

> J'aimerai maintenant sélectionner un site à l'aide d'un menu déroulant et lire toutes les infos contenues dans la ligne sql.
Mon menu affiche bien les noms des sites contenu dans la table "soumission", pas de pb.

Donc normalement, si je fais un select contenant la variable :
$sql     = 'SELECT * FROM soumission WHERE idsite="' .$_POST['nomsite']. '"';
je devrais pouvoir avoir les infos du sites précédemment sélectionné.

Mais ca ne fonctionne pas.

Je ne comprends pas comment je peux associer ma premiere requete permettant de recuperer les noms des tables et ma deuxième, la selection d'un site.

J'ai fais le code suivant mais il ne donne rien :
<?php include("inc/header.php"); ?>
<?php include("connexion.php");
//select
$bd=connect_bd();
if($bd<>0)
{

$_POST['nomsite'];

$sql     = 'SELECT * FROM soumission WHERE idsite="' .$_POST['nomsite']. '"';
$requete = 'SELECT * FROM site AS w, soumission AS s, annuaire AS a, statut AS e
WHERE w.idsite = s.idsite
AND a.idannuaire = s.idannuaire
AND e.idstatut = s.idstatut';
$resultat1 = mysql_query($sql,$bd)
or die ("requete 1 hs");
$resultat2 = mysql_query($requete,$bd)
or die ("requete 2 hs");
?>

<h2><?php echo "$nomsite"; ?></h2>

<?php
    if($resultat1<>FALSE) 
    { 
        echo "<table border=\"1\">"; 
        //entête du tableau 
        echo "<tr>"; 
                echo "<th>Annuaire</th>"; 
echo "<th>Statut</th>"; 
        echo "<th>date</th>"; 
        echo "</tr>"; 
    //fin de l'entête 

    while ($row=mysql_fetch_array($resultat1,$resultat2)) 
    { 
      echo "<tr>"; 
    echo "<td>".$row['nomannuaire']."</td>"; 
    echo "<td>".$row['etat']."</td>"; 
    echo "<td>".$row['date']."</td>"; 

      echo '</tr>'; 
    } 
    echo "</table>"; 
} 
else 
{ 
        echo "Echec de l'enregistrement, désolé"; 
} 
deconnect_bd($bd);	
} 
?>


J'ai bien le nom du site en H2, un tableau contenant les titre mais il reste vide.

Dois je envoyer "idsite" au lieu de "nomsite" dans le champs déroulant ?
Comment garder en mémoire la requete indiquant les noms de table pour effectuer la 2 eme ?


Je pense que ce que je cherche à faire est simple mais j'ai du louper un passage ;-)
Merci d'avance de votre aide !
A voir également:

2 réponses

Merci Atropa, ca m'aide énormément !!
Je passe un nombre d'heure incalculable à essayer d'appendre.

$_POST['nomsite']
c'est le nom du site.
Je me demandais d'ailleurs si il n'aurait pas été plus judicieux de lier directement le nom du site dans la table soumission.

Mais je crois que c'est la requete
$sql     = 'SELECT * FROM soumission WHERE idsite="' .$_POST['nomsite']. '"';
qui ne fonctionne pas, en alors je n'arrive pas à l'executer avec l'autre (celle que tu as listé en ajoutant GROUP BY).

Ce que je ne sais pas , c'est faut il recevoir l'ID ou le NOM du site à partir du champs déroulant pour faire ma requete

Je regarde de ce pas PDO.


merci encore
1
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
17 oct. 2012 à 02:54
bonjour,

donc plusieurs choses :

utilises pdo et prepare() pour tes requêtes sql au lieu de mysql_query() pour ne pas risquer les injections et c'est beaucoup plus pratique

$_POST['nomsite'] c'est l'id du site ou sont nom ?

$requete="SELECT * FROM site AS w, soumission AS s, annuaire AS a, statut AS e
WHERE w.idsite = s.idsite
AND a.idannuaire = s.idannuaire
AND e.idstatut = s.idstatut";

pour cette requête ajoute un group by

par exemple

$requete="SELECT * FROM site AS w, soumission AS s, annuaire AS a, statut AS e
WHERE w.idsite = s.idsite
AND a.idannuaire = s.idannuaire
AND e.idstatut = s.idstatut GROUP BY w.idsite";

et tu n'auras plus de doublons

évite aussi le * si tu n'as pas besoin de tout tu peux faire site.* pour récupérer tout les champs de la table site par exemple mais si rien qu'un champs n'est pas utilisé il faut mieux faire site.idsite,site.cequetuveux,site.encoreunchamp

j'espère que ça pourra t'aider
0