AndreLC Posted May 2, 2012 at 11:32 PM Report #452842 Posted May 2, 2012 at 11:32 PM Boa noite, Tenho uma dúvida na questão de relacionamento de muitos para muitos. Tenho a tabela imóveis com a informação relativa ao imóvel e tenho a tabela divisao com a informação relativa às divisões que poderá existir para um imóvel. Pela lógica criei a tabela imovel_divisoes que possui ambos os ids das tabelas imoveis e divisao juntamente com a descricao e metros quadrados, pois necessito desta informação também. CREATE TABLE IF NOT EXISTS `imoveis` ( `id` int(11) NOT NULL AUTO_INCREMENT, `estado` varchar(50) DEFAULT NULL, `area_util` varchar(255) DEFAULT NULL, `area_bruta` varchar(255) DEFAULT NULL, `area_terreno` varchar(255) DEFAULT NULL, `montante` varchar(255) DEFAULT NULL, `morada` varchar(255) DEFAULT NULL, `codpostal` varchar(4) DEFAULT NULL, `codpostal_ind` varchar(3) DEFAULT NULL, `localidade` varchar(255) DEFAULT NULL, `id_distrito` int(11) DEFAULT NULL, `id_concelho` int(11) DEFAULT NULL, `freguesia` varchar(50) DEFAULT NULL, `mini_descricao` varchar(255) DEFAULT NULL, `descricao` varchar(800) DEFAULT NULL, `Imagem1` varchar(255) DEFAULT NULL, `Imagem2` varchar(255) DEFAULT NULL, `Imagem3` varchar(255) DEFAULT NULL, `Imagem4` varchar(255) DEFAULT NULL, `Imagem5` varchar(255) DEFAULT NULL, `estado` tinyint(1) NOT NULL DEFAULT '2', `data_insercao` date NOT NULL, PRIMARY KEY (`id`), ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; INSERT INTO `imoveis` (`id`, `id_estado`, `area_util`, `area_bruta`, `area_terreno`, `montante`, `morada`, `codpostal`, `codpostal_ind`, `localidade`, `id_distrito`, `id_concelho`, `freguesia`, `mini_descricao`, `descricao`, `Imagem1`, `Imagem2`, `Imagem3`, `Imagem4`, `Imagem5`, `estado`, `data_insercao`) VALUES (1, 'Novo', 'n/a', 'n/a', 'n/a', '144.000', 'Rua D. Afonso henriques', '5454', '565', 'Castelo Branco', 5, 149, 'Castelo Branco', 'Garagem, com acesso a casa pelo exterior. Piscina interior.', 'Moradia composta por R/C, 1º Andar e Sotão. R/C - Sala 20m², acesso ao terraço, cozinha 14m², móveis em carvalho e bancada em granito, acesso ao terraço e WC. 1º Andar - Quarto 14m², varanda, quarto 15m², roupeiro e varanda, suite 16m², 2 roupeiros. Garagem e piscina.', 'Imagem0001.jpg', 'Imagem002.jpg', 'Imagem03.jpg', 'Imagem004.jpg', 'Imagem005.jpg', 1, '2012-02-02'), CREATE TABLE IF NOT EXISTS `divisao` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ; INSERT INTO `divisao` (`id`, `nome`) VALUES (1, 'Arrecadação'), (2, 'Alpendre'), (3, 'Biblioteca'), (4, 'Casa de Banho'), (5, 'Casa de Banho'), (6, 'Casa de Banho'), (7, 'Casa de Banho'), (8, 'Casa de Banho'), (9, 'Casa de Banho Partilhada'), (10, 'Casa de Banho Privativa'), (11, 'Closet'), (12, 'Corredor'), (13, 'Cozinha'), (14, 'Cozinha Equipada'), (15, 'Cozinha semi-equipada'), (16, 'Despensa'), (17, 'Escritório'), (18, 'Hall'), (19, 'Hall de Quartos'), (20, 'Quarto'), (21, 'Quarto'), (22, 'Quarto'), (23, 'Quarto'), (24, 'Quarto'), (25, 'Quarto Visitas'), (26, 'Sala Comum'), (27, 'Sala de Estar'), (28, 'Sala de Jantar'), (29, 'Sotão'), (30, 'Suite'), (31, 'Suite'); CREATE TABLE IF NOT EXISTS `imovel_divisoes` ( `imovel_id` int(11) NOT NULL, `divisao_id` int(11) NOT NULL, `descricao` varchar(255) NOT NULL, `metros_quadrados` int(11) NOT NULL, PRIMARY KEY (`imovel_id`,`divisao_id`), KEY `imovel_id` (`imovel_id`), KEY `divisao_id` (`divisao_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Acrescentei as divisões com checkboxes utilizando: <?php $q = mysql_query("SELECT * from divisao"); while($nomes = mysql_fetch_array($q)){ ?> <input type="checkbox" name="divisoes[]" id="<?php echo $nomes["id"]; ?>" value="<?php echo $nomes["nome"]; ?>" onclick="chckd()"><?php echo $nomes["nome"]; ?> <div id="div_<?php echo $nomes["id"]; ?>" style="display: none;"> <input name="desc_<?php echo $nomes["nome"]; ?>" type="text" id="desc_<?php echo $nomes["nome"]; ?>" size="61" value="Digite aqui a descrição" onfocus="if (this.value == 'Digite aqui a descrição') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Digite aqui a descrição';}" class="form_pesquisa" /> <input name="area_<?php echo $nomes["id"]; ?>" type="text" id="area_<?php echo $nomes["id"]; ?>" size="2" /> <label>m²</label></div> <?php }; ?> E conforme a imagem: https://s22.postimg.cc/3vq0l2yn5/img01ui.jpg À medida que clico na checkbox surge a caixa de texto para introdução da descrição e dos metros quadrados. A minha dúvida é que eu estava a fazer um simples INSERT INTO para a tabela imóveis, mas agora como tenho a terceira tabela, tenho que fazer outro INSERT INTO para esta terceira tabela (imovel_divisões), ficando com 2 INSERT INTO ou há outra maneira mais eficiente de fazer? Desculpem a pergunta, mas ainda não tinha necessidade de efectuar a gestão de registos com relacionamento N:N. Obrigado pela ajuda. Cumprimentos, AndreLC echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
HappyHippyHippo Posted May 3, 2012 at 06:40 AM Report #452853 Posted May 3, 2012 at 06:40 AM nop ... duas tabelas duas operações insert (sejam elas com transactions ou não) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AndreLC Posted May 3, 2012 at 08:10 AM Author Report #452855 Posted May 3, 2012 at 08:10 AM Então, por exemplo, a aplicação de uma SP, neste caso, é dispensável? echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
ruiFernandes Posted May 3, 2012 at 09:48 AM Report #452871 Posted May 3, 2012 at 09:48 AM o que é uma "SP"? - Rui Fernandes
AndreLC Posted May 3, 2012 at 09:50 AM Author Report #452872 Posted May 3, 2012 at 09:50 AM Stored Procedure (Procedimentos)... Para entender faço a distinção entre Stored procedure e Funções em que a Stored Procedure não é obrigada a retornar valores para o utilizador, em vez de uma Função que deve retornar sempre um determinado dado ou conjunto destes. Como as Funções não podem inserir, alterar ou excluir dados em tabelas e ter que inserir dados em duas tabelas daí ter falado de Stored Procedure... Mas nunca apliquei SP em MySQL + php daí ter perguntado se é dispensável ou agilizaria o processo em vez dos dois INSERT INTO... echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
AndreLC Posted May 4, 2012 at 01:24 PM Author Report #453058 Posted May 4, 2012 at 01:24 PM Alguma dica? Estou baralhado aqui com a questão de ser uma relação muitos para muitos. Pois tenho que inserir na tabela de associação (imovel_divisoes) o id do imovel e o id da divisao e respectiva descrição e metros quadrados. Por exemplo, conforme as checkboxes seleccionadas na imagem e imaginando que estou a registar o imóvel 20, iria ficar na tabela: 20, 1, descricao, metros 20, 3, descricao, metros 20, 6, descricao, metros 20, 7, descricao, metros 20, 12, descricao, metros 20, 13, descricao, metros Seleccionando 6 checkboxes fico com 6 registos na tabela, se seleccionar todas vou ficar com muitas linhas, a tabela vai ficar muito pesada, será mesmo assim? Estou a pensar de maneira certa? Será a melhor maneira? Depois para recuperar os resultados (todas as divisões daquele imóvel) para o browser faço uma query com INNER JOIN? Como o id do imóvel é auto increment como vou saber o id quando registo nesta tabela de associação? Ainda para mais se for o primeiro imóvel que vou inserir tem que ser o id com o n.º 1... Obrigado pela ajuda. echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
HappyHippyHippo Posted May 4, 2012 at 01:38 PM Report #453063 Posted May 4, 2012 at 01:38 PM // inserir o imóvel mylsql_query(...); $id_imovel = mysql_insert_id(); // inserir relação mylsql_query(...); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Etiqueta Posted May 4, 2012 at 01:41 PM Report #453064 Posted May 4, 2012 at 01:41 PM estou com o mesmo problema. o meu código para guardar na base de dados está assim: <?php require '../conexao.php'; $Username = $_POST['Username']; $Password = $_POST['Password']; $Email = $_POST['Email']; $Nome = $_POST['Nome']; $Data_Nasc = $_POST['Data_Nasc']; $ID_Localizacao = $_POST['ID_Localizacao']; $Local = $_POST['Local']; $Telefone = $_POST['Telefone']; $ID_Habilitacao = $_POST['ID_Habilitacao']; $ID_ExpProf = $_POST['ID_ExpProf']; $CartaConducao = $_POST['CartaConducao']; $CartaApresentacao = $_POST['CartaApresentacao']; $Curriculum = $_FILES['Curriculum']; $trimimg = $_FILES["Curriculum"]["name"]; $ID_Registo = $_POST['ID_Registo']; function saveUploadedFileToCurrentPHPFolder (){ $origin=$_FILES["Curriculum"]['tmp_name']; //patch absoluta do ficheiro na origem $destination="../CurriculumVitae/".$_FILES["Curriculum"]["name"]; //path relativa do ficheiro, na directoria corrente deste php move_uploaded_file($origin, $destination); //mover! return $destination; }//saveUploadedFileToCurrentPHPFolder $whereIsTheSavedFile = saveUploadedFileToCurrentPHPFolder('Curriculum'); //se nao se movesse o ficheiro antes do fim deste PHP, seria automatica/ apagado mysql_select_db($database_conexao); $sql = "INSERT INTO registo ( Username, Password, Email, Nome, Data_Nasc, ID_Localizacao, Local, Telefone, ID_Habilitacao, ID_ExpProf, CartaConducao, CartaApresentacao, Curriculum ) VALUES ( '{$Username}', '{$Password}', '{$Email}', '{$Nome}', '{$Data_Nasc}', '{$ID_Localizacao}', '{$Local}', '{$Telefone}', '{$ID_Habilitacao}', '{$ID_ExpProf}', '{$CartaConducao}', '{$CartaApresentacao}', '{$trimimg}' )"; mysql_query($sql); $sql2 = "INSERT INTO rl_registoexpprof ( ID_Registo, ID_ExpProf ) VALUES ( '{$ID_Registo}', '{$ID_ExpProf}' )"; mysql_query($sql2); echo $sql2; print " <META HTTP-EQUIV=REFRESH CONTENT='0; URL=candidatura.php'> <script type=\"text/javascript\"> alert(\"Candidatura enviada com sucesso!\"); </script> "; ?> O que está acontecer é que só está a fazer a ultima instrução sql. E o que guarda na Base de dados é ID_Registo=0 e ID_ExpProf=0. Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
AndreLC Posted May 4, 2012 at 02:00 PM Author Report #453073 Posted May 4, 2012 at 02:00 PM // inserir o imóvel mylsql_query(...); $id_imovel = mysql_insert_id(); // inserir relação mylsql_query(...); Exacto essa função que não me recordava. Obrigado. E quanto às minhas outras questões podes ajudar? echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
AndreLC Posted May 4, 2012 at 02:01 PM Author Report #453074 Posted May 4, 2012 at 02:01 PM Tenta assim: <?php require '../conexao.php'; $Username = $_POST['Username']; $Password = $_POST['Password']; $Email = $_POST['Email']; $Nome = $_POST['Nome']; $Data_Nasc = $_POST['Data_Nasc']; $ID_Localizacao = $_POST['ID_Localizacao']; $Local = $_POST['Local']; $Telefone = $_POST['Telefone']; $ID_Habilitacao = $_POST['ID_Habilitacao']; $ID_ExpProf = $_POST['ID_ExpProf']; $CartaConducao = $_POST['CartaConducao']; $CartaApresentacao = $_POST['CartaApresentacao']; $Curriculum = $_FILES['Curriculum']; $trimimg = $_FILES["Curriculum"]["name"]; //Como estás a obter isto aqui no adicionar se é auto increment? //$ID_Registo = $_POST['ID_Registo']; function saveUploadedFileToCurrentPHPFolder() { $origin = $_FILES["Curriculum"]['tmp_name']; //patch absoluta do ficheiro na origem $destination = "../CurriculumVitae/" . $_FILES["Curriculum"]["name"]; //path relativa do ficheiro, na directoria corrente deste php move_uploaded_file($origin, $destination); //mover! return $destination; } //saveUploadedFileToCurrentPHPFolder $whereIsTheSavedFile = saveUploadedFileToCurrentPHPFolder('Curriculum'); //se nao se movesse o ficheiro antes do fim deste PHP, seria automatica/ apagado mysql_select_db($database_conexao); $sql = "INSERT INTO registo ( Username, Password, Email, Nome, Data_Nasc, ID_Localizacao, Local, Telefone, ID_Habilitacao, ID_ExpProf, CartaConducao, CartaApresentacao, Curriculum ) VALUES ( '{$Username}', '{$Password}', '{$Email}', '{$Nome}', '{$Data_Nasc}', '{$ID_Localizacao}', '{$Local}', '{$Telefone}', '{$ID_Habilitacao}', '{$ID_ExpProf}', '{$CartaConducao}', '{$CartaApresentacao}', '{$trimimg}' )"; mysql_query($sql); //Aqui $ID_Registo = mysql_insert_id(); $sql2 = "INSERT INTO rl_registoexpprof ( ID_Registo, ID_ExpProf ) VALUES ( '{$ID_Registo}', '{$ID_ExpProf}' )"; mysql_query($sql2); echo $sql2; print " <META HTTP-EQUIV=REFRESH CONTENT='0; URL=candidatura.php'> <script type=\"text/javascript\"> alert(\"Candidatura enviada com sucesso!\"); </script> "; ?> estou com o mesmo problema. o meu código para guardar na base de dados está assim: <?php require '../conexao.php'; $Username = $_POST['Username']; $Password = $_POST['Password']; $Email = $_POST['Email']; $Nome = $_POST['Nome']; $Data_Nasc = $_POST['Data_Nasc']; $ID_Localizacao = $_POST['ID_Localizacao']; $Local = $_POST['Local']; $Telefone = $_POST['Telefone']; $ID_Habilitacao = $_POST['ID_Habilitacao']; $ID_ExpProf = $_POST['ID_ExpProf']; $CartaConducao = $_POST['CartaConducao']; $CartaApresentacao = $_POST['CartaApresentacao']; $Curriculum = $_FILES['Curriculum']; $trimimg = $_FILES["Curriculum"]["name"]; $ID_Registo = $_POST['ID_Registo']; function saveUploadedFileToCurrentPHPFolder (){ $origin=$_FILES["Curriculum"]['tmp_name']; //patch absoluta do ficheiro na origem $destination="../CurriculumVitae/".$_FILES["Curriculum"]["name"]; //path relativa do ficheiro, na directoria corrente deste php move_uploaded_file($origin, $destination); //mover! return $destination; }//saveUploadedFileToCurrentPHPFolder $whereIsTheSavedFile = saveUploadedFileToCurrentPHPFolder('Curriculum'); //se nao se movesse o ficheiro antes do fim deste PHP, seria automatica/ apagado mysql_select_db($database_conexao); $sql = "INSERT INTO registo ( Username, Password, Email, Nome, Data_Nasc, ID_Localizacao, Local, Telefone, ID_Habilitacao, ID_ExpProf, CartaConducao, CartaApresentacao, Curriculum ) VALUES ( '{$Username}', '{$Password}', '{$Email}', '{$Nome}', '{$Data_Nasc}', '{$ID_Localizacao}', '{$Local}', '{$Telefone}', '{$ID_Habilitacao}', '{$ID_ExpProf}', '{$CartaConducao}', '{$CartaApresentacao}', '{$trimimg}' )"; mysql_query($sql); $sql2 = "INSERT INTO rl_registoexpprof ( ID_Registo, ID_ExpProf ) VALUES ( '{$ID_Registo}', '{$ID_ExpProf}' )"; mysql_query($sql2); echo $sql2; print " <META HTTP-EQUIV=REFRESH CONTENT='0; URL=candidatura.php'> <script type=\"text/javascript\"> alert(\"Candidatura enviada com sucesso!\"); </script> "; ?> O que está acontecer é que só está a fazer a ultima instrução sql. E o que guarda na Base de dados é ID_Registo=0 e ID_ExpProf=0. echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
HappyHippyHippo Posted May 4, 2012 at 02:13 PM Report #453083 Posted May 4, 2012 at 02:13 PM Seleccionando 6 checkboxes fico com 6 registos na tabela, se seleccionar todas vou ficar com muitas linhas, a tabela vai ficar muito pesada, será mesmo assim? Estou a pensar de maneira certa? Será a melhor maneira? Se fica pesada, sim/não. Pode ficar com muitos registos mas os SGBD tem mecanismos para combater esses casos (indexes, mantendo uma instância da tabela/registos em memória, etc). Caso não seja suficiente (casos raros porque é preciso mesmo muitos registos), existe outras soluções como a duplicação de base de dados para combater limites de acessos/capacidade do servidor, existe a solução de backup/muda de local dos registos mais antigos, etc ... No final de contas, são sempre soluções que se podem aplicar após a instalação inicial, por isso não te preocupes Depois para recuperar os resultados (todas as divisões daquele imóvel) para o browser faço uma query com INNER JOIN? Sim IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AndreLC Posted May 4, 2012 at 02:54 PM Author Report #453111 Posted May 4, 2012 at 02:54 PM Como tenho aquela parte em ciclo a gerar as checkboxes e como o name está com array... Como faço o ciclo correctamente para guardar os registos das checkboxes e da respectiva descricao e dos m2 na tabela de associação imovel_divisoes? //Aqui não há problema $query_imoveis = "INSERT INTO imoveis (...)"; mysql_query($query_imoveis); $id_imovel = mysql_insert_id(); //Aqui as minhas dúvidas: //Como as checks no outro lado estão em ciclo aqui também terei que colocar algum ciclo, mas como ficaria? //if isset($_POST['divisoes']) ? Deve faltar mais que isto concerteza... Talvez um for, while, foreach... ? //{ $query_imoveldivisoes = "INSERT INTO imovel_divisoes (imovel_id, divisao_id, descricao, metros_quadrados) VALUES ('$id_imovel', '???', '???', '???')"; mysql_query($query_imoveldivisoes); //} Obrigado pela ajuda. echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
HappyHippyHippo Posted May 4, 2012 at 03:20 PM Report #453123 Posted May 4, 2012 at 03:20 PM não sei como tens a enviar os dados para o PHP vindo dos checkboxes ... no entanto será algo deste género: // inserir imóvel ... // obter a lista de divisões $rs = mylsql_query(...) while (($record = mysql_array_fetch($record_set)) != null) { // verificar se a info/id do registo vem assinalada pelos checkboxes if (......) { // inserir relação ... } } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AndreLC Posted May 4, 2012 at 04:40 PM Author Report #453157 Posted May 4, 2012 at 04:40 PM Estou a enviar os dados assim: <?php $q = mysql_query("SELECT * from divisao"); while($nomes = mysql_fetch_array($q)){ ?> <input type="checkbox" name="divisoes[]" id="<?php echo $nomes["id"]; ?>" value="<?php echo $nomes["nome"]; ?>" onClick="chckd()"><?php echo $nomes["nome"]; ?> <div id="div_<?php echo $nomes["id"]; ?>" style="display: none;"> <input name="desc_<?php echo $nomes["nome"]; ?>" type="text" id="desc_<?php echo $nomes["nome"]; ?>" size="61" value="Digite aqui a descrição" onfocus="if (this.value == 'Digite aqui a descrição') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Digite aqui a descrição';}" class="form_pesquisa" /> <input name="area_<?php echo $nomes["id"]; ?>" type="text" id="area_<?php echo $nomes["id"]; ?>" size="2" /> <label>m²</label></div> <?php }; ?> Do género: // inserir imóvel ... // obter a lista de divisões $rs = mysql_query("SELECT * from divisao"); while (($divisoes = mysql_fetch_array($rs)) != null) { // verificar se a info/id do registo vem assinalada pelos checkboxes if (isset($_POST['divisoes'])){ //foreach($_POST['divisoes'] as $divisao){ ???? $query_imoveisdivisoes = "INSERT INTO imovel_divisoes (imovel_id, divisao_id, descricao, metros_quadrados) VALUES ('$id_imovel', '$divisao???', '???', '???')"; mysql_query($query_imoveisdivisoes); //} //foreach } //if } //while ??? Coloquei assim mas ainda não está lá. Como obtenho também o nome da caixa de texto da descrição assim: desc_<?php echo $nomes["nome"]; ?> e dos metros quadrados assim: area_<?php echo $nomes["id"]; ?> como trato isto? Obrigado. echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
brunoais Posted May 5, 2012 at 09:39 AM Report #453246 Posted May 5, 2012 at 09:39 AM Como tens: Estou a enviar os dados assim: <?php $q = mysql_query("SELECT * from divisao"); while($nomes = mysql_fetch_array($q)){ ?> <input type="checkbox" name="divisoes[]" id="<?php echo $nomes["id"]; ?>" value="<?php echo $nomes["nome"]; ?>" onClick="chckd()"> divisoes é um array. Para acederes aos valores é: $_POST['divisoes'][0] $_POST['divisoes'][1] ..... claro que, se nenhum for enviado, $_POST['divisoes'] não está definido. Para este caso <?php $q = mysql_query("SELECT * from divisao"); while($nomes = mysql_fetch_array($q)){ ?> <input type="checkbox" name="divisoes[]" id="<?php echo $nomes["id"]; ?>" value="<?php echo $nomes["nome"]; ?>" onClick="chckd()"><?php echo $nomes["nome"]; ?> <div id="div_<?php echo $nomes["id"]; ?>" style="display: none;"> <input name="desc_<?php echo $nomes["nome"]; ?>" type="text" id="desc_<?php echo $nomes["nome"]; ?>" size="61" value="Digite aqui a descrição" onfocus="if (this.value == 'Digite aqui a descrição') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Digite aqui a descrição';}" class="form_pesquisa" /> <input name="area_<?php echo $nomes["id"]; ?>" type="text" id="area_<?php echo $nomes["id"]; ?>" size="2" /> <label>m²</label></div> Tu estás a tramar todos (incluindo a ti). Usa algo do tipo para o nome: <input name="desc[<?php echo $numeroId ?>]" Depois vais buscá-lo usando: $_POST['desc'][$numeroId] Funciona, pelo menos, com o php. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
AndreLC Posted May 9, 2012 at 11:39 AM Author Report #454043 Posted May 9, 2012 at 11:39 AM Bem visto! Já insere na tabela de associação, mas agora há um pequeno problema... Fazendo um echo à query, reparo que me retorna 31 (que é o número de checkboxes que tenho) INSERT INTO, contudo adiciona somente na tabela uma vez como se esperava, mas queria colocar isto correctamente. A imagem do echo à query: http://img856.imageshack.us/img856/3765/abclq.jpg Sei que é por estar dentro do ciclo, mas se retirar dentro do ciclo, se eu seleccionar 3 checkboxes, por exemplo, apenas grava-me a informação da última checkbox na tabela. Queria corrigir essa situação. Poderiam ver o que se passa? Tenho assim: //INSERT de Imoveis - Aqui tudo bem $query_imoveis = "INSERT INTO imoveis (...) VALUES (...)"; mysql_query($query_imoveis); $id_imovel = mysql_insert_id(); //INSERT de imovel_divisoes na tabela de associação (DÚVIDA) // obter a lista de divisões $rs = mysql_query("SELECT * from divisao"); while (($divisoes = mysql_fetch_array($rs)) != null) { // verificar se a info/id do registo vem assinalada pelos checkboxes if (isset($_POST['divisoes'])) { foreach ($_POST['divisoes'] as $key => $id_divisao) { $desc_divisao = $_POST['desc'][$id_divisao]; $metros = $_POST['area'][$id_divisao]; $query_imoveisdivisoes = "INSERT INTO `imovel_divisoes` (imovel_id, divisao_id, descricao, metros_quadrados) VALUES ('$id_imovel', '$id_divisao', '$desc_divisao', '$metros')"; mysql_query($query_imoveisdivisoes); //echo $query_imoveisdivisoes; } //foreach } //if } //while EDIT: Agora tendo o adicionar como faço para o actualizar e o apagar? Pois, por exemplo, no actualizar se escolher mais outra checkbox terá que inserir um novo registo na terceira tabela, mas se quiser desmarcar uma checkbox que já tivesse inserido terá que apagar o registo na terceira tabela, então não vai ser bem um update não é verdade? A ideia seria como este exemplo: http://examples.codecharge.com/ExamplePack/ManyToManyCheckbox/ManyToManyCheckbox.php Obrigado pela atenção e ajuda. echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
Etiqueta Posted May 9, 2012 at 02:07 PM Report #454072 Posted May 9, 2012 at 02:07 PM eu também estou com a mesma dúvida. Alguém pode ajudar sff? Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
AndreLC Posted May 9, 2012 at 05:14 PM Author Report #454129 Posted May 9, 2012 at 05:14 PM Podem dar uma vista de olhos, por favor? Obrigado. Com os melhores cumprimentos, AndreLC echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
naoliveira Posted May 10, 2012 at 08:59 AM Report #454215 Posted May 10, 2012 at 08:59 AM Uma solução é, antes do update, apagares todos os registos da tabela `imovel_divisoes` pertencentes ao imovel_id que estás a trabalhar, depois voltas a inserir todos as checkboxes.
AndreLC Posted May 10, 2012 at 10:26 AM Author Report #454239 Posted May 10, 2012 at 10:26 AM Mas assim quando iria para fazer o editar nenhuma checkbox aparecia como checked ou percebi mal? Poderias exemplificar? Obrigado. Uma solução é, antes do update, apagares todos os registos da tabela `imovel_divisoes` pertencentes ao imovel_id que estás a trabalhar, depois voltas a inserir todos as checkboxes. echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now