Page 1 sur 1

Mettre deux éléments dans une même case de BDD

Posté : 23 avr. 2013, 20:42
par polim78
Bonsoir, alors je m'explque.

Voici mon code de la table ajout_personnel.php
<form action="ajout_reussie.php" method="post" enctype="multipart/form-data" name="formulaire" >
<table>
<tr id=event><td>Batiment</td><td><select style="width:250px" name="Code_Bat[]" multiple="multiple">
							<option value="">--TOUT--</option>
							<option value="BAT-A">BATIMENT A CAL</option>
							<option value="BAT-B">BATIMENT B CAL</option>
							<option value="BAT-C">BATIMENT C CAL</option>
							<option value="BAT-IUFC">INSTITUT UNIVERSITAIRE DE LA FACE ET DU COU</option></select></td>
</tr> </table></form>

Celui de ma table ajout_reussi.php
if(($_POST['Code_Bat']) != ""){
		$bd->exec("INSERT INTO`personnel_batiment` (`Id_Batiment`, `Id`, `Code_Bat`) VALUES ('', '". $Id['Id']."' , '".$_POST['Code_Bat']."');");
		}
Alors comme vous l'avez sans doute remarqué. C'est une liste déroulante à choix multiple. Ainsi je voudrais savoir lorsque je sélectionne plusieurs éléments de ma liste déroulante, comment faire pour qu'ils apparaissent dans la base de données non pas comme deux éléments distincts mais comme un seul séparé par une virgule par exemple.

En gros :

Si je sélectionne BAT-A et BAT-B
J'aurais "BAT-A , BAT-B".
Peut-être la fonction "implode" ?

J'espère avoir été clair. Merci pour les réponses.

Re: Mettre deux éléments dans une même case de BDD

Posté : 23 avr. 2013, 23:36
par moogli
salut,


on ne fait ce genre de chose simplement parce que c'est pas utilisable après.

utilise une autre table qui servira de jointure entre les tables.

plus d'info http://sqlpro.developpez.com/cours/sqlaz/jointures/


@+

Re: Mettre deux éléments dans une même case de BDD

Posté : 24 avr. 2013, 01:01
par polim78
Merci pour la réponse.
J'ai refléchi à votre proposition qui paraissait fort intéressant mais mon projet m'interdit que créer d'autres tables que celles indiquées.
Ainsi, j'ai pensé à si on ne pouvait pas faire un tableau dans un tableau (plus précisement dans la case voulu) ce qui nous permettrait de pouvoir réutiliser nos valeurs .
Qu'en pensez-vous.

Re: Mettre deux éléments dans une même case de BDD

Posté : 24 avr. 2013, 12:32
par ZeNerzhul
Bonjour,

2 méthodes pour faire cela. Et je rappel que tu ne pourras pas te servir de ton champ pour faire un quelconque croisement plus tard. Bref, ca ne te servira que de stockage.

1) tu serialises ton tableau de résultat et tu le place dans ton champ. A la récupération tu désérialises quand tu le récupères.

2) tu implode tes données avant la sauvegarde => $machaine = implode( ';', $montableau ) avec un caractère séparateur que tu es certain de ne jamais trouver dans tes données de tableau. A la récupération tu explode $montableau = explode( ';', $machaine ) tes données pour les remettre dans ton tableau.

Re: Mettre deux éléments dans une même case de BDD

Posté : 24 avr. 2013, 23:50
par moogli
mais mon projet m'interdit que créer d'autres tables que celles indiquées.
Un projet qui empêche une normalisation ? en quoi on ne peux pas créer une table de plus ?
c'est pas gênant d'avoir une table de plus et cela te simplifie la vie.

Une bonne application commence par une bonne modélisation. coté sgbd tu peux te tourner vers le modèle entité - association de la méthode merise. ce modèle pourra aussi t'aider pour la partie si tu compte t'orienter vers un modèle objet.

@+