OFF - Inserir array no BD mysql

1,703 views
Skip to first unread message

Censura

unread,
Aug 12, 2009, 8:01:54 AM8/12/09
to list...@googlegroups.com
Bom dia galera,
estou querendo inserir um array dentro do banco de dados mysql só que os valores não inseridos no banco, só aparece o nome ARRAY.

Eu tenho um array com esses checkbox e quando a pessoa selecionar mais de um checkbox ele inserir esses dados na coluna obras da tabela.

     <b>Obras:</b>
     <input type='checkbox' name='obra[]' value='Contrução,'>Construção
     <input type='checkbox' name='obra[]' value='Reforma,'>Reforma
     <input type='checkbox' name='obra[]' value='Ampliação,'>Ampliação
     <input type='checkbox' name='obra[]' value='Conclusão.'>Conclusão

Estou inserindo no banco assim:

 $result=mysql_query(" INSERT INTO tb_cadastro_processo(objeto_custeio) VALUES ( '$obra' ) " )


Alguem sabe um jeito deu fazer isso funcionar?
Valeu..

Bruno Oliveira

unread,
Aug 12, 2009, 8:04:43 AM8/12/09
to list...@googlegroups.com
que tal usar um foreach pra inserir um de cada vez?


 
2009/8/12 Censura <cen...@gmail.com>
--
Bruno Oliveira
Analista de Sistemas
+55(85) 88182152
gtalk: brunno...@gmail.com
msn: brunn...@hotmail.com
skype: brunno_oli

Beatriz KMS

unread,
Aug 12, 2009, 8:34:33 AM8/12/09
to list...@googlegroups.com
Pela sua duvida vc parece ser iniciante, portanto te darei uma dica.
Aprenda a debugar seu codigo, para isso use var_dump() ou print_r().
Fazendo o var_dump de um array, vc terá toda a estrutura da sua
variavel, mostrando todos os seus indices.
Quando vc faz um echo de um variavel array sem especificar o indice,
vc vai ter "array" como resposta.


2009/8/12 Censura <cen...@gmail.com>:

Igor Escobar

unread,
Aug 12, 2009, 8:28:09 AM8/12/09
to list...@googlegroups.com
Exemplo:
<?php
foreach($_POST['obras'] as $obra):
$result=mysql_query(" INSERT INTO tb_cadastro_processo(objeto_custeio) VALUES ( '{$obra}' ) " );
endforeach;
?>



Regards,
Igor Escobar
Systems Analyst & Interface Designer

+ http://blog.igorescobar.com
+ http://www.igorescobar.com
+ @igorescobar (twitter)





2009/8/12 Bruno Oliveira <brunno...@gmail.com>

Censura

unread,
Aug 12, 2009, 4:49:56 PM8/12/09
to list...@googlegroups.com
O problema que quando eu vou inserir os dados no banco, eu insiro mais de uma informação, então se eu fizer assim vai duplicar os dados da tabela.

Dei uma pesquisada aqui no google e achei isso aqui:

if(sizeof($_POST["obra"]) != 0){
   
foreach($_POST["obra"] as $obra){
     
if($i == (sizeof($_POST["obra"])-1) ){
         $obra
.= $obra;
     
}else{
         $obra
.= $obra.",";
     
}
      $i
++;
   
}
}

 $result=mysql_query(" INSERT INTO tb_cadastro_processo(objeto_custeio) VALUES ( '$obra' ) " )


Eu debuguei, o problema agora é que só esta inserindo o ultimo valor e duplicado ainda.

Quando eu dou um print_r($obra) antes dessa função,ai ele aparece os valores certinhos do array, mas depois quando eu dou um echo "$obra" ele só repete o ultimo valor.

Na verdade o que eu queria era pegar os valores do checkbox, colocalos numa string, e depois inserir essa string no banco, pq ai não daria problema.

Entenderam?
Valeu pela ajuda galera.

Endel Guimarães Silva

unread,
Aug 12, 2009, 4:57:32 PM8/12/09
to list...@googlegroups.com
faz algo assim, então

$str = "INSERT INTO tabela VALUES('";
$str .= implode("'),('",$array);
$str .= "')";

2009/8/12 Censura <cen...@gmail.com>



--
Endel Guimarães Silva
Eccen - Excelência em Tecnologia

Fone +55 19 3231-2988 - Fax + 55 19 3231-2914
endel.g...@eccen.com.br
www.eccen.com.br

Felipe Nascimento de Moura

unread,
Aug 12, 2009, 5:01:35 PM8/12/09
to list...@googlegroups.com
o q tu quer fazer, é jogar uma string enorme no banco, com os dados da array?
se é isso, joga um json lá ... encoda o json, salva no banco .. e quando for buscar no banco, decoda o valor, e ele ja se torna numa array de novo ...

mas, nao é mais interessante migrar isto pra outra tabela ? tipo, coloca nela a foreign key apontando pra essa ai, e mais os dados todos da tal da array... acho q é uma alternativa, tambem.

Att.


2009/8/12 Censura <cen...@gmail.com>



