Sunset 0 Denunciar post Postado Outubro 16, 2015 E ae galera, blz? É o seguinte estou fazendo um sistema de cadastro de anuncio de imoveis com múltiplas imagens, tenho uma tabela no banco chamada anuncio, que tem os campos: id_anuncio(pk, not null, auto-increment), nome_anuncio(varchar, notnull). E uma tabela chamada foto que é a tabela que vai conter as fotos de cada anuncio, a tabela foto tem os campos: id_foto(pk, not null, auto-increment), arquivo(varchar, not null), anuncio_id_anuncio(chave estrangeira de id_anuncio). O problema é que não estou conseguindo deixar somente o ultimo id pra cada foto do ultimo anuncio, utilizei o mysql_insert_id e ele deixou cada foto com um id_anuncio diferente, explicando melhor, ficou assim no banco de dados: tabela anuncio: id_anuncio | nome_anuncio 1 | casa 2 | casa 3 | casa tabela foto: id_foto | arquivo | anuncio_id_anuncio 10 | imovel01.png | 1 11 | imovel02.png | 2 12 | imovel03.png | 3 o que eu queria era deixar assim: tabela anuncio: id_anuncio | nome_anuncio 1 | casa 1 | casa 2 | apartamento 2 | apartamento 2 | apartamento tabela foto: id_foto | arquivo | anuncio_id_anuncio 10 | imovel01.png | 1 11 | imovel02.png | 1 12 | imovel03.png | 1 13 | imovel04.png | 2 14 | imovel05.png | 2 15 | imovel06.png | 2 Quando eu escolho mais de uma foto, e depois clico em enviar(submit) pro banco de dados, em vez de utilizar somente o id daquele anuncio pra várias fotos, ele cria um id_anuncio pra cada foto. O meu sistema cadastro eu fiz de 2 etapas, a primeira etapa é cadastrado o nome(nome_anuncio) e quando clicar em enviar, o outro form pega o nome(nome_anuncio) e o usuario escolhe as fotos e depois de clicar em enviar, envia pro banco de dados. Fiz de outra forma também, mais também não deu certo, a outra forma era assim: O Usuario digitava o nome e quando clicava em enviar(submit) já salvava no banco de dados e redirecionava pra parte de cadastrar as fotos, mais não consegui pegar o ultimo id do anuncio com o mysql_insert_id pois o 2º INSERT(insert na tabela foto) do banco estava em outro bloco do codigo, diferente da primeira forma que fiz, que o 2º Insert(insert da tabela foto) ficou logo em seguida do primeiro, segue abaixo o codigo que fica melhor pro entendimento. Banco: CREATE TABLE IF NOT EXISTS `mydb`.`anuncio` ( `id_anuncio` INT NOT NULL AUTO_INCREMENT, `nome_anuncio` VARCHAR(45) NOT NULL, PRIMARY KEY (`id_anuncio`)) ENGINE = InnoDB; CREATE TABLE IF NOT EXISTS `mydb`.`foto` ( `id_foto` INT NOT NULL AUTO_INCREMENT, `arquivo` VARCHAR(255) NOT NULL, `anuncio_id_anuncio` INT NOT NULL, PRIMARY KEY (`id_foto`), INDEX `fk_foto_anuncio_idx` (`anuncio_id_anuncio` ASC), CONSTRAINT `fk_foto_anuncio` FOREIGN KEY (`anuncio_id_anuncio`) REFERENCES `mydb`.`anuncio` (`id_anuncio`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; Form 1, Nome_Anuncio, prin.php: <html> <head> </head> <body> <form name='form' action="images.php" method="POST" enctype="multipart/form-data"> Nome <input type="text" name="nome_anuncio" value="" /> <br> <br> <br> <br> <br> <br> <br><br> <input type="submit" name="button" id="button" value="Enviar" /> </form> <br> <br> <br> <br> <br> </body> </html> Form 2, Foto, images.php: <html> <head> </head> <body> <form action="upload.php?funcao=gravar" method="POST" enctype="multipart/form-data"> Selecionar <input type="text" name="nome_anuncio" value="" /> <input type="hidden" name="nome_anuncio" value="<?php echo $_POST['nome_anuncio']; ?>">--> <input type="hidden" name="id_foto" value="" /> <input type="file" name="arquivo[]" multiple="" /> <input type="submit" name="button" id="button" value="Enviar" /> </form> <br> <br> <br> <br> </body> </html> Codigo do upload de imagens, upload.php: <?php include_once("conexion.php"); if($_GET['funcao'] == "gravar"){ //$foto = $_FILES['arquivo']['name']; foreach($_FILES['arquivo']['tmp_name'] as $key => $tmp_name ){ $foto = $key.$_FILES['arquivo']['name'][$key]; //$foto_tmp = $_FILES['arquivo']['tmp_name'][$key]; //$foto_size =$_FILES['arquivo']['size'][$key]; $file_tmp =$_FILES['arquivo']['tmp_name'][$key]; $foto_type =$_FILES['arquivo']['type'][$key]; $foto = str_replace(" ", "_", $foto); $foto = str_replace("ã", "a", $foto); $foto = str_replace("á", "a", $foto); $foto = str_replace("à", "a", $foto); $foto = str_replace("é", "e", $foto); $foto = str_replace("ê", "e", $foto); $foto = str_replace("è", "e", $foto); $foto = str_replace("í", "i", $foto); $foto = str_replace("ì", "_", $foto); $foto = str_replace("ó", "o", $foto); $foto = str_replace("õ", "o", $foto); $foto = str_replace("ç", "c", $foto); $foto = strtolower($foto); $tipos = array('image/jpeg', 'image/pjpeg', 'image/jpeg', 'image/pjpeg', 'image/gif', 'image/png'); // $arqType = $_FILES['arquivo']['type']; // $foto_type = $_FILES['arquivo']['type']; if(array_search($foto_type, $tipos) == false){ echo("Formato inválido"); /* " <meta http-equiv=refresh content='0; url=index.php'> * <script type='text/javascript'> * alert('Formato inválido'); * </script> "; */ }else{ if(file_exists("fotos/$foto")) { $a = 1; while(file_exists("fotos/[$a]$fotos")) { $a++; } $foto = "[".$a."]". $foto; } // if(!move_uploaded_file($_FILES['arquivo']['tmp_name'], "fotos/".$foto)) { if(!move_uploaded_file($file_tmp, "fotos/".$foto)) { echo ("Erro no upload do arquivo"); /* " * <meta http-equiv=refresh content='0; url=index.php'> * <script type='text/javascript'> * alert('Erro no upload do arquivo'); * </script> "; */ } $nome_anuncio = $_POST["nome_anuncio"]; $sql = mysql_query("INSERT INTO anuncio(nome_anuncio) value ('$nome_anuncio')"); $id_anuncio = mysql_insert_id(); $sql = mysql_query("INSERT INTO foto(arquivo, anuncio_id_anuncio) value ('$foto', '$id_anuncio')"); // $id_anuncio = $_GET mysql_insert_id (); //header("Location: images.php"); } } } else{ //header("Location: images.php"); } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Helmesvs 10 Denunciar post Postado Outubro 16, 2015 Acho mais viavel deixar em uma tabela só. Se uma foto é referente a um determiado anuncio eles podem ficar na mesma linha, da mesma tabela.. Compartilhar este post Link para o post Compartilhar em outros sites
Diegus Miestro 21 Denunciar post Postado Outubro 16, 2015 Cara, Tem um Loop com um insert mysql dentro, logo ele vai ficar salvando pra cada item do loop. Eu aconselho o seguinte. Você pode criar o anuncio em uma tela com todas as suas informações, acredito que um anuncio vá mais que o próprio nome já que me pareceu ser vendas, e depois acessar o anuncio criado e cadastrar as fotos, dai vc passa o ID do anuncio já criado com as fotos que serão implementadas ou Em uma mesma tela faça tudo, ou deixe como está, mas salva primeiramente o anuncio para depois criar um loop com as fotos e salva-las, senão será criado um anuncio para cada foto, pois ele vai incrementando o ID a cada novo registro. Compartilhar este post Link para o post Compartilhar em outros sites
Sunset 0 Denunciar post Postado Outubro 16, 2015 Acho mais viavel deixar em uma tabela só. Se uma foto é referente a um determiado anuncio eles podem ficar na mesma linha, da mesma tabela.. Olá amigo, já tentei dessa forma, mais da o problema que eu citei, ele vai gerar um id pra cada foto na tabela. Mais obrigado pela sua ajuda. Cara, Tem um Loop com um insert mysql dentro, logo ele vai ficar salvando pra cada item do loop. Eu aconselho o seguinte. Você pode criar o anuncio em uma tela com todas as suas informações, acredito que um anuncio vá mais que o próprio nome já que me pareceu ser vendas, e depois acessar o anuncio criado e cadastrar as fotos, dai você passa o ID do anuncio já criado com as fotos que serão implementadas ou Em uma mesma tela faça tudo, ou deixe como está, mas salva primeiramente o anuncio para depois criar um loop com as fotos e salva-las, senão será criado um anuncio para cada foto, pois ele vai incrementando o ID a cada novo registro. Nossa amigo, você não tem ideia de quanto me ajudou aqui, depois da sua dica conseguir resolver o problema aqui, fiz o que você disse e coloquei antes do loop(foreach), botei o primeiro insert(insert do anuncio) antes do foreach e depois do foreach botei o segundo insert e funcionou perfeitamente. Depois disso que eu vi que o problema era mais simples do que parece. Além do nome vão ter outros campos sim, só faltava corrigir esse problema pra implementar eles. Muito obrigado mesmo. Vou postar o codigo abaixo, como ficou: Só modifiquei o arquivo upload.php: <?php include_once("conexion.php"); if($_GET['funcao'] == "gravar"){ //$foto = $_FILES['arquivo']['name']; $nome_anuncio = $_POST["nome_anuncio"]; $sql = mysql_query("INSERT INTO anuncio(nome_anuncio) value ('$nome_anuncio')"); $id_anuncio = mysql_insert_id(); foreach($_FILES['arquivo']['tmp_name'] as $key => $tmp_name ){ $foto = $key.$_FILES['arquivo']['name'][$key]; //$foto_tmp = $_FILES['arquivo']['tmp_name'][$key]; //$foto_size =$_FILES['arquivo']['size'][$key]; $file_tmp =$_FILES['arquivo']['tmp_name'][$key]; $foto_type =$_FILES['arquivo']['type'][$key]; $foto = str_replace(" ", "_", $foto); $foto = str_replace("ã", "a", $foto); $foto = str_replace("á", "a", $foto); $foto = str_replace("à", "a", $foto); $foto = str_replace("é", "e", $foto); $foto = str_replace("ê", "e", $foto); $foto = str_replace("è", "e", $foto); $foto = str_replace("í", "i", $foto); $foto = str_replace("ì", "_", $foto); $foto = str_replace("ó", "o", $foto); $foto = str_replace("õ", "o", $foto); $foto = str_replace("ç", "c", $foto); $foto = strtolower($foto); $tipos = array('image/jpeg', 'image/pjpeg', 'image/jpeg', 'image/pjpeg', 'image/gif', 'image/png'); // $arqType = $_FILES['arquivo']['type']; // $foto_type = $_FILES['arquivo']['type']; if(array_search($foto_type, $tipos) == false){ echo("Formato inválido"); /* " <meta http-equiv=refresh content='0; url=index.php'> * <script type='text/javascript'> * alert('Formato inválido'); * </script> "; */ }else{ if(file_exists("fotos/$foto")) { $a = 1; while(file_exists("fotos/[$a]$fotos")) { $a++; } $foto = "[".$a."]". $foto; } // if(!move_uploaded_file($_FILES['arquivo']['tmp_name'], "fotos/".$foto)) { if(!move_uploaded_file($file_tmp, "fotos/".$foto)) { echo ("Erro no upload do arquivo"); /* " * <meta http-equiv=refresh content='0; url=index.php'> * <script type='text/javascript'> * alert('Erro no upload do arquivo'); * </script> "; */ } $sql = mysql_query("INSERT INTO foto(arquivo, anuncio_id_anuncio) value ('$foto', '$id_anuncio')"); //header("Location: images.php"); } } } else{ //header("Location: images.php"); } //fehca o foreach //}else{ //header("Location: index.php"); ?> Compartilhar este post Link para o post Compartilhar em outros sites