Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

Listes de valeurs dependantes en PHP + MYSQL

Willy, le jeudi 13 octobre 2005 à 21:13:51 
 Signaler ce message aux modérateurs

Salut les amis !
Je suis désespéré. Je voudrais faire une page web sur laquelle ya 2 listes:

"Direction" et "Departement"

Les listes prennent leur valeurs dans ue base de données. Avec PHP je regle ça tres bien.

Je veux rendre dépendantes les deux listes de telle sorte que par exemple:
si on choisit la Direction de la Compatbilité, on ait seulement les département appartenant à la comptabilité dans le select "Departement".
Cela suppose ke la table d'ou "departement " tire ses infos a un champ Direction. Pas de probleme coté BD!

je crois ke cela revient à ecrire un code ki peut renseigner les valeurs d'un select en tirant ses infos d'une BD sur evenement onchange avec pour parametre la valuer de select en cours ke l'on va aller concatener à un sql.

Et la je crois ke l'on doit mélanger PHP et Javascript. ( !!! ! )

Avez vous deja eu un problème similaire ? Si oui aidez moi à le résoudre SVP.

Configuration: Windows XP
Easyphp 1.8
PHP 4
Mysql 4

1

olivier3006, le jeudi 13 octobre 2005 à 21:23:33

Pourquoi ne pas mettre
$reponse = mysql_query("SELECT * FROM nom_table where service='direction"); et tu rajoute un champdans ta bdd, par exemple, service
Il faut toujours prévoir l'imprévisible.

Répondre à olivier3006

2

Willy, le jeudi 13 octobre 2005 à 21:30:01

Le champ ds la BD est deja prevu. Mais le PB c'est ke "direction" doit etre la valeur du controle nomme direction sur la feuille.

j'ai deux controles:
le premier

<select name="direction">
-----
</select>

et le second

<select name="ddepartement">
-----
</select>


et il faut ke chake fois ke je change la valeur de direction, celle de departement suive.
Tu vois le truc ?
N'hesiste pas si ta d'autres idees



$reponse = mysql_query("SELECT * FROM nom_table where service='direction");

Répondre à Willy

3

Zep3k!GnO, le vendredi 14 octobre 2005 à 10:38:42

Oula j'ai un peu de mal a tout capter mais, tu peux pas faire ça en prenant par exemple :

dir=document.nomForm.direction.value;
puis tu mets ca dans l'uRL
document.location.href="http://www.tonsite.com/switch.php?dir="+dir;
(ca sur un Onchange comme tu l'as dits biensur ...)

et dans le switch.php c'est ta page dans laquelle tu es (celle qui contient les 2 select ) ,tu récup' la variable dir et du coup tu affiches dans le departement en fonction de la valeur que t'as dans $dir..
genre: $reponse = mysql_query("SELECT * FROM nom_table where service='$dir' ");

Je sais pas si j'ai tout saisie, mais j'espère que ca te fillera un coup de main ..

Zep3k!GnO
-->hi i hi o on va pa sau boulot :P

Répondre à Zep3k!GnO

4

wiwimagique, le vendredi 14 octobre 2005 à 11:11:45

Il faut faire ça en javascript principalement.
Le javascript doit être lui généré par le PHP.


tu dois créer une table en javascript come suit grâce à php et aux résultats de ta requête :

[code]
var maTable = Array(3);
maTable["Direction1"] = Array("Departement 1A", "Departement 1B");
maTable["Direction2"] = Array("Departement 2A", "Departement 2B");
maTable["Direction3"] = Array("Departement 3A", "Departement 3B");
[/code]

ensuite, fait une fonction qui charge la partie de la table qui t'intéresses dans la liste de Département. tu déclenches la fonction sur un onchange par exemple.


Voilà, j'espère avoir été suffisamment clair :)
Dans sa voiture rouge et jaune

Répondre à wiwimagique

5

Willy, le vendredi 14 octobre 2005 à 12:10:44

Mais vois tu c'est combiner le code PHP et Javascrit qui me pose probleme. Surtout quand les structures deviennent complikées.

exemple tableau, etc

Comment générer le code Js a partir de PHP ?

Dans tous les cas e tente le coup fort de tes suggestion et te fais le CR

Merci pour le coup de pouce

Répondre à Willy

6

wiwimagique, le vendredi 14 octobre 2005 à 12:18:15

Le js n'est pas différent du html dans ce sens ...
Dans sa voiture rouge et jaune

Répondre à wiwimagique

7

Willy, le vendredi 14 octobre 2005 à 13:00:36

Ok vais tenter le coup

Répondre à Willy

8

wiwimagique, le vendredi 14 octobre 2005 à 13:56:56

Si t'as un problème, pose ton code ici (n'oublie pas de le mettre entre les balise code), j'essaierais de le corriger.
Dans sa voiture rouge et jaune

