2010-09-02 9 views
2

Je cette forme:Comment enregistrer une matrice de cases à cocher dans la base de données?

<tr> 
    <td><input type="hidden" name="ledlamps" value="LED lamps">LED lamps:</td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="3mm"/><label class="choice">3mm</label></td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="5mm"/><label class="choice">5mm</label></td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="8mm"/><label class="choice">8mm</label></td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="10mm"/><label class="choice">10mm</label></td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="Ovals"/><label class="choice">Ovals</label></td> 
    <td><input class="field checkbox" type="checkbox" name="box[]" value="Assembly LEDs"/><label class="choice">Assembly LEDs</label></td> 
    </tr> 

et ce code php:

$box=$_POST['box']; 
$ledlamps = $_POST['ledlamps']; 

if ($box != 0) { 
echo "$ledlamps: "; 
while (list ($key,$val) = @each ($box)) { 
$val1 = "$val, "; 
echo "$val1"; 
} 

} 

Si la sortie I avec écho affiche dans la façon dont je le veux:

lampes LED: 3 mm, 5 mm , 8mm (si je coche les cases respectives)

Mais je veux stocker cela dans un champ de table mysql. Comment je fais ça?

Merci pour votre aide!

+3

Utilisez la fonction 'serialize' :) – Sarfraz

Répondre

2

Vous pouvez utiliser implode() pour rejoindre le tableau $box pour une chaîne comme suit:

$box=$_POST['box']; 
$ledlamps = $_POST['ledlamps']; 

$str = $ledlamps . ": " . implode(", ", $box); 

Alors $str devrait contenir « lampes à LED: 3 mm, 5 mm, 8 mm » (selon les champs que vous avez cochés).

Ce champ peut ensuite être inséré dans n'importe quelle colonne mysql dont vous avez besoin (en supposant ici que votre requête est properly escaped et que l'entrée a été validée avant d'essayer une requête db ..). Cette façon de stocker les données rendra probablement très difficile d'interroger à nouveau les données si vous souhaitez les retirer à nouveau, alors qu'il devrait suffire pour une simple impression à l'écran de quelque chose comme un historique de produit, vous pouvez être mieux étudier si votre structure de table db pourrait être rendue plus accommodante. Donc, si cela était supposé nous pour un système de contrôle des stocks, quelque chose comme:

category table: 
- category_id 
- category_name  (LED lamps..) 

stock table: 
- item_id 
- category_id  (id for LED lamps..) 
- item_description (3mm lamp, etc) 

stock_selection table: 
- transaction_id 
- user_id 
- date 

stock_transaction table: 
- transaction_id 
- item_id 
- change    (number of items added/removed) 

Donc, une fois que vous recevez de nouveau les cases de votre formulaire, vous créez un nouveau record pour stock_selection l'utilisateur connecté. Vous utilisez ensuite l'ID de ce nouvel enregistrement et créez une entrée par case à cocher dans la table stock_transaction. Cela vous permettra à l'avenir d'interroger votre base de données pour garder une trace de choses comme le nombre d'éléments qui ont été retirés (ou rajoutés, etc.), qui les a pris, etc., et qui pourrait finalement être un avenir plus ... approche de preuve, en fonction de votre architecture globale.

+0

Merci, votre première solution a fonctionné pour moi même si je suis d'accord sur vos commentaires à ce sujet. Mais c'est comme ça qu'on le demande. –

2

Soit les stocker dans la base de données serialize d comme suggéré par @Sarfraz, soit séparés par des virgules, ou dans une table distincte, joint à la table primaire.

1

Vous pouvez soit:

$boxes = implode(",", $_POST['boxes']); 
$id = intval($_GET['id']); 
$sql = sprintf("UPDATE table SET box=%s WHERE id=%d", $boxes, $id); 
$res = mysql_query($sql); 

Ce stockerait les valeurs de la boîte dans un tableau séparé par des virgules, que vous pouvez ensuite explode() lors de la récupération de la base de données.

Vous pouvez également configurer une table séparée si vous souhaitez suivre la bonne route. De cette façon, vous pourriez avoir une relation plusieurs-à-un, où un objet (disons voiture) peut avoir plusieurs lampes.

Table: cars 
    - ID 
    - Name 

Table: cars_lamps 
    - Car_ID 
    - Lamp_ID 

Table: Lamps 
    - ID 
    - Name 

J'espère que cela a du sens.

Questions connexes