Kiito 0 Denunciar post Postado Março 7, 2009 Boa noite a todos! to com uma dúvida por exemplo tenho 2 tabelas em meu DB -- -- Estrutura da tabela `construtora` -- DROP TABLE IF EXISTS `construtora`; CREATE TABLE `construtora` ( `Id_ap` int(11) NOT NULL auto_increment, `projeto` text collate latin1_general_cs, `imagem` text collate latin1_general_cs, `link` text collate latin1_general_cs, `estado` text collate latin1_general_cs, `cidade` text collate latin1_general_cs, `tipo_imovel` text collate latin1_general_cs, `area_privativa` text collate latin1_general_cs, `fase_obra` text collate latin1_general_cs, `valor` text collate latin1_general_cs, PRIMARY KEY (`Id_ap`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs AUTO_INCREMENT=3; -- -------------------------------------------------------- -- -- Estrutura da tabela `users` -- DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `usuario` varchar(254) collate latin1_general_ci default NULL, `senha` varchar(32) collate latin1_general_ci default NULL, `nome` text collate latin1_general_ci, `ip` text collate latin1_general_ci, `favorito` set('1') collate latin1_general_ci default '', `Id_ap` int(11) NOT NULL default '0', `nome_ap` varchar(255) collate latin1_general_ci default NULL, PRIMARY KEY (`id`), KEY `Id_ap` (`Id_ap`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1; A operação q deve ocorrer é... q o usuario consiga marcar na listagem dos aps... quais são os favoritos dele... e assim ele guarda nakele campo favorito, mas na listagem quero q apareça o nome do ap e nao a ID =x por isso o campo nome_ap A estrutura ta certa pra fazer tal operação? Outra dúvida Nesta mesma pagina que ele marca os favoritos... ele executa uma ação ... seria insert? alter? update? essas são minhas duvidas... alguém pode me esclarecer? para inserir os dados nas 2 tabelas.. como faço? =x desde já agradeço http://forum.imasters.com.br/public/style_emoticons/default/blush.gif Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 8, 2009 A estrutura ta certa pra fazer tal operação?Hum... talvez não hein?!Vamos lá.. você tem as "construtoras"? :blink: Não seriam "apartamentos" ? e você tem os usuários, que podem ter vários contruturas/apartamentos como favoritos, certo ? (atenta para o vários, já trabalhou com access ?) Textinho..eu posso ter 3 apartamentos que escolhi com favoritos, mas você pode ter 15 favoritos.. viu o problema ai ? Nessa situação, com a tua modelagem, você precisaria ter 15 vezes as linhas do usuário. Com várias informações repetidas. Eu sugiro criar mais uma tabela, apenas para o relacionamento. Ficando: TABLE `apartamento/contrutora` #não entendi pq você chama de construtora, afinal, UMA construtora, tem VÁRIOS apartamentos, ou não ? `Id_ap` `nome_ap` .. TABLE `users` `id` TABLE `favorito` `id_user` `Id_ap` Ai você faria uma ação de insert, cada vez que o usuário escolhesse um favorito. Mas apenas na tabela `favorito` Compartilhar este post Link para o post Compartilhar em outros sites
Kiito 0 Denunciar post Postado Março 9, 2009 William... depois olhei com calma e vi a besteira que eu fiz o BD chama construtora as tabelas sao Empreendimento Users e Favoritos segue abaixo como funciona a listagem dos campos <form action="insert.php" method="post"> <?php mysql_connect("localhost","root",""); mysql_select_db("construtora"); $listagem = "SELECT * FROM empreendimento"; $query = mysql_query($listagem); while ($linha=mysql_fetch_array($query)){ $id = $linha["id_empre"]; $projeto = $linha["empreendimento"]; echo "<input type=\"checkbox\" value=\"$id\" name=\"ide[]\" />".$projeto."<br />"; } ?> <input type="submit" value="enviar" /> </form> agora a pagina q ira gravar <?php mysql_connect("localhost","root",""); mysql_select_db("construtora"); foreach($_POST["ide"] AS $valor_id) $sql = mysql_query("INSERT INTO favorito (id_empre)VALUES($valor_id)"); ?> visto que a tabela favorito tem campo id_empre e id_user ((ambas buscando dados das tabelas correspondentes)) porem dps com as sessoes gravarei o id do usuario.. sem problema, soh queria gravar no db as infs porem aparece esse erro Notice: Undefined index: ide in C:\wamp\www\testes\insert.php on line 5 Warning: Invalid argument supplied for foreach() in C:\wamp\www\testes\insert.php on line 5 =x Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 9, 2009 Estranho.. esses erros ai apareceram qndo você acessou a insert.php direto, ne?! Ou depois de enviar o POST do formulário ? faça isso: var_dump($_POST["ide"]); Compartilhar este post Link para o post Compartilhar em outros sites
Kiito 0 Denunciar post Postado Março 9, 2009 entao... qdo envio o formulario.. da esse erro =/ vou tentar o var_dump... assim que chegar em casa!! qualquer coisa posto aqui denovo william! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 9, 2009 o var_dump é só pra gente ver oque tá vindo nesse array ai. foreach($_POST['ide'] as $valor_id) { $sql = mysql_query("INSERT INTO `favorito` (`id_empre`) VALUES ($valor_id) ")or die(mysql_error()); } Compartilhar este post Link para o post Compartilhar em outros sites
Kiito 0 Denunciar post Postado Março 10, 2009 ae cara tentei deu isso Notice: Undefined index: ide in C:\wamp\www\testes\insert.php on line 5 Warning: Invalid argument supplied for foreach() in C:\wamp\www\testes\insert.php on line 5 Notice: Undefined index: ide in C:\wamp\www\testes\insert.php on line 8 NULL Compartilhar este post Link para o post Compartilhar em outros sites
Kiito 0 Denunciar post Postado Março 12, 2009 testei local e no servidor... e acontece a mesma coisa =x Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 12, 2009 Mostra como está o teu script agora... Mas já que você está com todos os erros habilitados, antes de usar teste: if(isSet($_POST['ide'])){ foreach($_POST['ide'] as $valor_id) { $sql = mysql_query("INSERT INTO `favorito` (`id_empre`) VALUES ($valor_id) ")or die(mysql_error()); } } else { echo 'Não veio o post dos check!!'; } Compartilhar este post Link para o post Compartilhar em outros sites
Kiito 0 Denunciar post Postado Março 12, 2009 William... brigadao... a parte do insert ele foi mas nao traz a resposta... creio q o problema esteja no formulario <?php mysql_connect("localhost","root",""); mysql_select_db("construtora"); if(isset($_POST['ide'])){ foreach($_POST['ide'] as $valor_id) { $sql = mysql_query("INSERT INTO `favorito` (`id_empre`) VALUES ($valor_id) ")or die(mysql_error()); } } else { echo 'Não veio o post dos check!!'; } ?> esse eh o formulario <form action="insert.php" method="post" name="form"> <?php mysql_connect("localhost","root",""); mysql_select_db("construtora"); $listagem = "SELECT * FROM empreendimento"; $query = mysql_query($listagem); while ($linha=mysql_fetch_array($query)){ $id = $linha["id_empre"]; $projeto = $linha["projeto"]; ?> <input type="checkbox" value="<?php echo $id ?>" name="ide[]" /><?php echo $projeto ?><br /> <?php } ?> <input type="submit" value="enviar" /> </form> tentei atribuir name="ide" mas nao deu tambem Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 12, 2009 Não não cara.. para marcar checkbox, é mais complicadinho que isso.. hehe :lol: A idéia, é você gravar num array todos os values que estão no banco. E ai na hora de listar, você compara se o check atual, está no array, se estiver você imprime um checked="checked" no input. Caso contrário, não imprime nada. Eu fiz um método aqui, para isso. /* o parâmetro $string, é o WHERE `idRepresentante` = 2, por exemplo, ai o método só retorna todos os check, e marca apenas os que forem relacionados ao representante de id 2. Se você não passar nada, o método preenche a lista de checks, toda desmarcada. */ function checkProduto( $string ) { $sql = ("SELECT * FROM `produto2` "); if( $string != '' ) { $sql2 = ("SELECT idProduto FROM `produtoRepresentante` "); $sql2 .= $string; $consulta2 = mysql_query($sql2); if(mysql_num_rows($consulta2)!=0) { while($dadosRel = mysql_fetch_assoc($consulta2)) { $vetorProd[] = $dadosRel['idProduto']; } } } $consulta = mysql_query($sql); while( $dados = mysql_fetch_assoc( $consulta ) ) { if( $string != '' ) { if( in_array( $dados['idProduto'], $vetorProd ) ) $checked = 'checked="checked" '; else $checked = ''; } $check .= "\t".'<label>'.$dados['nomeProduto'].'<input type="checkbox" name="idProduto[]" value="'.$dados['idProduto'].'" '.$checked.'/></label>'."\n\t\t"; } return $check; }Esse é um método de uma classe minha, na verdade, ele já devolve a lista de checkbox inteira.. seja para cadastrar, ou para alterar, e ai coloca os checked nos que estão no banco.Se você não entender, posta a estrutura da tua tabela, que agente desenvolve aqui.. mas olha, o "segredo", é esse trecho: if( in_array( $dados['idProduto'], $vetorProd ) ) $checked = 'checked="checked" '; else $checked = ''; Compartilhar este post Link para o post Compartilhar em outros sites
Kiito 0 Denunciar post Postado Março 12, 2009 vamos la!! entender, nao entendi mto bem... tem funçao ali que desconheço. minha tabela eh simples CREATE TABLE `empreendimento` ( `id_empre` int(11) NOT NULL AUTO_INCREMENT, `projeto` varchar(255) DEFAULT NULL, PRIMARY KEY (`id_empre`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; CREATE TABLE `favorito` ( `id_empre` int(11) NOT NULL DEFAULT '0', `id_user` int(11) DEFAULT NULL, PRIMARY KEY (`id_empre`), KEY `usuario` (`id_user`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `usuario` ( `id_user` int(11) NOT NULL AUTO_INCREMENT, `usuario` varchar(255) DEFAULT NULL, PRIMARY KEY (`id_user`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; # # Foreign keys for table favorito # ALTER TABLE `favorito` ADD CONSTRAINT `usuario` FOREIGN KEY (`id_user`) REFERENCES `usuario` (`id_user`) ON DELETE NO ACTION ON UPDATE NO ACTION, ADD CONSTRAINT `empre` FOREIGN KEY (`id_empre`) REFERENCES `empreendimento` (`id_empre`) ON DELETE NO ACTION ON UPDATE NO ACTION; num keria algo tao complexo... eh base de estudo msm... saka.. mas se puder dar uma ajuda... Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 12, 2009 Não cheguei à testar.. mas acho que tá tudo certo. Vê ai, o formulário para editar ficaria assim: <form action="insert.php" method="post" name="form"> <?php mysql_connect("localhost","root",""); mysql_select_db("construtora"); $listagem = "SELECT * FROM empreendimento"; $query = mysql_query($listagem); $sql2 = ("SELECT id_empre FROM `favorito` WHERE `id_user` = {1} "); // o 1 aqui, você troca pelo id do usuário corrente $consulta2 = mysql_query($sql2); if(mysql_num_rows($consulta2)!=0) // só realiza o fech, se existir resposta, para não retornar erro, caso não tenha NENHUM favorito { while($dadosRel = mysql_fetch_assoc($consulta2)) { $vetorFav[] = $dadosRel['id_empre']; // aqui eu guardo tudo oque tá no banco, relacionado à tal usuário no $vetorFav } } while ($linha=mysql_fetch_array($query)){ $id = $linha["id_empre"]; $projeto = $linha["projeto"]; if( in_array( $dados['id_empre'], $vetorFav ) ) //confere se existe o id_empre atual do loop, dentro de $vetorFav $checked = 'checked="checked" '; // se tiver, é pq precisa mostrar marcado else $checked = ''; // caso contrário, não precisa por nada.. e imprime um "VAZIO" no input echo '<input type="checkbox" value="'.$id.'" name="ide[]" '.$checked.'/>'.$projeto.'<br />'; }//fecha while ?> <input type="submit" name="enviar" value="enviar" /> </form>E atenção, que aqui:$sql2 = ("SELECT id_empre FROM `favorito` WHERE `id_user` = {1} "); // o 1 aqui, você troca pelo id do usuário correntevocê precisa trocar a cláusula do WHERE, por uma vinda do sistema. Já que: você tem vários usuários. Cada um tem um id_user e cada usuário, tem vários favoritos, certo ? Compartilhar este post Link para o post Compartilhar em outros sites
Kiito 0 Denunciar post Postado Março 12, 2009 hummm.. entendi... mas a clausula q você se refere... necessito trocar a id do cara.. aaa isso sem problema.. resgatarei através do login quando ele efetuar! para certificar!! sem problema =D vou realizar o teste e posto o resultado.. william.. você ta quebrando 1 galhao... me ajudando bastante... tem coisa q num tinha visto e ta ficando mais claro!! vlw msm! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 12, 2009 Tem que trocar sim cara.. veja que eu passei 1 pro WHERE.. desse jeito, ele só vai trazer os dados do usuário com id 1 ! você deve colocar ali, uma variável, que guarda o id do usuário. Como funciona o teu sistema ? Cada usuário faz login? Salva numa SESSION, e joga o id ai nessa query. Se retornar algum erro, avisa ai. Compartilhar este post Link para o post Compartilhar em outros sites
Kiito 0 Denunciar post Postado Março 12, 2009 Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\testes\teste.php on line 23 Notice: Undefined variable: dados in C:\wamp\www\testes\teste.php on line 35 Notice: Undefined variable: vetorFav in C:\wamp\www\testes\teste.php on line 35 Warning: in_array() [function.in-array]: Wrong datatype for second argument in C:\wamp\www\testes\teste.php on line 35 foi esse o erro q apareceu... variavel nao definida Oo Compartilhar este post Link para o post Compartilhar em outros sites
Kiito 0 Denunciar post Postado Março 12, 2009 sim.. a ideia vai ser essa msma... mas to no começo ainda... ja fiz o sistema de buscas, cadastro de empreendimento e tals.. agora to no final da navegaçao dos usuarios! esse do checkbox me deixo preocupado... imagina o resto? hahahahahhaa!! mas vo continuar... tenho q aprender... curto php!! soh as vezes q me perco =P Compartilhar este post Link para o post Compartilhar em outros sites
Renato Siroma 2 Denunciar post Postado Março 12, 2009 @Off: Kito tá escrito <?="Kaio";> Na sua foto. e Não <?="Kaio";?> Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 12, 2009 Troca essa query aqui, não entendi pq o num_rows falhou. Disso decorreu todos os outros erros. $sql2 = ("SELECT id_empre FROM `favorito` WHERE `id_user` = {1} ")or die(mysql_error()); // o 1 aqui, você troca pelo id do usuário corrente Hum.. erro meu. Esqueci de trocar o $dados por $linha que você usou: if( in_array( $linha['id_empre'], $vetorFav ) ) //confere se existe o id_empre atual do loop, dentro de $vetorFav Compartilhar este post Link para o post Compartilhar em outros sites
Kiito 0 Denunciar post Postado Março 12, 2009 vixiiii o kra reparo na foto huauhahuahuahuahuahuauhahuauhahaa mas nao fui eu q fiz =P huahuahuahuahua vo troca dps.. preciso mudar.. essa ta feia huauhahuauhahuahuhuahua =D postando o q houve <?php mysql_connect("localhost","root",""); mysql_select_db("construtora"); $listagem = "SELECT * FROM empreendimento"; $query = mysql_query($listagem); $sql2 = ("SELECT id_empre FROM 'favorito' WHERE 'id_user' = {1} ")or die(mysql_error()); // o 1 aqui, você troca pelo id do usuário corrente $consulta2 = mysql_query($sql2); if(mysql_num_rows($consulta2)!=0) // só realiza o fech, se existir resposta, para não retornar erro, caso não tenha NENHUM favorito { while($dadosRel = mysql_fetch_assoc($consulta2)) { $vetorFav[] = $dadosRel['id_empre']; // aqui eu guardo tudo oque tá no banco, relacionado à tal usuário no $vetorFav } } while ($linha=mysql_fetch_array($query)){ $id = $linha["id_empre"]; $projeto = $linha["projeto"]; if( in_array( $linha['id_empre'], $vetorFav ) ) //confere se existe o id_empre atual do loop, dentro de $vetorFav $checked = 'checked="checked" '; // se tiver, é pq precisa mostrar marcado else $checked = ''; // caso contrário, não precisa por nada.. e imprime um "VAZIO" no input echo '<input type="checkbox" value="'.$id.'" name="ide[]" '.$checked.'/>'.$projeto.'<br />'; }//fecha while ?> Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\testes\teste.php on line 23 Notice: Undefined variable: vetorFav in C:\wamp\www\testes\teste.php on line 35 Warning: in_array() [function.in-array]: Wrong datatype for second argument in C:\wamp\www\testes\teste.php on line 35 Compartilhar este post Link para o post Compartilhar em outros sites