Checkbox + INSERT

Preciso de um HELP para coletar os campos de “<input type = checkbox”. Então, inicialmente defini as informações referentes ao formlário da seguinte maneira:

<li><input type=”checkbox” name=”areaint[]” value=”Monitoria”>Atuar como monitor(a)</li>
<li><input type=”checkbox” name=”areaint[]” value=”Economia Solidaria”>Conhecer a Economia Solidária</li>
<li><input type=”checkbox” name=”areaint[]” value=”Fazer curso”>Fazer curso de formação</li>
<li><input type=”checkbox” name=”areaint[]” value=”Pesquisar”>Pesquisar</li>
<li><input type=”checkbox” name=”areaint[]” value=”Outros”>Outros</li>
E no meu código em PHP, assim:

$nome = $_POST[“nome”];
$email = $_POST[“email”];
$telefone = $_POST[“telefone”];
$areatuacao = $_POST[“areatuacao”];
$areaint = $_POST[“areaint”];
$mensagem = $_POST[“mensagem”];

$query = “INSERT INTO `secaoparticipe`(`id_user`, `nome`, `email`, `telefone`, `areatuacao`, `areaint`, `mensagem`) VALUES (NULL , ‘”.$nome.”‘, ‘”.$email.”‘, ‘”.$telefone.”‘, ‘”.$areatuacao.”‘, ‘”.$areaint.”‘, ‘”.$mensagem.”‘)”;
$resultado = mysqli_query($conexao, $query);

foreach($_POST[“areaint”] as $value){

echo $value . ‘<br>’;

}
(*) A parte acima em vermelho está imprimindo as escolhas que os usuários do site fizeram, mas quando eu acesso o banco de dados nada foi gravado. Eu sei que devo fazer um INSERT, mas não sei como esquematizá-lo. Inclusive, vasculhei a “net inteira” e não encontro o que preciso. Alguém pode contribuir com os seus conhecimentos? http://forum.imaster…tyle_emoticons/default/natal_biggrin.gif

P.S.: Afinal, como montar o INSERT de cada valor do meu array CHECKBOX = areaint[]?
Editado por Matias Rezende, 14 dezembro 2009 – 17:10 .
Adição do BBCode PHP
0
Publicidade

#2 [Resolvido] Checkbox + INSERT: post #2 William Bruno
Desenvolvedor NodeJS

Moderadores Globais

27.253 posts
Postado 14 dezembro 2009 – 16:10
Como estao as tuas tabelas no banco de dados ?
O mais correto, era você ter uma outra tabela para relacionar de 1:N

chamada, por exemplo:
secaoparticipe_areaint

nela, você guarda o id do usuario, e as areas de interesse dele.
Fazendo um INSERT de cada linha para cada check marcado.

A tua duvida nao tem nada de Javascript.. pois mesmo, se você quiser guardar todas as areas de interesse num mesmo campo, bastaria usar:

implode()
http://www.php.net/implode

Topico Movido:
Javascript / DHTML http://forum.imaster…tyle_emoticons/default/seta.gif PHP
0
#3 [Resolvido] Checkbox + INSERT: post #3 Mailahn

Members

14 posts
Postado 15 dezembro 2009 – 09:05
William, mas eu NÃO disse que a minha dúvida era sobre javascript. Ok! A minha tabela no banco de dados ´a seguinte:

CREATE TABLE secaoparticipe (id_user int (10) NOT NULL AUTO_INCREMENT,
nome varchar(50) NOT NULL, email varchar(40) NOT NULL,
telefone varchar(15) NOT NULL,
areatuacao enum (‘Ciencias Agrarias’, ‘Ciencias da Saude’, ‘Ciencias Sociais’, ‘Contabeis’, ‘Direito’, ‘Engenharias’, ‘Informatica’) NOT NULL,
areaint set (‘Monitoria’, ‘Economia Solidaria’, ‘Fazer curso’, ‘Pesquisar’, ‘Outros’) NOT NULL,
mensagem text NOT NULL,
primary key(id_user));
Então, eu utilizei o tipo de dado SET para representar as possíveis escolhas dos usuários. Em meu primeiro post, mostrei a função FOREACH(que imprime as opções marcadas), mas não estou gravando nada no BD. Tem que haver um jeito de fazer o INSERT!!

