Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vai.vini

Problema com PHP e MySQL

Recommended Posts

Jovens, seguinte....  um banco com 4 tabelas, uma CEP, ESTADO, ENDEREÇO, CIDADE. 

A Tabela de endereço vai receber o ID das outras 3, como faço pra na hora do INSERT, não repetir campos, e os id's serem relacionados da forma correta? 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 minutos atrás, vai.vini disse:

Jovens, seguinte....  um banco com 4 tabelas, uma CEP, ESTADO, ENDEREÇO, CIDADE. 

A Tabela de endereço vai receber o ID das outras 3, como faço pra na hora do INSERT, não repetir campos, e os id's serem relacionados da forma correta? 

 

Tentei com o Select Max(id_estado), mas retorna sempre o ultimo registro inserido(estado), só que não quero o ultimo estado e sim, o estado correspondente  ao que o usuário digitou agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 horas atrás, diego3g disse:

Opa Vini, beleza? Podes mostrar o script php que você está utilizando para inserir no banco?

 

Valeu.

Eh um insertzinho simples:


                  

 /* Verifica a conexão */
                    if (!$conexao) {
                        printf("Erro na conexão %s\n", mysqli_error($conexao));
                        exit();
                    }else{
                        
                        $sql = "INSERT INTO `tb_bairros`(`bairro_nome`) VALUES ('$bairro')";
                        $result = mysqli_query($conexao, $sql);
                    
                        $sql = "INSERT INTO tb_cidades(`cidade_nome`) VALUES('$cidade')";
                        $result = mysqli_query($conexao, $sql);
            
                        $sql = "INSERT INTO tb_ufs(`uf_sigla`) VALUES('$estado')";
                        $result = mysqli_query($conexao, $sql);

                        $sql = "INSERT INTO tb_ceps (`cep_numero`) VALUES('$cep_numero')";
                        $result = mysqli_query($conexao, $sql);                        
                        
                        $sql = "INSERT INTO tb_enderecos(`endereco_logradouro`) VALUES('$logradouro')";
                        $result = mysqli_query($conexao, $sql);





Agora todas as tabelas possuem ID's só quero relaciona-las na tabela endereço, só não sei como. Por exemplo, endereço, vai receber o ID_BAIRRO, ID_CIDADE, ID_UF, ID_CEP, entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vini, então, percebi aqui que falta você falar no insert qual é esse ID que você está querendo inserir. No PHP você tem uma propriedade chamada insert_id que retorna o ID do último registro salvo. No seu caso teria que ser algo assim:

 

$sql = "INSERT INTO tb_ufs(`uf_sigla`) VALUES('$estado')";
$result = mysqli_query($conexao, $sql);

$idEstado = $result->insert_id;

$sql = "INSERT INTO tb_cidades(`cidade_nome`, `uf_id`) VALUES('$cidade', '$idEstado')";
$result = mysqli_query($conexao, $sql);

Você precisa fazer as queries em ordem, primeiro o estado, dai cidade, dai cep, depois bairro e depois rua, para conseguir injetar o ID da query acima na de baixo.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 2017-5-29 at 17:10, diego3g disse:

Vini, então, percebi aqui que falta você falar no insert qual é esse ID que você está querendo inserir. No PHP você tem uma propriedade chamada insert_id que retorna o ID do último registro salvo. No seu caso teria que ser algo assim:

 


$sql = "INSERT INTO tb_ufs(`uf_sigla`) VALUES('$estado')";
$result = mysqli_query($conexao, $sql);

$idEstado = $result->insert_id;

$sql = "INSERT INTO tb_cidades(`cidade_nome`, `uf_id`) VALUES('$cidade', '$idEstado')";
$result = mysqli_query($conexao, $sql);

Você precisa fazer as queries em ordem, primeiro o estado, dai cidade, dai cep, depois bairro e depois rua, para conseguir injetar o ID da query acima na de baixo.

 

Abraço.

 

 

Ainda não consegui... segue código:           

    <html>
    <head>
    <title>Consulta CEP</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <!-- Adicionando JQuery -->
    <script src="//code.jquery.com/jquery-3.2.1.min.js"></script>

    <!-- Adicionando Javascript -->
    <script type="text/javascript" >

        $(document).ready(function() {

            function limpa_formulário_cep() {
                // Limpa valores do formulário de cep.
                $("#logradouro").val("");
                $("#bairro").val("");
                $("#cidade").val("");
                $("#uf").val("");
                $("#ibge").val("");
            }
            
            //Quando o campo cep perde o foco.
            $("#cep").blur(function() {

                //Nova variável "cep" somente com dígitos.
                var cep = $(this).val().replace(/\D/g, '');

                //Verifica se campo cep possui valor informado.
                if (cep != "") {

                    //Expressão regular para validar o CEP.
                    var validacep = /^[0-9]{8}$/;

                    //Valida o formato do CEP.
                    if(validacep.test(cep)) {

                        //Preenche os campos com "..." enquanto consulta webservice.
                        $("#logradouro").val("...");
                        $("#bairro").val("...");
                        $("#cidade").val("...");
                        $("#uf").val("...");
                        $("#ibge").val("...");

                        //Consulta o webservice viacep.com.br/
                        $.getJSON("//viacep.com.br/ws/"+ cep +"/json/?callback=?", function(dados) {

                            if (!("erro" in dados)) {
                                //Atualiza os campos com os valores da consulta.
                                $("#logradouro").val(dados.logradouro);
                                $("#bairro").val(dados.bairro);
                                $("#cidade").val(dados.localidade);
                                $("#uf").val(dados.uf);
                                $("#ibge").val(dados.ibge);
                            } //end if.
                            else {
                                //CEP pesquisado não foi encontrado.
                                limpa_formulário_cep();
                                alert("CEP não encontrado.");
                            }
                        });
                    } //end if.
                    else {
                        //cep é inválido.
                        limpa_formulário_cep();
                        alert("Formato de CEP inválido.");
                    }
                } //end if.
                else {
                    //cep sem valor, limpa formulário.
                    limpa_formulário_cep();
                }
            });
        });

    </script>
				
    </head>

<body>
			<?php
			if(!isset($_POST['submit']))
			{

            ?>
			<!-- Inicio do formulario -->
            <form  action="" method="POST">
				<label>Cep:
				<input name="cep" type="text" id="cep"  size="10" maxlength="9" /></label><br />
				<label>Rua:
				<input name="logradouro" type="text" id="logradouro" size="60" /></label><br />
				<label>Bairro:
				<input name="bairro" type="text" id="bairro" size="40" /></label><br />
				<label>Cidade:
				<input name="cidade" type="text" id="cidade" size="40" /></label><br />
				<label>Estado:
				<input name="uf" type="text" id="uf" size="2" /></label><br />
				<input type="submit" value="Inserir" name="submit" > 
			  </form>
	  
			
			<?php 
				}
				else{
					$cep = $_POST['cep'];
					$logradouro = $_POST['logradouro'];
					$bairro = $_POST['bairro'];
					$cidade = $_POST['cidade'];
					$estado = $_POST['uf'];
					
					$conexao = mysqli_connect('localhost', 'root', '', 'n');
					mysqli_set_charset($conexao, 'utf8');
					
					/* Verifica a conexão */
					if (!$conexao) {
						printf("Erro na conexão %s\n", mysqli_error($conexao));
						exit();
					}else{
									
						
					
						$sql = "INSERT INTO tb_ufs(`uf_sigla`) VALUES('$estado')";
						$result = mysqli_query($conexao, $sql);
						$idEstado = "SELECT LAST_INSERT_ID()";
						
						$sql = "INSERT INTO tb_cidades(`cidade_nome`, `uf_id`) VALUES('$cidade', '$idEstado')";
						$result = mysqli_query($conexao, $sql);
						$idCidade = "SELECT LAST_INSERT_ID()";
						
						$sql = "INSERT INTO tb_ceps(`cep_numero`) VALUES('$cep')";
						$result = mysqli_query($conexao, $sql);
						$idCep = "SELECT LAST_INSERT_ID()";
						
						$sql = "INSERT INTO `tb_bairros`(`bairro_nome`) VALUES ('$bairro')";
						$result = mysqli_query($conexao, $sql);
						$idBairro = "SELECT LAST_INSERT_ID()";

						$sql = "INSERT INTO tb_enderecos(`endereco_logradouro`,`cidade_id`, `bairro_id`, `cep_id` ) VALUES('$logradouro', '$idCidade','$idBairro', '$idCep')";
						$result = mysqli_query($conexao, $sql);
						

			

						mysqli_close($conexao);
					}
				}
				?>
</body>

</html>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por douglas79
      Bom dia,

      Há alguns dias que venho instalar o apache, o php, mysql e o phpmyadmin manualmente e sem obter sucesso. Até consegui rodar o php, porém, quando vou baixar a úitima versão do MYSQL, não tem todos os pacotes nele instalados, inclusive no completo, só encontro o Router.
      Alguém pode me dizer o porquê que isso está ocorrendo?
      Desde já agradeço a ajuda de vocês, que será bem vinda!
      No aguardo!

      Uso a versão 8.3.9 do PHP
      Meu SO é o Windows 10 32 bits
    • Por landerbadi
      Tenho uma tabela chamada "item" com os seguintes campos: id, name, active. Nela tem cadastrado vários itens. No campo "active" eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo active. E outra tabela chamada "product" com os seguintes campos (id, name) com os seguintes registros: 1, Produto A 2, Produto B 3, Produto C E uma terceira tabela chamada "product_item" com os seguintes campos (productID, itemID). No campo productID eu coloco o id de um produto da tabela "product" e no campo "itemID" eu coloco o id do produto da tabela "item". Exemplo: 1, 1 1, 3 1, 4 2, 3 2, 4 Sendo assim o produto A da tabela 'product" comtem os itens casa, cama e moto. Eu preciso fazer uma busca da seguinte maneira:  Eu escolho um registro da tabela "item", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "product" que contenham a palavra "casa" e que os demais itens estejam ativos no siste. Ou seja, que contenham um "S" no campo "active"  Eu consegui fazer isso da seguinte maneira: SELECT P.id, P.name, GROUP_CONCAT(I.name ORDER BY I.name) AS items FROM product P JOIN product_item PI ON P.id = PI.productID JOIN item I ON I.id = PI.itemID AND I.active = 'S' WHERE P.id NOT IN ( SELECT PI.productID FROM product_item PI JOIN item I ON I.id = PI.itemID WHERE I.active IS NULL ) AND P.id IN ( SELECT PI.productID FROM product_item PI JOIN item I ON I.id = PI.itemID WHERE I.name = 'mesa' ) GROUP BY P.id, P.name; O problema que eu estou tendo é o seguinte:
      Quando eu jogo este código para o banco de dados onde eu já tenho os registros cadastrado o php fica lendo uma eternidade e não lista os produtos.
       
      Usando código no banco de dados que eu fiz para testes ele funciona perfeitamente pois nele tem poucos registros.
       
      No banco de dados principal a tabela "item" tem 11.196 registros. A tabela "product" tem 88.214 registros e a tabela "product_item" tem 518.378 registros. 
       
      Eu acredito que, devido o banco de dados ser muito grande, ele não consegue listar.
       
      Alguém sabe de algum meio de resolver isso?
       
       
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.