Liste liées + Oracle
Posté : 19 mai 2008, 15:06
Bonjour,
J'essaie d'appliquer le tuto de cette adresse http://www.phpfrance.com/forums/voir_sujet-4562.php dans sa version 100% PHP avec une base base oracle mais je n' arrive pas.
En-dessous la création de mes tables:
Jusque que là pas de problèmes. Les données des tables sont:
Je voudrais dans ma 1ère liste déroulante avoir la liste des plateformes, dans la deuxième celle des catégories.
A une plateforme sélectionnée dans la 1ère liste correspond une liste de catégories.
Mon code PHP incomplet:
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]
J'essaie d'appliquer le tuto de cette adresse http://www.phpfrance.com/forums/voir_sujet-4562.php dans sa version 100% PHP avec une base base oracle mais je n' arrive pas.
En-dessous la création de mes tables:
Code : Tout sélectionner
//création de la table plateforme
CREATE TABLE PLATEFORME (PL_ID NUMBER (16) NOT NULL PRIMARY KEY,
PL_NAME VARCHAR2 (32) NOT NULL);
//création de la table catégorie
CREATE TABLE CATEGORIE (CA_ID NUMBER (16) NOT NULL PRIMARY KEY,
CA_NAME VARCHAR2 (64) NOT NULL);
//comme une plateforme peut avoir 1 ou plusieurs catégories et qu'une catégorie peut être
dans 1 ou plusieurs plateformes ( Liaison 1,n : 1,n);
je crée une 3ème table regroupant les 2 clés primaires des deux autres tables.
CREATE TABLE PL_CA (PL_ID NUMBER (16) NOT NULL,
CA_ID NUMBER (16) NOT NULL,
PRIMARY KEY ( PL_ID, CA_ID ),
FOREIGN KEY ( PL_ID ) REFERENCES PLATEFORME ( PL_ID ),
FOREIGN KEY ( CA_ID ) REFERENCES CATEGORIE ( CA_ID ));
Code : Tout sélectionner
//Table PLATEFORME
1;AIX;
2;Blade IBM;
3;HP-UX;
4;Irix;
5;Linux;
6;Network Firewall;
7;Network Load Balancer;
8;Network Router;
9;Network Switch;
10;Nokia IPSO;
11;Other;
12;Passerelle SSL VPN;
13;Solaris;
14;Storage;
15;Unixware;
16;Windows 2000;
17;Windows 2003;
18;Windows NT;
19;Windows XP;
//Table CATEGORIE
1;Application Servers;
2;Blade Center;
3;Compteurs T3G;
4;CosmoCall;
5;Cpt-performances;
6;Custom Shell Command;
7;Databases;
8;Email;
9;ERP;
10;Hardware;
11;Log Files;
12;MiddleWare;
13;Miscellaneous;
14;Networking;
15;Operating Systems;
16;Port Monitors;
17;Process and Services;
18;SNMP Listener;
19;Storage;
20;Web Servers;
//TABLE PL_CA
1;1;
1;6;
1;7;
1;9;
1;10;
1;11;
1;14;
1;15;
1;16;
1;17;
1;18;
1;20;
2;2;
3;1;
3;6;
3;7;
3;9;
3;10;
3;11;
3;14;
3;15;
3;16;
3;17;
3;18;
3;20;
4;13;
5;1;
5;3;
5;6;
5;7;
5;8;
5;9;
5;10;
5;11;
5;12;
5;13;
5;14;
5;15;
5;16;
5;17;
5;18;
5;20;
6;14;
6;18;
7;10;
7;14;
7;18;
8;14;
8;18;
9;14;
9;18;
10;6;
10;14;
10;15;
10;18;
10;20;
11;1;
11;6;
11;7;
11;9;
11;11;
11;14;
11;15;
11;16;
11;17;
11;18;
11;20;
12;14;
13;1;
13;3;
13;6;
13;7;
13;9;
13;10;
13;11;
13;13;
13;14;
13;15;
13;16;
13;17;
13;18;
13;20;
14;18;
14;19;
15;15;
16;1;
16;5;
16;7;
16;8;
16;9;
16;10;
16;11;
16;13;
16;14;
16;15;
16;16;
16;17;
16;18;
16;20;
17;1;
17;4;
17;5;
17;7;
17;8;
17;9;
17;10;
17;11;
17;13;
17;14;
17;15;
17;16;
17;17;
17;18;
17;19;
17;20;
18;1;
18;5;
18;7;
18;8;
18;9;
18;10;
18;11;
18;13;
18;14;
18;15;
18;16;
18;17;
18;18;
18;20;
19;1;
19;5;
19;7;
19;8;
19;9;
19;10;
19;11;
19;13;
19;14;
19;15;
19;16;
19;17;
19;18;
19;20;A une plateforme sélectionnée dans la 1ère liste correspond une liste de catégories.
Mon code PHP incomplet:
<?php
/* On récupère si elle existe le nom de la plateforme envoyée par le formulaire */
$idr = isset($_POST['PL_NAME'])?$_POST['PL_NAME']:null;
?>
<?php
if(isset($_POST['OK']) && isset($_POST['CA_NAME']) && $_POST['CA_NAME'] != "")
{
pl_selectionnee = $_POST['PL_NAME'];
ca_selectionnee = $_POST['CA_NAME'];
?>
<p>Vous avez sélectionné la catégorie
<?php echo($ca_selectionnee); ?> de la plateforme
<?php echo($pl_selectionnee); ?></p>
<?php
}
?>
<html>
<head><title>INTERFACE</title>
</head>
<body >
<?php
$connexion = ocilogon("username","password","BDD");
if($connexion != false)
{
$stmt ="select PL_ID,PL_NAME from PLATEFORME";
$parsed = OCIParse($connexion, $stmt);
OCIExecute($parsed,OCI_DEFAULT);
$nrows = oci_fetch_all($parsed, $results);
$id_pl = array();
$pl_name = array();
/* On active un compteur pour les plateformes*/
$nbpl = 0;
if($parsed!= false)
{
for ($i = 0; $i < $nrows; $i++ )
{
array_push($id_pl, "".$results["PL_ID"][$i]."" );
array_push($pl_name, "".$results["PL_NAME"][$i]."");
/* On incrémente le compteur */
$nbpl++;
}
}
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgpl">
<fieldset>
<legend>Liste</legend>
<select name="plateforme" id="plateforme" onchange="document.forms.chgpl.submit();">
<option value="-1">- - - Choisissez une plateforme - - -</option>
<?php
for($i = 0; $i < $nbpl; $i++)
{
?>
<option value="<?php echo($id_pl[$i]); ?>"<?php echo((isset($idr) && $idr == $id_pl[$i])?" selected=\"selected\"":null); ?>><?php echo($pl_name[$i]); ?></option>
<?php
}
?>
</select>
<?php
$libre=oci_free_statement($parsed);
/* On commence par vérifier si on a envoyé un numéro de plateforme et le cas échéant s'il est différent de -1 */
if(isset($idr) && $idr != -1)
{
/* Cération de la requête pour avoir les catégories de cette plateforme*/
$sql="select CA_ID,CA_NAME from PLATEFORME,CATEGORIE,PL_CA WHERE PL_CA.PL_ID=". $idr .";";
if($connexion != false)
{
$parsed1 = OCIParse($connexion, $sql);
OCIExecute($parsed1,OCI_DEFAULT);
$nrows1 = oci_fetch_all($parsed1, $results1);
/* Un petit compteur pour les catégories */
$nbca = 0;
/* On crée deux tableaux pour les numéros et les noms des catégories */
$id_ca = array();
$ca_name = array();
/* On va mettre les numéros et noms des catégories dans les deux tableaux */
for ($i = 0; $i < $nrows1; $i++ )
{
array_push($id_ca, "".$results1["CA_ID"][$i]."" );
array_push($ca_name, "".$results1["CA_NAME"][$i]."");
/* On incrémente le compteur */
$nbca++;
}
/* Maintenant on peut construire la liste déroulante */
?>
<select name="categorie" id="categorie">
<?php
for($d = 0; $d<$nbca; $d++)
{
?>
<option value="<?php echo($id_ca[$d]); ?>"<?php echo((isset($ca_selectionnee) && $ca_selectionnee == $id_ca[$d])?" selected=\"selected\"":null); ?>><?php echo($ca_name[$d]." (". $id_ca[$d] .")"); ?></option>
<?php
}
?>
</select>
<?php
}
/* Un petit coup de balai */
$libre1=oci_free_statement($parsed1);
//<INPUT type="reset" name="retablir" value="Rétablir">
//INPUT: permet de définir les différentes zones composant le formulaire
}
?>
<br /><br /><input type="submit" name="OK" id="OK" value="Envoyer" />
</fieldset>
</form>
<?php
/* Terminé, on ferme la connexion */
$deconnexion=ocilogoff($connexion);
}
else
{
/* Si on arrive là, c'est pas bon signe, il faut vérifier les
* paramètres de connexion, mot de passe, serveur pas démarré etc... */
?>
<p>Un incident s'est produit lors de la connexion à la base de données,
veuiillez essayer à nouveau ultérieurement.</p>
<?php
}
?>
</body>
</html>
Je n'arrive pas à avoir la bonne requête pour charger les listes. Donc quand je sélectionne les données de la 1ère liste, rien ne se passe. Quelqu'un peut m'aider s'il vous plaît?[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]