Utiliser 2 tables via la même page

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Utiliser 2 tables via la même page

par sadeq » 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

par Jade » 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

par sadeq » 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)

par Jade » 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...

par sadeq » 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 (); 
?> 

par Jade » 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

par sadeq » 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?

par Jade » 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 ?

par zeus » 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:

par Jade » 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

par sadeq » 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

par zeus » 11 oct. 2005, 16:39

Il te suffit de prendre le code de la 2nd saison et de le mettre sur une autre page

par Jade » 11 oct. 2005, 16:30

J'ai changer les lignes, et sa affiche correctement les saisons sans erreur... mais le prob c'est que sa affiche encore les deux saisons sur la même page :?

par zeus » 11 oct. 2005, 16:11

Fait un effort et suis moi bien

Dans ton script tu fait la suite d'évenement suivante:
1°/ tu récupères une valeur
2°/ tu affiche un texte en fonction de cette valeur
3°/ tu fait un calcul sur cette valeur

Ton problème vient du fait que tu récupère une valeur qui n'existe pas quelquefois (1er chargement par exemple)

ce que je t'ai proposé de faire, c'est de tester si cette valeur existe ou pas la méthode à suivre est :
1°/ tu teste si la valeur existe
1-1/ si elle existe tu la récupère
1-2/ si elle existe pas, tu l'initialise
2°/ tu affiche du code en fonction de la valeur RECUPEREE
3°/ tu fait un calcul sur la valeur RECUPEREE

Dans ton code, comme tu fait un calcul sur $_GET['sgl'] et $_GET['sga'] alors qu'on a un test juste avant qui nous permet de tester leur existence et de créer à coup sûr $sqa et $sql. Pourquoi tu n'utilises pas ces variables
if ($donnees['epi'] > $sgl*100 AND $donnees['epi'] < ($sgl+1) * 100)
Attention, je ne te donnes le code que pour le 2nd test. A toi de l'adapter pour le 1er test

par Jade » 11 oct. 2005, 16:04

J'ai remplacer ma ligne par la tienne et sa affiche la condition de la deuxième table... mais il a toujours l'autre erreur a la ligne, vue que c'est la page de sg1 pas sga
 if ($donnees['epi'] > $_GET['sga']*100 AND $donnees['epi'] < ($_GET['sga']+1) * 100)

@sadeq: j'ai essayer l'adresse que tu ma donné a essayer et sa change absolument rien :?

Mais quand tu dis simplifiable, tu me propose quoi pour simplifier ?