Mailahn 0 Denunciar post Postado Dezembro 14, 2009 Oi Pessoal, 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.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif P.S.: Afinal, como montar o INSERT de cada valor do meu array CHECKBOX = areaint[]? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Dezembro 14, 2009 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.imasters.com.br/public/style_emoticons/default/seta.gif PHP Compartilhar este post Link para o post Compartilhar em outros sites
Mailahn 0 Denunciar post Postado Dezembro 15, 2009 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!!! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Dezembro 15, 2009 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() Compartilhar este post Link para o post Compartilhar em outros sites
Mailahn 0 Denunciar post Postado Dezembro 15, 2009 Estás enganado... o tipo ENUM é que captura apenas um valor. Ok, vou estudar sobre as tuas considerações. Valeu guri! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Dezembro 15, 2009 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 Compartilhar este post Link para o post Compartilhar em outros sites
Lesfar Inmors 0 Denunciar post Postado Dezembro 15, 2009 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 Compartilhar este post Link para o post Compartilhar em outros sites
Mailahn 0 Denunciar post Postado Dezembro 16, 2009 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á! :'( Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Dezembro 17, 2009 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. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 17, 2009 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 Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Dezembro 17, 2009 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. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 17, 2009 Unh... Verdade. Vai faltar as aspas. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Mailahn 0 Denunciar post Postado Dezembro 17, 2009 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! :( Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 17, 2009 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 Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Dezembro 17, 2009 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.. Compartilhar este post Link para o post Compartilhar em outros sites
Mailahn 0 Denunciar post Postado Dezembro 18, 2009 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!:) Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Dezembro 18, 2009 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. Compartilhar este post Link para o post Compartilhar em outros sites
Mailahn 0 Denunciar post Postado Dezembro 18, 2009 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!:) Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Dezembro 18, 2009 Oque retornou do echo $query; ? Se você não postar esse tipo de coisa, fica impossível lhe dizermos como arrumar. Compartilhar este post Link para o post Compartilhar em outros sites
Mailahn 0 Denunciar post Postado Dezembro 18, 2009 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! Compartilhar este post Link para o post Compartilhar em outros sites