(*) Não quero utilizar duas tabelas! Eu consigo capturar as informações do meu formulário, menos os valores do checkbox porqu eu NAO SEI como fazê-lo!!!
Editado por William Bruno, 15 dezembro 2009 – 09:23 .
trocar font por code
0
#4 [Resolvido] Checkbox + INSERT: post #4 William Bruno
Desenvolvedor NodeJS

Moderadores Globais

27.253 posts
Postado 15 dezembro 2009 – 09:21
Com essa modelagem:
areaint set (‘Monitoria’, ‘Economia Solidaria’, ‘Fazer curso’, ‘Pesquisar’, ‘Outros’) você não vai conseguir fazer.

É que você postou no fórum de Javascript, por isso comentei..e então movi o tópico para cá. (php)
o SET só vai te permitir escolher UMA dessas opções, como você quer poder inserir várias, sugiro trabalhar com outra tabela, é o mais correto.

Na gambiarra, dá pra você fazer esse campo ser do tipo: VARCHAR, e inserir os valores separados por virgula, como eu te disse, apenas usando o implode()
0
#5 [Resolvido] Checkbox + INSERT: post #5 Mailahn

Members

14 posts
Postado 15 dezembro 2009 – 10:33
Estás enganado… o tipo ENUM é que captura apenas um valor. Ok, vou estudar sobre as tuas considerações. Valeu guri!
0
#6 [Resolvido] Checkbox + INSERT: post #6 William Bruno
Desenvolvedor NodeJS

Moderadores Globais

27.253 posts
Postado 15 dezembro 2009 – 11:04
Tá, então é isso mesmo.. faça um implode.

$areas = implode( ‘,’ $_POST[‘areaint’] );
$sql = “INSERT INTO `secaoparticipe` (`areaint`) VALUES( ‘{$areas}’ )”;é que nunca trabalhei com SET
0
#7 [Resolvido] Checkbox + INSERT: post #7 Lesfar Inmors

Members

7 posts
Postado 15 dezembro 2009 – 11:27
Porque tu não faz assim cara?
Aí será fácil de acrescentar novas áreas e relacioná-las.
Poderá pegar até mesmo dessa tabela para popular seus checkbox

