我想使用PHP在mysql数据库的一个字段中插入一个数组..
这很好用:
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(我使用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);
}
?>
我在mysql中获取数据
fax|email|phone
但是......
我的问题是..我想在同一个领域中有很多数组..就像这样:
fax|email|phone :br: fax|email|phone :br: fax|email|phone ..
我试过这样的事情:
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);
}
?>
但它说错了[严重性:通知消息:数组到字符串转换] 我在像这样的mysql中获取数据
array :br: array
编辑:
我想这样做,因为我有一个分类表.. 每只猫都有自己的细节(字段)..所以当我添加新猫时,我只是做一些像这样的事情
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 ... -->
我可以在这里添加任意数量的字段..
在数据库中我想要像这样插入数据:
[nameOfBook|1|anyName :br: noOfPages|1|anyNo ]
和另一只猫这样的例如:
[colorOfcar | 2 | red :: black :: green:br:price | 1 | anyPrice]
任何帮助?
提前感谢..
@Justin Johnson
感谢您的回答,但它不起作用。 我必须使用$ data var来插入所有数据,但我用你这样回答
function addCustomRow($tableName)
{
$data = array(
'name' => $this->input->post('name'),
'fields' => serialize($this->input->post('f[]'))
);
$this->db->insert($tableName, $data);
}
我得到像这样的数据mysqyl(b:0;)!!
//
@Suku谢谢..我在问之前已经使用过它但是我不知道怎么样......我怎么能在我的情况下使用它呢? ..
@Alex
因为我有一个名为(类别)的表,每只猫都有自己的字段,如:
carsCat >
type :
color:
details:
BooksCat >
nameOfbook:
writer:
numberOfpage:
等等.. 我发现这种方式可能是我最好的方式..任何建议?
答案 0 :(得分:3)
要将数组存储在一个字段中,只需serialize即可。当您需要从数据库unserialize访问该数组时。
答案 1 :(得分:3)
首先,我建议你尝试normalize你的桌面计划多一点。在一个字段中存储多个,多个值将导致许多令人头疼的问题。也许,这样的事情:
alt text http://i50.tinypic.com/2heiwjb.jpg
在此方案中,contact_information
表通过将ID(外部引用)存储到人员行而与person
表相关联。这样,您可以为任何给定的人拥有尽可能多的联系人条目,而无需将数据数组塞入一个字段。
无论如何,为了解决您的问题,请在将数据插入数据库之前尝试序列化数据。
function addCustomRow($tableName) {
$data = array(
'anotherField' => $this->input->post('anotherField'),
'field' => serialize($this->input->post('f[]'))
);
$this->db->insert($tableName, $data);
}
编辑:已更新以解决评论。
答案 2 :(得分:2)
您可能需要使用serialize()和unserialize()函数,如下所示:
$string_from_array = serialize($array);
当你需要恢复数组时:
$array= unserialize($string_from_array);
有关详情,请参阅此处:http://www.wpfasthelp.com/insert-php-array-into-mysql-database-table-row-field.htm
答案 3 :(得分:0)
我用小技巧做到了:) 我只是添加一个heddin输入值(:br :),并保持所有输入的名称相等(f [])..像这样:
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);
}
现在我在mysql中获取数据:
titleOffield|type|value|:brr:|titleOffield|type|value|:brr:
例如:
nameOfBook|1|writeTheName|:Br:|NoOfPages|1|value|:br:|
然后我可以像这样轻松地从mysql数据库返回数据: (我使用Smarty!)
<强>输出强>
{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}
**注意我在这里使用2爆炸一个用于(:br:|)而另一个用于(|)..
谢谢你的帮助..
艾哈迈德......
答案 4 :(得分:0)
将表格中的阵列值插入数据库
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);
}