Listes déroulantes liées avec une seule table

Fermé
lauraM - 4 juin 2008 à 12:10
 lauraM - 5 juin 2008 à 11:08
Bonjour,
J'ai actuellement un problème qu'ont rencontré beaucoup de personnes.
Je dispose d'une base de donnée "test" où se trouve une seule table "intervention". J'utilise easyphp.
Actuellement en stage, j'ai pour mission de faire une page (que je stockerait uniquement en local) avec un formulaire représentant une fiche d'intervention.
Dans ce formulaire doit se trouver deux listes déroulantes liées c'est-à-dire que lorsque je sélectionne, dans ma première liste déroulante, le nom d'une société, m'a deuxième liste déroulante doit me proposer le nom des clients correspondant.
Étant donné que je dispose d'une seule table ("intervention") dans ma base de donnée "test", ma clé primaire, qui est un numéro de fiche, fera, je pense, la liaison entre ces deux listes déroualntes.
Cela fait deux juors que j'essais de résoudre ce problème malgrès tout les conseils du forum.
J'en suis à présent à utiliser du javascript alors que je n'y connais absolument rien.
J'ai voulu me servir de l'exemple ci-joint : https://siddh.developpez.com/articles/ajax/#LIV-A
J'ai essayé de l'adapter mais apparamment il manque quelques choses car aucun message d'erreur n'apparaît et mes deux listes déroulantes sont vides malgrès les requêtes.

Voici mon code appartenant à mon formulaire.php :

<head>
<script type='text/javascript'>
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest) // Firefox et autres
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr;
}
/**
* Méthode qui sera appelée sur le click du bouton
*/
function go(){
var xhr = getXhr();
// On défini ce qu'on va faire quand on aura la réponse
xhr.onreadystatechange = function(){
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
if(xhr.readyState == 4 && xhr.status == 200){
leselect = xhr.responseText;
// On se sert de innerHTML pour rajouter les options a la liste
document.getElementById('intervention').innerHTML = leselect;
}
}
// Ici on va voir comment faire du post
xhr.open("POST","ajaxLivre.php",true);
// ne pas oublier ça pour le post
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
// ne pas oublier de poster les arguments
// ici, l'id de l'auteur
sel = document.getElementById('intervention');
N° = sel.options[sel.selectedIndex].value;
xhr.send("N°="+N°);
}
</script>
</head>
<body>
<?php
$servername='localhost';
$username='root';
$password='';
$connexion=mysql_connect($servername,$username,$password);
mysql_select_db('test', $connexion);
?>

<center>
<Font size=6 color=#2C2FBC>FICHE D'INTERVENTION</Font><br><br>
<form method="post" action="traitement.php">
...
<label>Société :</label>
<select name='société' id='societe' onchange='go()'>
<option value='-1'></option>
<?
$res = mysql_query("SELECT `intervention`.`N°`, DISTINCT (`intervention`.`Société`) FROM intervention ORDER BY `intervention`.`Société` ASC");
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row["N°"]."'>".$row["Société"]."</option>";
}
?>
</select>
<label>Nom du client :</label>
<div id='NCl' style='display:inline'>
<select name='NCl'>
<option value='-1'></option>
</select>
</div>
...
<?
mysql_close();
?>
</form>
</center>
</body>
</html>
A voir également:

29 réponses

ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 12:15
slt,

je te conseil d'aller voir à cette adresse il t'explique comment faire des liste liées en php, tu comprendra puet etre plus facilement qu' en javascript

http://www.phpfrance.com/forums/voir_sujet-4562.php
0
Je vous remercie de votre réponse mais le souci c'est qu'hier j'ai passé une bonne partie de mon après-midi à vouloir adapter le code que vous m'avez envoyé par lien en php.
Cela n'a rien donné à part des erreurs donc j'ai voulu essayé avec un autre exemple de code.
J'en ai essayé d'autres bien sûr et cela n'a rien donné non plus (exemple en XAJAX).
Je "désespère" un peu alors si quelqu'un aurait la solution à mon problème ou à mon code dont je ne comprend pas l'erreur ca serait gentil de votre part.
Cordialement
0
ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 14:09
Peux tu me donner la strucuture de ta table stp ? je vais regarder ce que je peux faire pour t'aider !
0
Merci d'avance. Je ne sais pas trop ce que vous entendez par structure mais je vais faire de mon mieux pour vous orientez :

Base de donnée : 'test'

table (une seule) : 'intervention'

