problème pour lister et afficher les tables....

Petit nouveau ! | 9 Messages

30 déc. 2012, 15:06

Bonjour,

je cherche à afficher des tables, mais j'ai comme un souci... j'explique.

dans l'espace membres de mon site, les membres peuvent s'inscrire à un concours. cela crée une table ayant le nom de l'organisateur. par exemple DRAVEIL, PARIS, NICE etc etc...
contenant les infos du membre (nom, prénom N° de licence,jour choisi, heure choisie etc) jusque là pas de souci.

ensuite je veux afficher toutes les tables créées pour que chacun puisse voir qui est inscrit à tel ou tel concours ,et là c'est le souci, j'ai des messages d'erreur...

je me sers de la table concours comme base pour aller chercher les noms des organisateurs (DRAVEIL, PARIS etc...) et dans mon code je demande à afficher les tables saufs celles vides (si personne n'est inscrit à PARIS ne pas afficher cette table) je vais aussi chercher dans cette table la discipline pour afficher en titre de tableau (caption) la discipline et le nom de l'organisateur

<?php
	//On recupere organisateur de la table concours
	$req1 = mysql_query('SELECT discipline, organisateur FROM concours');
	while($idconcours= mysql_fetch_array($req1))
	{
?>
<?php 

$organis=$idconcours['organisateur'];
$discipli=$idconcours['discipline'];

?> 

<div class="tableau">
<table>
	<caption>Liste des Inscrits pour le <?php echo ''.$discipli.''; ?> de <?php echo ''.$organis.''; ?></caption>
               <tr>
		          <th>D&eacute;sinscription</th>
		          <th>Licence</th>
		          <th class="colnom">Nom</th>
		          <th class="colprenom">Pr&eacute;nom</th>
    	                  <th>cat&eacute;gorie</th>
    	                  <th>Samedi</th>
		          <th>Dimanche</th>
		          <th>heure</th>
	       </tr>
<?php
//on recupere les donnees des inscrits des tables correspondantes aux concours pour les afficher
$req2 = mysql_query('SELECT id, samedi, dimanche, heure, nom, prenom, licence,  categorie FROM ' .$organis );
//on ecarte les tables vides
if( mysql_num_rows($req2) > 0) 
		{
		//on cherche les donnees des tables et on les affiche
		while($dnn = mysql_fetch_array($req2))
		{
?>
		<tr>
			<td><?php echo $dnn['id']; ?></td>
			<td><?php echo $dnn['licence']; ?></td>	
			<td><?php echo $dnn['nom']; ?></td>
			<td><?php echo $dnn['prenom']; ?></td>
			<td><?php echo $dnn['categorie']; ?></td>
			<td><?php echo $dnn['samedi']; ?></td>
			<td><?php echo $dnn['dimanche']; ?></td>
			<td><?php echo $dnn['heure']; ?></td>
			<br />
		</tr>
<?php
		}
?>
<?php
	}
?>
<?php
	}
?>
</table>
</div>
seulement voilà , TOUTES les tables sont affichées même celles qui n'existent pas....

et en entête de chaque table affichée qui n'existe pas le message d'erreur:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /mnt/webb/e1/83/52028883/htdocs/espace_membre/liste.php on line 146

il y a peut être un moyen de faire autrement pour aller chercher ces tables mais je ne vois pas....

dans la BDD il y à les tables générées par mon formulaire, et les tables users, compta, concours et rien d'autre

si vous avez une idée n'hésitez pas, j'ai débuté en programmation voici 15 jours....;)

merci d'avance.

Bruno

ViPHP
xTG
ViPHP | 7331 Messages

30 déc. 2012, 17:02

Si tu as ce message c'est que la requête a échouée suite à une erreur SQL.
Et en effet quelle idée de faire une requête sur une table inexistante...

Pour lister les tables existantes tu peux faire ceci en sql :
show tables

Petit nouveau ! | 9 Messages

30 déc. 2012, 17:31

en fait j'ai une idée sur laquelle je travaille depuis quelques minutes....

le membre qui choisit un concours fait le que le nom de l'organisateur va s'inscrire dans une table et c'est cette table qui me servira de base de recherche pour afficher toutes les autres tables...

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

30 déc. 2012, 23:37

salut,


Ce que tu indique ressemble fortement a un défaut de conception.

Pourquoi créer une table par membre ? (surtout si elles sont identique).

Un concours, c'est un titre, une description (des règles etc etc) et un organisateur (clef étrangère de la table des membres).

Une Inscription à un concours c'est une table avec deux colonnes (qui sont deux clef étrangères, la clef primaire du concours et la clef primaire du membre qui participe).

Ensuite suivant le livrable que l'on doit pouvoir fournir, la table peux s'étoffer.

Cela permet de gérer simplement l'unicité qu'une participation a un concours (il suffit que la clef primaire de la seconde table soit composée des deux colonnes) et aussi plusieurs concours par membre (comment fait tu pour avoir plus d'un concours par membre ?).

cela évite aussi d'avoir 30000 tables quasi inutile.

Ton modèle reste simple, tu obtient la liste des concours par un simple select sur la table des concours et évite ainsi les problème qui t’amène ici ;)


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

Eléphanteau du PHP | 10 Messages

02 janv. 2013, 11:18

Tu pourrais faire juste 3 tables :
-concoure
-id_concoure
-nom_concoure
-ect...

-organisateurs

-id_concoure
-id_organisateur
-nom_organisateur
-téléphone
ect...

participant
id_concoure
id_participant
nom_participant


et ensuite tu fais des jointure à l'aide de "id_concoure" du genre sa :
<?php
// connexion à tas BDD

$req=$bdd->query(SELECT*FROM concoure INNER JOIN organisateur INNER JOIN participant ON id_concoure );

while($donnees=$req->fetch())
{
// ce que tu veux afficher
}
?>