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

Petit nouveau ! | 9 Messages

23 avr. 2013, 20:42

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 avr. 2013, 23:36

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/


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 9 Messages

24 avr. 2013, 01:01

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.

ZeNerzhul
Invité n'ayant pas de compte PHPfrance

24 avr. 2013, 12:32

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 avr. 2013, 23:50

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.

@+
Il en faut peu pour être heureux ......