CREATE TABLE secaoparticipe (
id_user int (10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
nome varchar(50) NOT NULL, email varchar(40) NOT NULL,
telefone varchar(15) NOT NULL,
areatuacao enum (‘Ciencias Agrarias’, ‘Ciencias da Saude’, ‘Ciencias Sociais’, ‘Contabeis’, ‘Direito’, ‘Engenharias’, ‘Informatica’) NOT NULL,
areaint set (‘Monitoria’, ‘Economia Solidaria’, ‘Fazer curso’, ‘Pesquisar’, ‘Outros’) NOT NULL,
mensagem text NOT NULL
)

CREATE TABLE areaint (
id_areaint int (10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
title varchar(50) NOT NULL
)

CREATE TABLE `secaoparticipe_areaint` (
`id_secaoparticipe_areaint` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`id_user` INT UNSIGNED NOT NULL ,
`id_areaint` INT UNSIGNED NOT NULL
)
Na hora de inserir, você insere o id do usuário e o id da área na tabela: secaoparticipe_areaint
0
#8 [Resolvido] Checkbox + INSERT: post #8 Mailahn

Members

14 posts
Postado 16 dezembro 2009 – 09:44
Então, William a tua dica NÃO vingou! 🙁

Lesfar, eu não entendi esse teu código:

CREATE TABLE areaint (
id_areaint int (10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
title varchar(50) NOT NULL
)
Para que serve esse título? Desculpe a ignorância.

P.S.: Tô ficando louca já! :'(
0
#9 [Resolvido] Checkbox + INSERT: post #9 William Bruno
Desenvolvedor NodeJS

Moderadores Globais

27.253 posts
Postado 17 dezembro 2009 – 07:22
Mailahn ? porque?
deu algum erro de sql ? qual?

você deve nos dizer como ficou a query:
echo $sql; e qndo não der certo, avisar onde foi o erro.
O Lesfar Inmors te disse para trabalhar com mais uma tabela, como sugeri no inicio.
Mas dá para fazer como você pediu tb.. você vai trabalhar com strings no campo SET, ne?! então precisa colocar aspas em cada uma delas..

pode até usar um foreach para isso..
$area=”;
foreach( $_POST[‘areaint’] AS $areasint )
$areas .= “‘”.$areasint.”‘,”;
$areas = substr( $areas, 0 , -1 );//apenas para retirar a ultima virgula
$sql = “INSERT INTO `secaoparticipe` (`areaint`) VALUES( {$areas} )”;

echo $sql;poste o resultado, e se der algum erro, nos diga qual.
0
#10 [Resolvido] Checkbox + INSERT: post #10 Matias Rezende
Consultor Web

Moderadores Globais

6.543 posts
Postado 17 dezembro 2009 – 07:47
Só um detalhe:

Este trecho
$area=”;
foreach( $_POST[‘areaint’] AS $areasint )
$areas .= “‘”.$areasint.”‘,”;
$areas = substr( $areas, 0 , -1 );//apenas para retirar a ultima virgula Pode ser trocado pela função implode
$areas = implode(‘,’,$_POST[‘areaint’]);http://br.php.net/implode

Carlos Eduardo
0
#11 [Resolvido] Checkbox + INSERT: post #11 William Bruno
Desenvolvedor NodeJS

Moderadores Globais

27.253 posts
Postado 17 dezembro 2009 – 08:53
Matiaz, apenas não dá pra trocar pelo implode… (isso eu sugeri em #6 ), pois se ele precisar de algo como:

$sql = “INSERT INTO `secaoparticipe` (`areaint`) VALUES (‘Monitoria’, ‘Economia Solidaria’, ‘Outros’) “; o implode não dá conta de fazer sozinho.. ne?

Se ele precisar das aspas ali… o implode apenas colocaria as virgulas, e como ele está trabalhando com strings, acho que teve o erro que ele reclamou, de não ter dado certo a minha dica.
0
#12 [Resolvido] Checkbox + INSERT: post #12 Matias Rezende
Consultor Web

Moderadores Globais

6.543 posts
Postado 17 dezembro 2009 – 09:05
Unh… Verdade. Vai faltar as aspas. Carlos Eduardo
0
#13 [Resolvido] Checkbox + INSERT: post #13 Mailahn

Members

14 posts
Postado 17 dezembro 2009 – 13:35
INSERT INTO `secaoparticipe` (`areaint`) VALUES( ‘Economia Solidaria”Pesquisar”Outros’ )
O código acima está imprimido as opções que os usuários fazem, mas ainda não grava no BD. E isso eu já conseguia anteriormente apenas com dus linhas de código. O que realmente não funciona é o INSERT! 🙁
0
#14 [Resolvido] Checkbox + INSERT: post #14 Matias Rezende
Consultor Web

Moderadores Globais

6.543 posts
Postado 17 dezembro 2009 – 14:06
O código acima não está completo. É só a parte de montar a query. Você tem que executá-la. Veja que não estamos postando o código pronto para você. Estamos fazendo sugestões de correção, que devem ser analisadas e modificadas para estarem de acordo com a sua necessidade. Carlos Eduardo
0
#15 [Resolvido] Checkbox + INSERT: post #15 William Bruno
Desenvolvedor NodeJS

Moderadores Globais

27.253 posts
Postado 17 dezembro 2009 – 16:30
E tambem estao faltando as virgulas ali… você alterou alguma coisa do codigo que postei?? mande o teu codigo atual, colocando o mysql_query, logicamente… o teu problema, era na ma formacao da string sql, eh ela que estamos tentando arrumar aqui. executar a query, eh apenas chamar a funcao..
0
#16 [Resolvido] Checkbox + INSERT: post #16 Mailahn

Members

14 posts
Postado 18 dezembro 2009 – 13:48
Aí que coisa, eu queria entregar esse site antes do final do ano. 🙁 Então, eu criei um formulário e eu consigo capturar as informações de todos os tipos de campos, que compõem o mesmo, exceto os dos checkboxes. Como eu havia dito, consigo imprimir as escolhas, mas NÃO estou gravando nada!

Se estou conseguindo imprimir, é sinal de que a tabela está correta! Mas, essas dicas eu tentei adaptar e mesmo assim não consegui! 🙁

$query = “INSERT INTO `secaoparticipe`(`id_user`, `nome`, `email`, `telefone`, `areatuacao`, `areaint`, `mensagem`) VALUES (NULL , ‘”.$nome.”‘, ‘”.$email.”‘, ‘”.$telefone.”‘, ‘”.$areatuacao.”‘, ‘”.$areaint.”‘, ‘”.$mensagem.”‘)”;
$resultado = mysqli_query($conexao, $query);
//foreach($_POST[“areaint”] as $value){
//echo $value . ‘<br>’;
O código acima continua o mesmo do primeiro post, eu não alterei nada. Pessoal, por favor me ajudem!!

(*) Detalhe: Eu não sou “ele”, sou ELA!:)
0
#17 [Resolvido] Checkbox + INSERT: post #17 William Bruno
Desenvolvedor NodeJS

Moderadores Globais

27.253 posts
Postado 18 dezembro 2009 – 14:26
Olha… é o seguinte:
$areas=”;
foreach( $_POST[‘areaint’] AS $areasinte )
$areas .= “‘”.$areasinte.”‘,”;
$areas = substr( $areas, 0 , -1 );//apenas para retirar a ultima virgula
$query = “INSERT INTO `secaoparticipe`(`id_user`, `nome`, `email`, `telefone`, `areatuacao`, `areaint`, `mensagem`)
VALUES (NULL , ‘”.$nome.”‘, ‘”.$email.”‘, ‘”.$telefone.”‘, ‘”.$areatuacao.”‘, (“.$areas.”), ‘”.$mensagem.”‘)”;

echo $query;
$resultado = mysqli_query($conexao, $query);poste o resultado, e diga se conseguiu fazer.
tente entender os códigos que postamos.. se não fica impossível lhe ajudar.
0
#18 [Resolvido] Checkbox + INSERT: post #18 Mailahn

Members

14 posts
Postado 18 dezembro 2009 – 16:20
William Bruno, muito obrigada!!! Olha, eu pensei que não fosse dar muito certo essa história de me cadastrar em um fórum, mas estou me surpreendendo. Sinceramente, fico extremamente feliz com a tua contribução, sério mesmo! Pois, infelizmente, quando uma pessoa em nossa área sabe ‘alguma coisa’, dificilmente gosta de passar adiante. Mas, então… melhorou muiiiiiiiiiiiiiito, porém captura apenas a primeira escolha que o usuário marca. Acredito que esta parte, contém um erro relacionado a qtd de aspas e apóstrofes, vou verificar! P.S.: Mesmo assim, agradeço-te mais uma vez!:)
0
#19 [Resolvido] Checkbox + INSERT: post #19 William Bruno
Desenvolvedor NodeJS

Moderadores Globais

27.253 posts
Postado 18 dezembro 2009 – 16:21
Oque retornou do
echo $query; ?

Se você não postar esse tipo de coisa, fica impossível lhe dizermos como arrumar.
0
#20 [Resolvido] Checkbox + INSERT: post #20 Mailahn

Members

14 posts
Postado 18 dezembro 2009 – 16:38
Então, eu modifiquei o teu código para esse abaixo:

$area=”;
foreach( $_POST[“areaint”] AS $areaint )
$areas .= “‘”.$areaint.”‘,”;
$areas = substr( $areas, 0 , -1 );//apenas para retirar a ultima virgula

$query = “INSERT INTO `secaoparticipe`(`id_user`, `nome`, `email`, `telefone`, `areatuacao`, `areaint`, `mensagem`)
VALUES (NULL , ‘”.$nome.”‘, ‘”.$email.”‘, ‘”.$telefone.”‘, ‘”.$areatuacao.”‘, (‘”.$areaint.”‘), ‘”.$mensagem.”‘)”;

echo $query;
$resultado = mysqli_query($conexao, $query);
echo $query; está imprindo o seguinte:
INSERT INTO `secaoparticipe`(`id_user`, `nome`, `email`, `telefone`, `areatuacao`, `areaint`, `mensagem`) VALUES (NULL , ‘João Asdrubal Collor’, ‘jacollor@yahoo.com.br’, ‘11111110101’, ‘Ciencias Sociais’, (‘Fazer curso’), ‘Oi gente! Então, eu sentiria-me honrado em participar da incubadora…’)Dados enviados com sucesso!

 

 

http://forum.imasters.com.br/topic/375158-resolvidocheckbox-insert/

http://www.sh2.com.br/sac/knowledgebase.php?action=displayarticle&id=35

http://www.w3schools.com/php/php_forms.asp

http://www.w3schools.com/php/php_arrays.asp

http://www.webhostingtalk.com/showthread.php?t=292723

https://developer.mozilla.org/pt-BR/docs/Web/Guide/HTML/Forms/Meu_primeiro_formulario_HTML

http://blog.thiagobelem.net/manipulando-dados-do-mysql-com-o-php

http://www.w3schools.com/php/php_arrays.asp

 

Deixe um comentário