champs :
'N°' int(11) auto_increment clé primaire
Date d'ouverture datetime
Date de clôture datetime
Société varchar(30)
Nom client varchar(30)
Demande du Client varchar(150)
Type d'intervention varchar(20)
Matériel varchar(20)
Temps d'intervention int(11)
Observation mediumtext
Opérateur varchar(255)
Heure d'ouverture datetime
Heure de fermeture datetime
Contrat bit(1)
Non-conformité bit(1)
Hors Maintenance bit(1)
Comptabilisé bit(1)
Facturé bit(1)
Liste opérateur2 varchar(50)
Liste opérateur3 varchar(50)
Liste opérateur4 varchar(50)
Date ouverture1 double Oui NULL
Date ouverture2 datetime Oui NULL
Date ouverture3 datetime Oui NULL
Date ouverture4 datetime Oui NULL
Heure ouverture1 datetime Oui NULL
Heure ouverture2 datetime Oui NULL
Heure ouverture3 datetime Oui NULL
Heure ouverture4 datetime Oui NULL
Date clôture1 datetime Oui NULL
Date clôture2 datetime Oui NULL
Date clôture3 datetime Oui NULL
Date clôture4 datetime Oui NULL
Heure clôture1 datetime Oui NULL
Heure clôture2 datetime Oui NULL
Heure clôture3 datetime Oui NULL
Heure clôture4 datetime Oui NULL
Tps intervention1 int(11) Oui NULL
Tps intervention2 int(11) Oui NULL
Tps intervention3 int(11) Oui NULL
Tps intervention4 int(11)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 14:32
c'etait bien ca je vais regarde, laisse moi 1 pe 2 temps !
0
Ok! Je recherche de mon côté et si je trouve quelques chose je le posterais.
Merci encore.
Cordialement
0
ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 14:36
Que veux tu faire dans ton formulaire quelle est le but recherché ?
0
Le but de mon formulaire est de faire des enregistrement d'intervention c'est-à-dire que la société dans laquelle je me trouve va utiliser ce formulaire pour enregistrer chaque intervention qu'il font chez leurs clients.
Et le but de ces deux listes déroulantes c'est que la deuxième liste déroulante s'actualise en fonction du choix fait dans la première.
J'espère que vous comprendrez.
Merci
0
ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 14:45
oui je compren bien je travail dessus laisse moi encore 10 min jtexpliquerais tous apre
0
ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 15:03
Ca ye j'ai resolu ton probleme mais je pense que dans un premier temps tu dois restructuré ta base de données en 2 voir meme le mieu je dirais 3 tables distinctes.
0
Quelle était mon erreur ?
Et pour votre suggestion, l'idée de faire plusiseurs tables ne me dérange pas seulement je ne dois pas effacer les données déjà rentrées c'est-à-dire que si je créer plusieurs tables comment puis-je faire pour garder les enregistrements que je possède déjà?
J'espère que j'ai bien compris ce que vous me suggériez ?
Merci
0
ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 15:12
Ce n'est pas une vraiment une erreur d'avoir fait ça dans une seule table mais pour ta compréhension et pour facilité le traitement par la suite il vaut mieux séparer en 3 tables.

Je te propose donc de créer une table Societe, une table Client et une table Intervention.

Ensuite je ne sais pas comment sont t connaissances en base de données mais je pense que tu vois bien quels vont être les liens entre chaque tables.
0
ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 15:18
En clair chaque table aura un id comme clé primaire en auto increment

La table Societe sera liée avec la table Client et la table Client avec la table Intervention.

Pour récupérer tes données tu peux également passer par le php avec des insert dans chaque tables.

Tien moi au courant !
0
J'ai peur de ne pas comprendre.
En fait ce qui ne me permettait pas de retrouver mes données dans les listes déroulantes c'est que je posédais une seule table ?
Oui je pense savoir faire les liaisons il n'y a pas de problème d ce point de vue là. Seulement j'ai peur qu'en changeant la structure de ma base de donnée je puisse perdre les données qui y sont déjà entrées.
En fait pour tout vous dire, avant ma société gérait leur fiche d'intervention sur access et il m'ont demandé de leur faire la même chose ou du moins l'équivalent sur une sorte de page web ou statique ce qui fait qu'à l'aide du media "ODBC" j'ai du transférer la base de données et les données déjà enregistrées dans mysql.
C'est pour ca que je vous transmet mon inquiétude concernant de perdre les données déjà enregistrées sur ma base de donnée mysql.
Merci de votre aide.
0
ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 15:26
Si les données sont déja dans ta base de données mysql tu n'aura aucun problème à faire la migration. Si tu sais accéder à mysql et faire des requêtes la chose sera vite régler. j'ai moi même réaliser la migration d'un logiciel a un autre les structures n'étaient pas les mêmes et cela a du me prendre 1 heure. Mais je peux t'aider il n'y a pas de problème. Je pense qu'en trois scripts ta migration pourrait être faite. Mais ce n'ai qu'un conseil tu peux rester avec une seule table.

J'ai le script php qui fait les 2 listes déroulantes je peux te l'envoyer si tu veux ?
0
ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 15:32
Si tu le souhaite tu n'a cas faire un export de tes tables avec les données, m'envoyer le fichier et tu me dis quel champ va dans quelle table et je vais regarder pour faire la migration, en attendant tu pourras travailler sur une seule table !
0
Je sais faire des reqûetes sql mais alors des migrations pas du tout. J'accepterais volontier ton aide car le but de mon stage est d'apprendre le plus de chose possible.
Mais cela ne va-t-il pas me compliquer les choses ? J'espère aussi ne pas avoir un manque de temps car je dois encore afficher automatiquement la date du jour dans un champ texte ou encore faire des calculs entre les dates.
Je souhaiterais aller au plus simple tout en m'assurant que je n'aurais pas d'autres problèmes si je garde une seule table.
Qu'en pensez vous ?
Cordialement et encore merci.
0
Je souhaiterais volontier que vous puissiez m'envoyer le script php.
Merci
0
ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 15:44
Moi je pense qu'au contraire cela ne pourra être que bénéfique, je pense de plus que tu devras faire un rapport de stage et une soutenance donc si tu montre que tu a amélioré la chose tu ne pourras en sortir que bénéfique.

Si tu veux tu me donne une entrée de ta table et je te donne un exemple pour faire la migration.

Ensuite pour la date du jour je peux la encore t'aider c'est très facile en php je te donnerais le code.

Mais aussi non tu ne devrais pas avoir de problème à rester avec une seule table.
0
ryldor Messages postés 144 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2009 14
4 juin 2008 à 15:46
Pour le script je peux te l'envoyer par mail si tu le souhaite car c'est assez long quand même, il fait 140 lignes.
0