Utiliser 2 tables via la même page

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

11 oct. 2005, 16:42

Je te propose de passer une liste de n° sg à ton programme qui au lieu de faire la même chose deux fois, utilise une boucle qui lit la liste des sg passés.

Je m'explique:
1. ton programme reçoit un tableau nommé sgx qui contient tous les n° de saisons que le client veut afficher

2. Une boucle parcours ce tableau et selon le n° construit une requête et affiche son résultat (comme tu le fait bien d'ailleurs) avant de passer au n° sgx suivant

C'est tout. En fait ce qu'il te manque c'est la boucle tu peux garder l'ensemble du code de requêtage et d'affichage (avec quelque simplifications)

Le nouveau programme simplifié que je te propose est le suivant :
<?
//Pour exécuter ce programme, donner le paramètre sgx sous forme de tableau :
//Exemple: http://monsite/cette_page?sgx[0]=1&sgx[1]=2

//Ouvrir la connexion à la BDD
mysql_connect("localhost", "root", "root"); 
mysql_select_db("test");

//Récupérer la liste des id sgx envoyés par GET
$sgx = isset($_GET["sgx"])?$_GET["sgx"]:null;

//Traiter tous les sgx reçus
if ($sgx != null){
	foreach ($sgx as $x){
		//nom de la table sg selon le n° sg
		$table = "saison_sg$x"; 
		$reponse = mysql_query("SELECT * FROM $table ORDER BY epi");
		//Affichage de table
		echo "<h3>Saison $x</h3>";
		while ($donnees = mysql_fetch_array($reponse)){ 
		    if ($donnees['epi'] > $x*100 AND $donnees['epi'] < ($x+1) * 100) { 
    		?> 
				<div class="titre_epi">
				<? echo '<a href="episode.php?epi=' .$donnees['epi'].'">'
				.$donnees['epi'].' - '.$donnees['titre_vf'].' - '.$donnees['titre_vo']."</a>" 
				?>
				</div> 
    		<? 
    		} 
		}//donnees suivantes
	}//Table suivante
}
else echo "Aucune table!";

//fermer la connexion
mysql_close (); 
?> 

Remarque:

Pour perfectionner cette solution, il vaut mieu de travailler sur une seule table exemple "saison_sg" dans laquelle tu peut enregistrer toutes les saisons et modifier simplement la requête pour extraire les épisodes des saisons selon les codes saisons passés dans le paramaètre sgx.
La partie requête modifiée est :
//Selection de la saison $x
$reponse = mysql_query("SELECT * FROM saison_sg WHERE id_saison = $x ORDER BY epi");
qui doit remplacer la requête existante
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 104 Messages

11 oct. 2005, 16:43

:?

lol tu aurais pus le dire dans tes premiers messages, qu'on pouvais pas faire ce que je voulais faire lol
Modifié en dernier par Jade le 11 oct. 2005, 16:49, modifié 2 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

11 oct. 2005, 16:47

Je suis désolé mais j'avais pas du tout compris que tu voulais afficher sur 2 pages :oops:

Ce que j'avais compris, c'est que tu voulais tout afficher sur 1 page et que tu y arrivais pas :oops:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 104 Messages

11 oct. 2005, 16:54

@sadeq: oui mais ton code va tu faire afficher mes deux tables sur une même page ? parce que c'est pas mon but rechercher...


@zeus: lol pas grave ton aide a surement un peux amiliorer mon code lol...

Sinon j'ai une autre question pour ma première question lol... j'avais déja poser cette question sur le forum du site du zéro, j'ai eu quelque réponse mais avec le monde qui a mon topic c'est vite perdu... bref j'avais eu comme réponse sa comme requête
SELECT t1.champ, t2.champ FROM table1 AS t.1, table2 AS t.2 WHERE cond
j'avais compris la linge a par le WHERE ou il faut mettre la condition et je savais pas quoi mettre... et je savais pas quoi mettre dans mon code pour que sa marche... sa te dit quelque chose ?
Modifié en dernier par Jade le 11 oct. 2005, 16:55, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

11 oct. 2005, 16:55

Pour ce qui est d'afficher chaque résultat de table dans une page séparée, c'est possible en utilisant un header récurssif (automatisé) selon le contenu de la liste des sg fournis.
Fais signe si tu veux savoir comment faire?
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 104 Messages

11 oct. 2005, 16:58

@sadeq: Je suis preneur lol, sa coute rien d'essayer et si tu dis que sa peux marcher, sa vaux le cout alors lol

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

11 oct. 2005, 17:04

ba, avec le code qu'on a maintenant:
au lieu que la boucle affiche les tables elle renvoi n° par n° à ce même programme qui doit afficher le contenu de chaque n° reçu dans un popup

Pour satisfaire la recursivité, le paramètre sgx va jouer deux rôles:
1. initialement il contiendra la liste des tables à afficher
2. à chaque récursivité sgx contient le n° d'une table à afficher dans un popup

Les sgx 2 n'ecrase pas la session du sgx 1 pour la simple raison que les sgx 2 sont programmés à retardement par du code javascript.
De ce fait tous les popup programmé seront exécuté (ouvert) côté client et chaque popup envoi son propre sgx à notre programme qui cette fois affiche la table correspondant au sgx.

Pour que le programme fasse la différence entre un sgx tableau (1) et un sgx (2) valeur emmanant d'un popup, il suffit de tester la nature de sgx par la fonction is_array()
Si sgx est un tableau alors l'écriture des popup commence pour tous les sgx
sinon il s'agit d'afficher une valeur précise de sgx

Le programme modifié devient :
<?
//Pour exécuter ce programme, donner le paramètre sgx sous forme de tableau :
//Exemple: http://monsite/cette_page?sgx[0]=1&sgx[1]=2

//Ouvrir la connexion à la BDD
mysql_connect("localhost", "root", "root"); 
mysql_select_db("test");

//Récupérer la liste des id sgx envoyés par GET
$sgx = isset($_GET["sgx"])?$_GET["sgx"]:null;

//Traiter tous les sgx reçus
if ($sgx != null){
	if (is_array($sgx)){
		//Traitement de tous les sgx reçus
		foreach ($sgx as $x){
			//renvoi à la même page mais avec le paramètre $x => afficher séparement la page $x 
			echo "<script>open('http://localhost/test/double_tables.php?sgx=$x','page$x');</script>";
		}//sgx suivant
	}
	else {
		//Traitement d'une table sgx
		$table = "saison_sg$sgx";
		$reponse = mysql_query("SELECT * FROM $table ORDER BY epi");
		//Affichage de table
		echo "<h3>Saison $sgx</h3>";
		while ($donnees = mysql_fetch_array($reponse)){ 
		    if ($donnees['epi'] > $sgx*100 AND $donnees['epi'] < ($sgx+1) * 100) { 
    		?> 
				<div class="titre_epi">
				<? echo '<a href="episode.php?epi=' .$donnees['epi'].'">'
				.$donnees['epi'].' - '.$donnees['titre_vf'].' - '.$donnees['titre_vo']."</a>" 
				?>
				</div> 
    		<? 
    		} 
		}//donnees suivantes
	}//Fin table
}
else echo "Aucune table!";

//fermer la connexion
mysql_close (); 
?> 
Modifié en dernier par sadeq le 11 oct. 2005, 17:35, modifié 2 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 104 Messages

11 oct. 2005, 17:32

Dans ton code il a quoi a changer, parce qu'il a plein de x... et popur moi sa affiche "Aucune Table !" il faut surement changer $table dans la requete, mais même la sa change rien...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

11 oct. 2005, 17:43

le dernier code que j'ai posté est complet.
Le x désigne une table x c'est une façon de parler comme toi tu as utilisé sg1 et sga moi j'ai nommé sgx pour généraliser

Fait gaffe, dans mon programme les sgx sont numériques donc je n'ai pas de table "saison_sga" mais "saison_sg2"

j'ai testé ce programme pour deux tables saison_sg1 et saison_sg2
et il maffiche bien deux saisons chacune dans une page (popup)
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 104 Messages

11 oct. 2005, 18:41

Alors pour être sur que sa marche il faudrait que je change le nom de ma table de sga par sg2 ?


Sinon j'ai un autre soucis, la page du script, il faut faire quoi ? faire un copier coller de la page et la nommé "double_table.php" ? et ton commentaire c'est quoi qu'il demande de changer... il a tellement de $x que je suis perdu lol, dsl...
//renvoi à la même page mais avec le paramètre $x => afficher séparement la page $x

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

12 oct. 2005, 09:21

Alors pour être sur que sa marche il faudrait que je change le nom de ma table de sga par sg2 ?


Sinon j'ai un autre soucis, la page du script, il faut faire quoi ? faire un copier coller de la page et la nommé "double_table.php" ? et ton commentaire c'est quoi qu'il demande de changer... il a tellement de $x que je suis perdu lol, dsl...
//renvoi à la même page mais avec le paramètre $x => afficher séparement la page $x
Remplace "double_table.php" par le nom de ta page et les "x" par "numero" si tu veux.

Mais l'essentiel est que tu comprenne ce programme pour pouvoir le maintenir et l'adapter (adopter).

Je reformule ce qu'il fait:
il a un double rôle :
1° role:
- reçoit un paramètre nommé "sgx" : c'est un tableau de numéros de tables à afficher
- parcours ce tableau et écrit un popup javascript qui affiche la page du numero en cours (c'est ce popup qui va plus tard afficher une table par page)
Donc à chaque numéro trouvé dans le tableau lui correspond un popup qui ouvre sa page

2° rôle :
- en fait c'est le même programme qui est sollicité par les popup qui lui envoient chacun un n° de page à afficher, dans ce cas, il interroge la base et affiche la page concernée
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène