Mysql ONE alanda dizi ekleme

3 Cevap php

PHP ile MySQL veritabanı ONE alanında bir dizi eklemek istediğiniz ..

Bu işi gayet:

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 (Ben CodeIgniter çerçeve kullanın):

<?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);
    }
?>

ve ben böyle mysql veri almak

fax|email|phone

BUT ..

Benim soru bu gibi .. aynı alanda birçok dizileri istediğiniz olduğunu ..:

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

Ben böyle bir şey denedim:

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);
    }
?>

but it says Wrong [ Severity: Notice Message: Array to string conversion ] ve ben böyle mysql veri almak

array :br: array  

EDIT :

I want to do that like this way because I have a Categories Table .. and each cat has own details ( fields ) .. so when I add new cat I just do some thing like this

       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  ... -->

ve ben burada herhangi bir sayıda alan ekleyebilirsiniz ..

veritabanında böyle eklenen veri istiyorum:

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

ve, örneğin, bu gibi diğer kedi:

[ColorOfcar | 2 | red :: siyah :: green: br: fiyat | 1 | anyPrice]

herhangi bir yardım?

şimdiden teşekkürler ..


@ Justin Johnson

thanks for your answer, but it doesnt work. I have to use $data var to insert all the data but I use you answer like this

function addCustomRow($tableName)
{

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

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

ve ben bu gibi veri mysqyl olsun (b: 0;)!

/ /

@ Suku teşekkürler .. ben sormadan önce onu kullanmış ama nasıl .. Nasıl burada benim durumumda kullanabilirsiniz bilmiyordum? ..

@ Alex

: I (kategori) ve her kedi adlı tablo gibi alanlar kendi vardır çünkü

carsCat >
  type :
  color:
  details:

BooksCat >
nameOfbook:
writer:
numberOfpage:

and so on .. I find this way the Best way maybe in my case .. any suggestions?

3 Cevap

I did it with a small trick :) I just add one heddin input with value (:br:) , and keep all names of inputs equal (f[]) .. like this :

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);

}

şimdi böyle mysql veri almak:

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

örneğin:

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

Then I can return the data from mysql database easily like this : (I use Smarty ! )

Output

  {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}

** Ben 2 için buraya One patlayabilir kullanımına dikkat (: br: |) ve diğeri için (|) ..

Yardımlarınız için teşekkürler herhangi bir şekilde ..

Ahmad ..

Birincisi ve en önemlisi, ben seni normalize masa düzeni biraz daha denemek öneririz. Birden fazla saklanması, bir alanda birden çok değer pek çok baş ağrısı neden oluyor. Belki de böyle bir şey:

alt text

Bu şemada, contact_information tablo bir kişinin arka arkaya bir ID (yabancı referans) depolayarak person tablo ile ilişkilidir. Bu şekilde, tek bir alanda veri dizisini tıkmak zorunda kalmadan, herhangi bir kişi için birçok iletişim kayıtları olabilir.


Her neyse, o kadar sorunu çözmek için, DB takmadan önce verilerini seri hale deneyin.

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

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

Düzenleme: yorum adres güncellendi.

, Bir alanda bir dizi depolamak için sadece serialize bunu. Eğer veritabanında unserialize ondan dizi erişmek için gerektiğinde.