Jump to content

[Resolvido] Separar inputs por grupos e inserir cada grupo numa linha da BD


bonzinho
 Share

Recommended Posts

Boas pessoal,

Estou a trabalhar com codeigniter e neste momento tenho um sistema de perguntas dinâmicas, ou seja, o meu formulário é construído através de perguntas existentes na base de dados, essas perguntas têm um tipo, podem ser chekbox, radio, texto data etc.

Até aqui tudo bem já está a ser escrito o formulário como eu quero, no entanto ao fazer submit necessito separar essas perguntas por grupos, ou seja vou ter de inserir em cada linha o seguinte:

iddocliente

idPergunta

idRespostaPre (se for checkbox) - respostas predefinidas

Resposta (se for de resposta de texto)

Privacidade (0 privada | 1 publica)

verificada (0 não verificada | 1 verificada)

para isso pensei em dar a cada input o name do campo da base de dados terminando com o id da pergunta a que se refere, segue o array que fica contruido com o que fiz

array(22) { ["privacidade-16"]=> string(1) "1" ["idPergunta-16"]=> string(2) "16" ["resposta-16"]=> string(14) "Vitor Bonzinho" ["privacidade-17"]=> string(1) "1" ["idPergunta-17"]=> string(2) "17" ["resposta-17"]=> string(10) "2015-10-10" ["privacidade-18"]=> string(1) "1" ["idPergunta-18"]=> string(2) "18" ["idRespostaPre-18"]=> string(2) "19" ["privacidade-19"]=> string(1) "1" ["idPergunta-19"]=> string(2) "19" ["resposta-19"]=> string(16) "Rua do mormugão" ["privacidade-20"]=> string(1) "1" ["idPergunta-20"]=> string(2) "20" ["idRespostaPre-20"]=> string(2) "38" ["privacidade-21"]=> string(1) "1" ["idPergunta-21"]=> string(2) "21" ["resposta-21"]=> string(8) "4465-213" ["privacidade-30"]=> string(1) "1" ["verificada-30"]=> string(1) "1" ["idPergunta-30"]=> string(2) "30" ["idRespostaPre-30"]=> array(2) { [0]=> string(3) "186" [1]=> string(3) "188" } }

Agora necessitava dividir este array em grupos ou seja:

Grupo 1: ["privacidade-16"]=> string(1) "1" ["idPergunta-16"]=> string(2) "16" ["resposta-16"]=> string(14) "Vitor Bonzinho"

inserir isto na base de dados

Grupo 2: ["privacidade-17"]=> string(1) "1" ["idPergunta-17"]=> string(2) "17" ["resposta-17"]=> string(10) "2015-10-10"

inserir na base de dados

Grupo 3: ["privacidade-18"]=> string(1) "1" ["idPergunta-18"]=> string(2) "18" ["idRespostaPre-18"]=> string(2) "19"

Inserir na base de dados

por ai em diante. Alguém me pode dar uma luz de como fazer? tendo em conta que a terminação dos names dos inputs é que definiem o grupo que quero separar?

Se necessitarem de mais alguma informação avisem que eu coloco

Obrigado a todos desde já

Link to comment
Share on other sites

HappyHippyHippo
$post;

