2010-02-01 4 views
2

Je veux insérer un tableau dans un champ dans la base de données de MySQL avec PHP ..Insérer tableau dans un champ dans MySQL

ce travail est bien:

HTML:

anotherField :<input type="text" name="anotherField" /> 

fax :<input type="text" name="f[]" /> 
email :<input type="text" name="f[]" /> 
phone :<input type="text" name="f[]" /> 

PHP (J'utilise cadre CodeIgniter):

<?php 
    function addCustomRow($tableName) 
    { 

    $arr = $this->input->post('f'); 
    $field = implode("|", $arr); 

     $data = array(
     'anotherField'   => $this->input->post('anotherField'), 
     'field'    => $field 
     ); 

     $this->db->insert($tableName, $data); 
    } 
?> 

et je reçois des données dans une base MySQL comme ceci

fax|email|phone 

MAIS ..

Ma question est .. Je veux beaucoup de tableaux dans le même domaine .. Comme ceci:

fax|email|phone :br: fax|email|phone :br: fax|email|phone .. 

J'ai essayé quelque chose comme ceci:

Html:

First array : 
fax :<input type="text" class="inp" name="f[0][0]" /> 
email :<input type="text" class="inp" name="f[0][1]" /> 
phone :<input type="text" class="inp" name="f[0][2]" /> 

Second array : 
fax :<input type="text" class="inp" name="f[1][0]" /> 
email :<input type="text" class="inp" name="f[1][1]" /> 
phone :<input type="text" class="inp" name="f[1][2]" /> 

PHP:

<?php 
    function addCustomRow($tableName) 
    { 

    $arr = $this->input->post('f[]'); 
    $field = implode(":br:", $arr); 

     $data = array(
     'anotherField'   => $this->input->post('anotherField'), 
     'field'    => $field 
     ); 

     $this->db->insert($tableName, $data); 
    } 
?> 

mais il dit Wrong [Gravité: Avis Message: Tableau de conversion de chaîne] et je reçois des données dans une base MySQL comme ce

array :br: array 

EDIT:

Je veux faire comme ça parce que j'ai une table Catégories .. et chaque chat a ses propres détails (champs) .. alors quand j'ajoute un nouveau chat, je fais juste quelque chose comme ça

 name of cat : <input type="text" name="name" /> 

    <!-- Fields --> 
    Fields // 

    Field 1 : 
    title of the filde : <input type="text" name="f[0][0]" /> 
    type : <input type="text" name="f[0][1]" /> <!-- 1= text , 2= select , 3= textarea .. --> 
    default value : <textarea rows="8" cols="20" name="f[0][2]"> </textarea> <!-- if select type write value1::value2::value3 ... --> 



Field 2 : 
title of the filde : <input type="text" name="f[1][0]" /> 
type : <input type="text" name="f[1][1]" /> <!-- 1= text , 2= select , 3= textarea .. --> 
default value : <textarea rows="8" cols="20" name="f[1][2]"> </textarea> <!-- if select type write value1::value2::value3 ... --> 

Field 3 : 
title of the filde : <input type="text" name="f[2][0]" /> 
type : <input type="text" name="f[2][1]" /> <!-- 1= text , 2= select , 3= textarea .. --> 
default value : <textarea rows="8" cols="20" name="f[2][2]"> </textarea> <!-- if select type write value1::value2::value3 ... --> 

et je peux ajouter un certain nombre de champs ici ..

dans la base de données que je veux insérer comme ceci:

[nameOfBook|1|anyName :br: noOfPages|1|anyNo ] 

et dans l'autre chat comme celui-ci par exemple:

[colorOfcar | 2 | rouge :: noir :: vert: br: prix | 1 | n'importe quel prix]

une aide?

merci d'avance ..


@Justin Johnson

merci pour votre réponse, mais il ne marche pas. Travail Je dois utiliser $ var pour insérer des données toutes les données, mais j'utilise vous répondez comme ça

function addCustomRow($tableName) 
{ 

    $data = array(
     'name'   => $this->input->post('name'), 
     'fields'   => serialize($this->input->post('f[]')) 
     ); 

    $this->db->insert($tableName, $data); 
} 

et je reçois des données mysqyl comme ceci (b: 0;) !!

//

@Suku merci .. Je l'ai utilisé avant de demander, mais je ne savais pas comment .. Comment puis-je l'utiliser dans mon cas ici? ..

@ Alex

parce que je table nommée (catégories) et chaque chat a posséder des domaines tels que:

carsCat > 
    type : 
    color: 
    details: 

BooksCat > 
nameOfbook: 
writer: 
numberOfpage: 

et ainsi de suite .. Je trouve cette façon, la meilleure façon peut-être dans mon cas .. des suggestions?

Répondre

0

Je l'ai fait avec un petit truc :) Je viens d'ajouter une entrée heddin avec la valeur (: br :), et garder tous les noms d'entrées égal (f []) .. comme ceci:

HTML:

field out of the array : 
anotherField :<input type="text" name="name" /> 

Field 1 : 
title of the field : <input type="text" name="f[]" /> 
type : <input type="text" name="f[]" /> <!-- 1= text , 2= select , 3= textarea .. --> 
value : <textarea rows="8" cols="20" name="f[]"> </textarea> <!-- if select type write value1::value2::value3 ... --> 
<input type="hidden" name="f[]" value=":br:" /> 

Field 1 : 
title of the field : <input type="text" name="f[]" /> 
type : <input type="text" name="f[]" /> <!-- 1= text , 2= select , 3= textarea .. --> 
value : <textarea rows="8" cols="20" name="f[]"> </textarea> <!-- if select type write value1::value2::value3 ... --> 
<input type="hidden" name="f[]" value=":br:" /> 

PHP:

function addCustomRow($tableName) 
{ 
$arrF1 = $this->input->post('f'); 
$f = implode("|", $arrF1); 

$data = array(
    'name' => $this->input->post('name'), 
     'fields' => $f 
    ); 

$this->db->insert($tableName, $data); 

}

maintenant je reçois des données dans une base MySQL comme ceci:

titleOffield|type|value|:brr:|titleOffield|type|value|:brr: 

par exemple:

nameOfBook|1|writeTheName|:Br:|NoOfPages|1|value|:br:| 

Ensuite, je peux retourner les données de base de données MySQL facilement comme ceci: (j'utiliser Smarty!)

Sortie

{assign var=fieldsBr value=":br:|"|explode:$r.values} <!-- exploade :br: --> 

    {foreach from=$fieldsBr item=ff} 
    {assign var=f value="|"|explode:$ff} <!-- exploade | --> 
    {$f[0]} : <b>{$f[2]}</b> <br /> <!-- title of field : the value <br /> --> 
    {/foreach} 

** Notez que j'utilise 2 exploser ici pour un (: br: |) et l'autre pour (|) ..

Merci quelque manière que ce votre aide ..

Ahmad ..

3

Pour stocker un tableau dans un champ, il suffit de serialize. Lorsque vous avez besoin d'accéder au tableau de la base de données unserialize il.

+0

+1 - juste ce que je vais suggérer :) – jaywon

+0

serialize et unserialize fera l'affaire et que Justin Johnson a mentionné aussi qu'il est bon aussi normaliser les –

+0

merci .. Je l'ai utilisé avant de demander mais je ne savais pas comment .. Comment puis-je l'utiliser dans mon cas ici? –

3

Tout d'abord, je suggère que vous essayez de normalize votre schéma de table un peu plus. Stocker plusieurs valeurs multiples dans un champ va causer beaucoup de maux de tête. Peut-être, quelque chose comme ceci:

alt text http://i50.tinypic.com/2heiwjb.jpg

Dans ce schéma, la table contact_information est associée à la table person en stockant un identifiant (référence étrangère) à une ligne de personne. De cette façon, vous pouvez avoir autant d'entrées de contact pour une personne donnée, sans avoir à entasser un tableau de données dans un seul champ. Quoi qu'il en soit, pour résoudre votre problème tel quel, essayez de sérialiser les données avant de les insérer dans le BD.

function addCustomRow($tableName) {  
    $data = array(
     'anotherField' => $this->input->post('anotherField'), 
     'field'  => serialize($this->input->post('f[]')) 
    ); 

    $this->db->insert($tableName, $data); 
} 

Modifier: mis à jour pour adresser un commentaire.

+0

merci pour votre réponse .. hmm mais il dosnt travail .. je dois utiliser $ var données pour insérer toutes les données, mais j'utilise vous répondez comme cette addCustomRow fonction (tableName $) { $ data = array ( \t 'nom' \t \t \t => $ this-> entrées-> montant ('nom'), \t 'champs' \t \t \t => serialize ($ this-> entrées-> après ('f [] ')) \t \t); $ this-> db-> insert ($ tableName, $ data); } et j'obtiens des données mysqyl comme ceci (b: 0;) !! –

+0

Désolé à ce sujet, copié et collé au mauvais endroit. J'ai mis à jour ma réponse avec le code corrigé. –

+0

merci .. J'utiliser votre nouveau code, mais aussi dit mal ( Une erreur de base de données Apparu Numéro d'erreur: 1054 Unknown column 'anotherField' dans 'liste des champs' INSERT INTO 'cats' (' anotherField ',' field') VALEURS (0, 'b: 0;') ) –

0

VALEURS ARRAY INSERTION DE FORME DANS LA BASE DE DONNÉES

function addRecord($Table){ 
     global $connection; // database connection 
     extract($Table); 

     $entry_date = date('Y-m-d'); 

     for($i=0; $i< count($project_id); $i++) 
     { 

      $sql="INSERT INTO expenses(type_id,project_id,amount,exp_date,entry_date,comments,entry_name) 
       values('$type_id[$i]','$project_id[$i]','$amount[$i]','$exp_date[$i]','$entry_date','$comments[$i]','$_SESSION[emp_name]')"; 

      $result=mysqli_query($conn,$sql); 
     } 
Questions connexes