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

Tout bien réfléchit je crois que vous avez entièrement raison car comme vous le dites si bien j'en sortirai que bénéfique.
De plus si je créer d'autres tables je vais pouvoir faire ce qui m'a également posé problème.
Je vous explique, en fait je dois faire cete page formulaire mais ausi leur donner la possibilité de pouvoir rajouter, modifier, ou supprimer une entreprise, un client, ou autres sans pour autant qu'il ait à rentrer dans mysql donc avoir plusieurs tables sera beaucoup lus simple pour moi et mon projet.
J'accepte volontier votre offre!
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:53
Tout a fait d'accord, donne moi une entrée de ta table et dis moi quels champs vont dans quelles tables.
0
oui je veux bien le script tout de même pour que je puisse en tirer une connaissance.
Merci. Dois-je vuos laisser mon adresse email ou est ce que vous pouvez l'avoir en étant membre ?
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:56
non je ne peux pas avoir ton email et heuresement ce serait une faille de sécurité ? Je veux bien ton email !
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 à 16:02
Mon email pour ma part est nicguer@hotmail.com
0
Je choisis de faire quatres tables
Donc il y aura comme vous l'avez suggérez uen table 'intervention', une 'client', une 'opérateur' et 'une société'.
Dans la table 'intervention' :
'N°' clé primaire auto_increment
'date de clôture' DATETIME
'date d'ouverture' DATETIME
'type d'intervention' VARCHAR(20)
'matériel' VARCHAR(20)
'Temps d'intervention' INT(11)
Observation mediumtext
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)
Date ouverture1 double
Date ouverture2 datetime
Date ouverture3 datetime
Date ouverture4 datetime
Heure ouverture1 datetime
Heure ouverture2 datetime
Heure ouverture3 datetime
Heure ouverture4 datetime
Date clôture1 datetime
Date clôture2 datetime
Date clôture3 datetime
Date clôture4 datetime
Heure clôture1 datetime
Heure clôture2 datetime
Heure clôture3 datetime
Heure clôture4 datetime
Tps intervention1 int(11)
Tps intervention2 int(11)
Tps intervention3 int(11)
Tps intervention4 int(11)

Dans la table 'société' :
id_societe clé primaire auto_increment
nomSociete VARCHAR(50)

Dans la table 'opérateur' :
id_operateur clé primaire auto_increment
nomOperateur

Dans la table 'client' :
id_client clé primaire auto_increment
nomClient
demandeClient

Merci d'avance. Si vous avez une meilleure proposition n'hésitez pas.
0
Voici mon email : mathieu.laura@hotmail.fr
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 à 16:14
Je t'envoie le script de suite, si tu veux tu peux m'envoyer une entrée de ta table pour que je regarde pour faire la migration car je vais bientot devoir quitter le forum !
0
Bonjour,
concernant le script que vous m'avez envoyé "ryldor" j'ai encore quelques problèmes avec c'est-à-dire que la première liste déroulante fonctionne, elle fait bien appel à ma requête. Mais la deuxième liste déroulante ne s'affiche même plus dans mon formulaire après avoir saisi le script. C'est un premier problème dont je ne trouve pas l'erreur.
De plus, dans mes listes déroulantes s'affichent des doublons hors il faut absolument qu'ils disparraissent. J'ai donc voulu essayer de mettre DISTINCT dans ma requête sql. Sauf que celui-ci me provoque une erreur et ne me fait même plus appel à ma table.
Voilà j'espère que vous pourrez m'aider.
Une chose de positive c'est que j'ai pu trouver comment mettre dans mes champs la date et l'heure.
Merci.
0