--
Felipe N. de Moura
Desenvolvimento Web

http://felipenascimento.org
http://thewebmind.org
---------------------------------
Fazendo da web um lugar melhor pra se viver.
Making the web a better place to live

Leonardo Metrô-DF

unread,
Aug 13, 2009, 7:49:12 AM8/13/09
to LISTA PHP

$obraDB = serialize($obra);
$result=mysql_query(" INSERT INTO tb_cadastro_processo(objeto_custeio)
VALUES ( '$obraDB' ) " )

E quando for acessar os dados, depois do fetch:
$obra = unserialize($dados['objeto_custeio'])

Pronto. Você vai colocar o array do DB, e depois vai pega-lo de volta.


Essa é uma solução para o seu código, mas não é nem um pouco elegante,
afinal você vai gastar muito espaço e usar um campo text
desnecessariamente. O ideal seria mesmo fazer uma tabela com as opções
e relacionar, conforme sugestão dos colegas da lista.

[]s




On 12 ago, 18:01, Felipe Nascimento de Moura <felipenmo...@gmail.com>
wrote:
> o q tu quer fazer, é jogar uma string enorme no banco, com os dados da
> array?
> se é isso, joga um json lá ... encoda o json, salva no banco .. e quando for
> buscar no banco, decoda o valor, e ele ja se torna numa array de novo ...
>
> mas, nao é mais interessante migrar isto pra outra tabela ? tipo, coloca
> nela a foreign key apontando pra essa ai, e mais os dados todos da tal da
> array... acho q é uma alternativa, tambem.
>
> Att.
>
> 2009/8/12 Censura <cens...@gmail.com>
>
>
>
> > O problema que quando eu vou inserir os dados no banco, eu insiro mais de
> > uma informação, então se eu fizer assim vai duplicar os dados da tabela.
>
> > Dei uma pesquisada aqui no google e achei isso aqui:
>
> > if(sizeof($_POST["obra"]) != 0){
>
> > foreach($_POST["obra"] as $obra){
>
> > if($i == (sizeof($_POST["obra"])-1) ){
>
> > $obra .= $obra;
> > }else{
>
> > $obra .= $obra.",";
> > }
>
> > $i++;
> > }
> > }
>
> > $result=mysql_query(" INSERT INTO tb_cadastro_processo(objeto_custeio)
> > VALUES ( '$obra' ) " )
>
> > Eu debuguei, o problema agora é que só esta inserindo o ultimo valor e
> > duplicado ainda.
>
> > Quando eu dou um print_r($obra) antes dessa função,ai ele aparece os
> > valores certinhos do array, mas depois quando eu dou um echo "$obra" ele só
> > repete o ultimo valor.
>
> > Na verdade o que eu queria era pegar os valores do checkbox, colocalos numa
> > string, e depois inserir essa string no banco, pq ai não daria problema.
>
> > Entenderam?
> > Valeu pela ajuda galera.
>
> --
> Felipe N. de Moura
> Desenvolvimento Web
>
> http://felipenascimento.orghttp://thewebmind.org

Censura

unread,
Aug 13, 2009, 8:52:45 AM8/13/09
to list...@googlegroups.com
Leonardo, quando eu faço o serialize() ele inseri os dados no banco assim: a:3:{i:0;s:10:"Contrução,";i:1;s:8:"Reforma,";i:2;s:10:"Ampliação,";}

Mas quando eu vou pegalo no banco e mando mostrar os dados, usando o unserlialize ele aparece: array

Como que faço pra mostrar ele da forma correta?

To fazendo assim:

while ($linha=mysql_fetch_array($resultado))
{
     $Ob_obra = unserialize($linha['objeto_obra']);
}

Na hora de mostrar no formulario to fazendo assim:

<td width="50%"><b>Objeto Obras:</b>&nbsp;<? echo "$Ob_obra"?></td>


2009/8/13 Leonardo Metrô-DF <leo...@gmail.com>

Michel Wilhelm

unread,
Aug 13, 2009, 9:00:29 AM8/13/09
to list...@googlegroups.com
Em 13/8/2009 09:52, Censura escreveu:
Leonardo, quando eu faço o serialize() ele inseri os dados no banco assim: a:3:{i:0;s:10:"Contrução,";i:1;s:8:"Reforma,";i:2;s:10:"Ampliação,";}

Mas quando eu vou pegalo no banco e mando mostrar os dados, usando o unserlialize ele aparece: array

Como que faço pra mostrar ele da forma correta?

To fazendo assim:

while ($linha=mysql_fetch_array($resultado))
{
     $Ob_obra = unserialize($linha['objeto_obra']);
}

Na hora de mostrar no formulario to fazendo assim:

<td width="50%"><b>Objeto Obras:</b>&nbsp;<? echo "$Ob_obra"?></td>

Bom dia!

<td width="50%"><b>Objeto Obras:</b>&nbsp;<? echo "$Ob_obra['0']"?></td>

Se vc inserir como um array, deverá utilizar o unserialize para transformar o texto do banco novamente em array, e utilizar ele com o um array somente.
No caso acima, apenas selecione  o índice desejado para retornar o valor. No caso o indice ['0'].

:)
-- 
Michel Wilhelm <michel...@gmail.com> / <mic...@surrealartweb.com.br>
-----------------------------------------------------------------------------------
URL      : http://www.surrealartweb.com.br/
Twitter  : http://twitter.com/surrealartweb
Orkut    : http://www.orkut.com.br/Main#Profile.aspx?rl=mp&uid=15738892741509801110
Wakoopa  : http://www.wakoopa.com/michelwilhelm
Skype    : michel.wilhelm
Telefone : +55 (47) 9997-6959
Balneário Camboriú / SC / Brasil
-----------------------------------------------------------------------------------
Only Jesus saves!
-----------------------------------------------------------------------------------

Censura

unread,
Aug 13, 2009, 9:05:28 AM8/13/09
to list...@googlegroups.com
Mas se eu retornar só o indice zero, ele só vai trazer o primeiro valor do array. Eu preciso de todos, como que faço isso?

2009/8/13 Michel Wilhelm <michel...@gmail.com>

Censura

unread,
Aug 13, 2009, 9:13:31 AM8/13/09
to list...@googlegroups.com
Eu tive que fazer assim:
echo "$Ob_obra[0]"; echo "$Ob_obra[1]";echo "$Ob_obra[2]"; echo "$Ob_obra[3]";

pq só usando o $obra ele não tava retornando os valores.

2009/8/13 Censura <cen...@gmail.com>

Beatriz KMS

unread,
Aug 13, 2009, 9:23:45 AM8/13/09
to list...@googlegroups.com
Eu já tinha falado que imprimir o array só assim $array nao funciona!!! Precisa dos indices como vc fez agora.... echo $array[1]

2009/8/13 Censura <cen...@gmail.com>

Censura

unread,
Aug 13, 2009, 3:12:16 PM8/13/09
to list...@googlegroups.com
Valeu galera, consegui fazer aqui.

2009/8/13 Beatriz KMS <beatr...@gmail.com>

Lucas Zerma

unread,
Aug 14, 2009, 8:39:26 AM8/14/09
to LISTA PHP
da um print_r($obra); aeee!


On 13 ago, 16:12, Censura <cens...@gmail.com> wrote:
> Valeu galera, consegui fazer aqui.
>
> 2009/8/13 Beatriz KMS <beatriz...@gmail.com>
>
>
>
> > Eu já tinha falado que imprimir o array só assim $array nao funciona!!!
> > Precisa dos indices como vc fez agora.... echo $array[1]
>
> > 2009/8/13 Censura <cens...@gmail.com>
>
> >> Eu tive que fazer assim:
> >> echo "$Ob_obra[0]"; echo "$Ob_obra[1]";echo "$Ob_obra[2]"; echo
> >> "$Ob_obra[3]";
>
> >> pq só usando o $obra ele não tava retornando os valores.
>
> >> 2009/8/13 Censura <cens...@gmail.com>
>
> >> Mas se eu retornar só o indice zero, ele só vai trazer o primeiro valor do
> >>> array. Eu preciso de todos, como que faço isso?
>
> >>> 2009/8/13 Michel Wilhelm <michelwilh...@gmail.com>
>
> >>>  Em 13/8/2009 09:52, Censura escreveu:
>
> >>>> Leonardo, quando eu faço o serialize() ele inseri os dados no banco
> >>>> assim: a:3:{i:0;s:10:"Contrução,";i:1;s:8:"Reforma,";i:2;s:10:"Ampliação,";}
>
> >>>> Mas quando eu vou pegalo no banco e mando mostrar os dados, usando o
> >>>> unserlialize ele aparece: array
>
> >>>> Como que faço pra mostrar ele da forma correta?
>
> >>>> To fazendo assim:
>
> >>>> while ($linha=mysql_fetch_array($resultado))
> >>>> {
> >>>>      $Ob_obra = unserialize($linha['objeto_obra']);
> >>>> }
>
> >>>> Na hora de mostrar no formulario to fazendo assim:
>
> >>>> <td width="50%"><b>Objeto Obras:</b>&nbsp;<? echo "$Ob_obra"?></td>
>
> >>>>  Bom dia!
>
> >>>> <td width="50%"><b>Objeto Obras:</b>&nbsp;<? echo "$Ob_obra['0']"?></td>
>
> >>>> Se vc inserir como um array, deverá utilizar o unserialize para
> >>>> transformar o texto do banco novamente em array, e utilizar ele com o um
> >>>> array somente.
> >>>> No caso acima, apenas selecione  o índice desejado para retornar o
> >>>> valor. No caso o indice ['0'].
>
> >>>> :)
>
> >>>> 2009/8/13 Leonardo Metrô-DF <leo....@gmail.com>
> >>>> Michel Wilhelm <michelwilh...@gmail.com> <michelwilh...@gmail.com> / <mic...@surrealartweb.com.br> <mic...@surrealartweb.com.br>
> >>>> --------------------------------------------------------------------------- --------
Reply all
Reply to author
Forward
0 new messages