$groups = [];
foreach ($post as $key => $value) {
   $group_id = $substr($key, strpos('-', $key) + 1);
   if (!array_key_exists($group_id, $groups))
       $groups[$group_id] = [];
   $groups[$group_id][$key] = $value;
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Em 27/10/2015 às 13:27, HappyHippyHippo disse:

$post;

$groups = [];
foreach ($post as $key => $value) {
$group_id = $substr($key, strpos('-', $key) + 1);
if (!array_key_exists($group_id, $groups))
	$groups[$group_id] = [];
$groups[$group_id][$key] = $value;
}
 

Desde já muito obrigado pela disponibilidade, no entanto não estou a conseguir agrupar o array com a info que necessito

Está a criar um array assim:

string(1) "1" string(2) "16" string(14) "Vitor Bonzinho" string(1) "1" string(2) "17" string(10) "2015-10-21" string(1) "1" string(2) "18" string(2) "19" string(1) "1" string(2) "19" string(13) "Rua de avilho" string(1) "1" string(2) "20" string(2) "22" string(1) "1" string(2) "21" string(8) "4465-213" string(1) "1" string(1) "1" string(2) "30" array(3) { [0]=> string(3) "187" [1]=> string(3) "188" [2]=> string(3) "189" }
necessitava que o array fosse assim:

["privacidade"]=> string(1) "1" ["idPergunta"]=> string(2) "16" ["resposta"]=> string(14) "Vitor Bonzinho"

["privacidade"]=> string(1) "1" ["idPergunta"]=> string(2) "17" ["resposta"]=> string(10) "2015-10-10"

["privacidade"]=> string(1) "1" ["idPergunta"]=> string(2) "18" ["idRespostaPre"]=> string(2) "19"

ou seja acho que precisava que ele formasse um array com vários arrays la dentro mas em que a key mante-se o nome sem o '-idPergunta' para fazer o insert na base de dados que tem exatamente o nome sem o tal '-idPergunta', isto porque é possivel adicionar novas perguntas

Desculpem se estou a ser chato ou se não entendi o código a cima.

PS: no código a cima no $substr retirei o $ pois acho que seria a função que queria chamar

obrigado

Link to comment
Share on other sites

HappyHippyHippo
<?php

$post = ["privacidade-16"   => "1",
        "idPergunta-16"    => "16",
        "resposta-16"      => "Vitor Bonzinho",
        "privacidade-17"   => "1",
        "idPergunta-17"    => "17",
        "resposta-17"      => "2015-10-10",
        "privacidade-18"   => "1",
        "idPergunta-18"    => "18",
        "idRespostaPre-18" => "19",
        "privacidade-19"   => "1",
        "idPergunta-19"    => "19",
        "resposta-19"      => "Rua do mormugão",
        "privacidade-20"   => "1",
        "idPergunta-20"    => "20",
        "idRespostaPre-20" => "38",
        "privacidade-21"   => "1",
        "idPergunta-21"    => "21",
        "resposta-21"      => "4465-213",
        "privacidade-30"   => "1",
        "verificada-30"    => "1",
        "idPergunta-30"    => "30",
        "idRespostaPre-30" => [0 => "186", 1 => "188" ]];

$groups = [];
foreach ($post as $key => $value) {
   list($field, $id) = explode('-', $key);
   if (!array_key_exists($id, $groups))
       $groups[$id] = [];
   $groups[$id][$field] = $value;
}

echo '<pre>';
print_r($groups);
echo '</pre>';
  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

<?php

$post = ["privacidade-16"   => "1",
	 "idPergunta-16"	=> "16",
	 "resposta-16"	  => "Vitor Bonzinho",
	 "privacidade-17"   => "1",
	 "idPergunta-17"	=> "17",
	 "resposta-17"	  => "2015-10-10",
	 "privacidade-18"   => "1",
	 "idPergunta-18"	=> "18",
	 "idRespostaPre-18" => "19",
	 "privacidade-19"   => "1",
	 "idPergunta-19"	=> "19",
	 "resposta-19"	  => "Rua do mormugão",
	 "privacidade-20"   => "1",
	 "idPergunta-20"	=> "20",
	 "idRespostaPre-20" => "38",
	 "privacidade-21"   => "1",
	 "idPergunta-21"	=> "21",
	 "resposta-21"	  => "4465-213",
	 "privacidade-30"   => "1",
	 "verificada-30"	=> "1",
	 "idPergunta-30"	=> "30",
	 "idRespostaPre-30" => [0 => "186", 1 => "188" ]];

$groups = [];
foreach ($post as $key => $value) {
list($field, $id) = explode('-', $key);
if (!array_key_exists($id, $groups))
	$groups[$id] = [];
$groups[$id][$field] = $value;
}

echo '<pre>';
print_r($groups);
echo '</pre>';

Obrigado era mesmo isso 😄 mil obrigados 😄

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.