Répondre à wiwimagique

9

Willy, le lundi 17 octobre 2005 à 21:03:46

-------------------------------Code de la BD ---------------------


-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Lundi 17 Octobre 2005 à 18:46
-- Version du serveur: 4.1.11
-- Version de PHP: 4.3.10-16
--
-- Base de données: `marc`
--

-- --------------------------------------------------------

--
-- Structure de la table `departement`
--

CREATE TABLE `departement` (
`CODEPARTEMENT` int(11) NOT NULL default '0',
`CODEDIRECTION` int(11) NOT NULL default '0',
`LIBELLEDEPARTEMENT` varchar(50) default NULL,
PRIMARY KEY (`CODEPARTEMENT`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table `departement`
--

INSERT INTO `departement` VALUES (6, 3, 'DRH');
INSERT INTO `departement` VALUES (5, 3, 'DAP');
INSERT INTO `departement` VALUES (4, 2, 'CCI');
INSERT INTO `departement` VALUES (3, 2, 'DE');
INSERT INTO `departement` VALUES (2, 2, 'DST');
INSERT INTO `departement` VALUES (1, 2, 'DED');
INSERT INTO `departement` VALUES (7, 3, 'DCB');
INSERT INTO `departement` VALUES (8, 1, 'DM');
INSERT INTO `departement` VALUES (9, 1, 'DECP');
INSERT INTO `departement` VALUES (10, 1, 'DT');
INSERT INTO `departement` VALUES (11, 1, 'DEMSP');

-- --------------------------------------------------------

--
-- Structure de la table `direction`
--

CREATE TABLE `direction` (
`CODEDIRECTION` int(11) NOT NULL default '0',
`LIBELLEDIRECTION` varchar(50) default NULL,
PRIMARY KEY (`CODEDIRECTION`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table `direction`
--

INSERT INTO `direction` VALUES (6, 'DR ABENGOUROU');
INSERT INTO `direction` VALUES (5, 'DR BOUAKE');
INSERT INTO `direction` VALUES (4, 'DR ABIDJAN');
INSERT INTO `direction` VALUES (3, 'DAC');
INSERT INTO `direction` VALUES (2, 'DSI');
INSERT INTO `direction` VALUES (1, 'DO');
INSERT INTO `direction` VALUES (7, 'DR KORHOGO');



-------------------------------Extrait de la classe avec laquelle je fais les acces bd ---------------------

ClsBd.php:


/**********************************************************
**** classe de gestion de l'accès aux données ***
***********************************************************/­
class ClsBd
{
var $dbHostName="10.1.50.244"; //Nom du serveur de données
var $dbName="marc"; //Nom de la base de données
var $dbUserName="marc"; //Nom de l'utilisateur légitime de la base de données
var $dbUserPass="marc"; //Mot de passe de l'utilisateur légitime
var $lastConID=0; // Etat de la dernière demande de connexion au serveur
var $lastQueryID=0;//Identificateur de la dernière requête exécutée
var $record=array(); //contient le dernier enregistrement récupéré

var $connectError=1;
var $closeConnectError=2;
var $openDBError=3;
var $selectError=4;


var $IDErreur=null;

//--------------- connexion au serveur de données


// Utilisation

function connect()
{
if ($this->lastConID==0) //La dernière connexion a échoué
{
$this->lastConID=mysql_connect($this->dbHostName, $this->dbUserName,$this->dbUserPass);
if (!$this->lastConID)
{
$this->IDErreur=$this->connectError;
return false;
}
return true;
}
return true;
}

//--------------- ferme la connexion a la base de donnees


// Utilisation

function closeConnection()
{
if (mysql_close($this->lastConID))
{
return true;
}
$this->IDErreur=$this->closeConnectError;
return false;
}


//----------- Active la base de données


// Utilisation

function openDB()
{
if (mysql_select_db($this->dbName,$this->lastConID))
{
return true;
}
$this->IDErreur=$this->openDBError;
$this->closeConnection();
return false;
}



// Utilisation

function executeQuery($strQuery)
{
$ok=false;
if ($this->connect()) //La connexion au serveur de données a reussi
{
if ($this->openDB()) // L'ouverture de la base de données a reussi
{
$this->lastQueryID=mysql_query($strQuery,$this->lastConID);
if ($this->lastQueryID) //La requete s'est execute avec succes
{
$ok=true;
}
}
}
return $ok;
}




//------------- Retourne le nombre d'enregistrements affectes par la derniere requete action


function recordsAffected()
{
return mysql_affected_rows($this->lastConID);
}

//-------------- Retourne le nombre d'enregistrements renvoyés par la dernière requête selection

function recordCount()
{
return mysql_num_rows($this->lastQueryID);
}

//---------------- Retourne l'enregistrement suivant

function nextRecord()
{
$this->record=mysql_fetch_array($this->lastQueryID);
if (!$this->record || !is_array($this->record))
{
return false;
}
else
{
return $this->record;
}
}


function selectRecords($strQuery)
{
if (!$this->executeQuery($strQuery))
{
$this->IDErreur=$this->selectError;
return false;
}
if ($this->recordCount()>0)
{
$returnArray=array();
while($line=$this->nextRecord())
{
$returnArray[]=$line;
}
return $returnArray;
}
return false;
}



}






------------------------------------la feuille html/php-----------------------

<html>
<head>
<title>FICHE DE DEMANDE</title>
<? require_once("ClsBd.php"); ?>


<script language="javascript">
function get_record(critere, form)
{

[code]
var maTable = Array(3);
var i=0;
// Creation d'une instance
$ObjVehicule = new ClsBd();
// initialisation de la requete (probleme car ne sais pas cmt faire passer le js ds le php)
$sql = "select CODEPARTEMENT, LIBELLEDEPARTEMENT from departement where CODEDIRECTION =".critere." order by LIBELLEDEPARTEMENT desc";
// echo $sql;
// mise en exécution
$liste = $ObjVehicule->selectRecords($sql);
if (is_array($liste))
foreach ($liste as $c => $record)
{ var p=new Option($record[1],$record[0]);
form.departement.options[i]=p;
i++;
}

/*maTable["Direction1"] = Array("Departement 1A", "Departement 1B");
maTable["Direction2"] = Array("Departement 2A", "Departement 2B");
maTable["Direction3"] = Array("Departement 3A", "Departement 3B");*/
[/code]

}
</script>

</head>
<body>




<form name="form1" method="post" action="">
<table width="100%" border="0" class="normal">
<tr>
<td colspan="7" align="center"><h4><U>DEMANDE</U></h4></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td colspan="3"> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td width="1%"> </td>
<td width="16%"><strong>Direction</strong></td>
<td width="2%" colspan="2">
<?
// Creation d'une instance
$ObjVehicule = new ClsBd();
// initialisation de la requete
$sql = "select CODEDIRECTION, LIBELLEDIRECTION from direction order by LIBELLEDIRECTION desc";
// mise en exécution
$liste = $ObjVehicule->selectRecords($sql);
// echo $sql;
// exploitation des resultats
?>
<!-- je crois ke cest ici kil faut declencher la fonction javascript -->
<select name="direction" class="inputextst" id="dir" onChange="get_record(this.value, 'form1')" >
<? if (is_array($liste))
foreach ($liste as $c => $record)
echo "<option value=$record[0] >$record[1]</option>";
?>

</select> </td>
<td width="28%" align="right"> </td>
<td width="28%" align="left"> 
</td>
<td width="5%"> 

</td>
</tr>
<tr>
<td> </td>
<td><strong>Département</strong></td>
<td colspan="2">

<!-- ICI LA COMPOSITION DE LA LISTE "departement" -->
<!-- Pour l'utilisation de la classe voir les 2 autres select -->

 
</td>
<td align="right"><strong>Service  </strong></td>
<td align="left">
<?
// initialisation de la requete
$sql = "select CODESERVICE, LIBELLESERVICE from service order by LIBELLESERVICE desc";
// mise en exécution
$liste = $ObjVehicule->selectRecords($sql);
// exploitation des resultats
echo "<select name=service class=inputextst>";
if (is_array($liste))
foreach ($liste as $c => $record)
echo "<option value=$record[0] selected>$record[1]</option>";
echo "</select>";
?>
</td>
<td> 

</td>
</tr>
<tr>
<td> </td>
<td> </td>
<td width="20%" > </td>
<td colspan="2"> </td>
<td> </td>
<td> </td>
</tr>
</table>

</form>

</body></html>



Voila mon code! je suis perdu entre le PHP et javascript.
Si tu peux regarder et t'inspirer de cela pour m'en dire un peu plus.
La foncton " get_record(critere, form)" est sensée etre en javascript : je sais ke j'ai fait un peu n'importe quoi !!!.
Et c'est cette fonction la ki doit utiliser les fonctions de la classe PHP deja ecrite en PHP pour fournir les resultats
escomptés cad les departements en fonction des directions.

Si tu as des reference javascripts ke je peux consulter en ligne je suis preneur d'adresse
mais il faut ke ce script marche !!!

Merci de m'aider ou de me dire ou je peux trouver de l'aide

Répondre à Willy

10

Willy, le mardi 18 octobre 2005 à 10:53:36

Merci de m'aider ou de me dire ou je peux trouver de l'aide. Voir mon code ci-dessus

Je cherche un document montrant comment on peut allier PHP et Javascript.

En particulier un code Javascript ou l'on a fait appel à des fonctions écrites en PHP

Merci les gars de votre coopération

Répondre à Willy

11

epsilon17, le mardi 18 octobre 2005 à 11:04:50

Php et javascript se completent mais ne peuvent pas "s'appeler" l'un l'autre!

car :
1)php s'éxecute sur le serveur avant l'envoi de la page au client :
il peut donc générer du code javascript sur condition avant d'envoyer la page mais ne peut pas accéder au variables javascript!
2)javascript s'execute sur le poste client : impossible d'executer du php à partir de javascript ce qui est apparement ton objectif :

lorsque tu selectionne la liste déroulante (select) tu veut que cela change le contenu de l'autre liste. Pour cela plusieurs solutions qui dépendent entre autre des navigateurs sur lesquels tu veut l'executer!
si tu est exclusivement en Internet Explorer alors tu peux utiliser :
innerhtml :
(edit maj meilleur lien)
http://fr.selfhtml.org/javascript/objets/all.htm#inner_html
ou/et
Xmlhttprequest :
http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_01

quel sont les navigateurs ciblés? -=Epsilon17=-

Répondre à epsilon17

12

Willy, le mardi 18 octobre 2005 à 12:05:04

Tu as bien compris mon problème en effet

Ok je vais regarder les pages et je dirai si j'avance

Merci pr tt

Répondre à Willy

13

epsilon17, le mardi 18 octobre 2005 à 14:52:09

L'exemple suivant illustre exactement ce que tu veux faire :
http://www.toutjavascript.com/savoir/xmlhttprequest.php3#sec­tion_05

Avec xmlhttprequest on peux faire tout un tas de truc qu'on ne pouvait pas faire avant sans recharger toute la page!
On obtient alors des interfaces beaucoup plus intéractives et rapides à répondre (cf gmail qui utilise cette techno à fond)

attention cependant : compatible IE et firefox seulement! -=Epsilon17=-

Répondre à epsilon17

14

Willy, le mardi 18 octobre 2005 à 16:02:33

AH !!!!
Merci bcp. Je sens que c'est très intéressant !
Meme sil est compatible IE slmt, je le prendrai !

Salut et merci encore

Je te dirai qd j'aurai resolu mon PB

Répondre à Willy

15

Willy, le mardi 18 octobre 2005 à 19:35:12

Salut !

J'ai pu a adapter le code à mes besoins
Merci bcp pour votre aide
Si vs voulez avoir copie, vs pouvez m'ecrire à

ixtobilly@yahoo.fr

Répondre à Willy

16

wiwimagique, le mardi 18 octobre 2005 à 20:21:49

Ah bah, j'arrive trop tard. Ben tant pis :p ou plutôt tant mieux pour toi :o)

Dans sa voiture rouge et jaune

Répondre à wiwimagique

17

obi1, le mardi 29 mai 2007 à 12:43:41

J'ai le meme probleme gars, est ce que tu peux bien me passer le code qui a fonctionner ?

Merci d'avance

Répondre à obi1

18

 Willy, le mercredi 30 mai 2007 à 12:17:07
Répondre à Willy
3 liste deroulante liées PHP/MYSQL/AJAX Bonjour, j'ai un un problème qui me rend vraiment dingue. voila j'ai 3 liste déroulante qui sont liée dont les données sont dans une base mysql. cependant le code fonctionne parfaitement chez moi mais non chez l'hebergeur. je ne sait pas ce qui peut... www.commentcamarche.net/forum/affich-8992509-3-liste-deroulante-liees-php-mysql-ajax
Liste déroulante en php Mysql (Résolu) Bonjour, J'ai un petit problème dont je suis sur beaucoup d'entre vous ont la solution Voila, je remplis une liste déroulante avec une table Mysql (en php). Mon problème est que je n'arrive pas à faire en sorte que chaque élement de la liste soit un... www.commentcamarche.net/forum/affich-1428706-liste-deroulante-en-php-mysql
PHP MysQl Aide pour choix listes déroulantes Bonjour, je suis a la recherche d'un bon tutorial pour pouvoir créer un moteur de recherche grace a plusieurs liste déroulantes en php/mysql. J'ai essaié avec une seul liste déroulantes et pas de probleme mais pas moyen d'en placer des autres Merci... www.commentcamarche.net/forum/affich-1290630-php-mysql-aide-pour-choix-listes-deroulantes
Installation rapide de LAMP (Apache+MySql+php) sous LinuxLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL... www.commentcamarche.net/faq/sujet-7971-installation-rapide-de-lamp-apache-mysql-php-sous-linux
Pb!Remplir liste déroulante avec Tables MySql (Résolu)Bonjour, Je cherche depuis un petit moment le moyen de remplir des infos ,se trouvant dans mes tables MySql, dans une liste déroulante. Voici mon code (qui contient surement beaucoup d'erreurs, vu que je ne sais pas par où commencer...) : www.commentcamarche.net/forum/affich-5635919-pb-remplir-liste-deroulante-avec-tables-mysql
Création site web en php/mysql (Résolu)Bonjour, je suis nouveau avec php, et je dois faire un site php/mysql j'ai réussi à se connecter à la base, afficher + modifier et ajouter des informations Mes questions: Q1 Comment fonctionne t -il la validation de votre inscription lors de chaque... www.commentcamarche.net/forum/affich-4448319-creation-site-web-en-php-mysql
Moteur de recherche php/MySqlSalut a tous ! Je fais appel à vous pour m'aider à faire un moteur de recherche php/mysql avec une liste déroulante. Je suis débutant en php, alors j'ai d'abord tenté de trouver un tutoriel pour obtenir exactement ce que je voudrais, j'ai bien trouvé... www.commentcamarche.net/forum/affich-2471216-moteur-de-recherche-php-mysql