Ir para conteúdo
Fórum Script Brasil
  • 0

Múltiplas Tabelas


Maiara17

Pergunta

Olá, eu tenho 4 tabelas, uma estado, cidade, endereço e cliente. Quando o cliente fizer o cadastro no sistema as informações que ele informou terá que ir para as respectivas tabelas descritas anteriormente.  Tentei usar 4 select, como mostra o código abaixo, porem da erro. Preciso que alguém me ajude pfv, desde já agradeço.

 

 

$conexao = conectaBD();
$sql3= 'INSERT INTO estado( nome) values(?)';
$stmt3->bind_param("s", $dados['nome']);
$stmt3->execute();


$conexao = conectaBD();
$sql4= 'INSERT INTO cidade( nome, estado_id_estado) values(?,?)';
$stmt4->bind_param("ss", $dados['nome'],  $dados['id_estado']);
$stmt4->execute();

$conexao = conectaBD();
$sql2= 'INSERT INTO endereco( rua, cep, numero, complemento, id_cidade, id_cliente) values(?,?,?,?,?,?)';
$stmt2->bind_param("ssisss", $dados['rua'], $dados['cep'], $dados['numero'], $dados['complemento'], $dados['id_cidade'], 
$dados['id']);
$stmt2->execute();

$conexao = conectaBD();
$sql = 'INSERT INTO cliente (nome, email, senha, telefone) values(?,?,?,?)';
$stmt = $conexao->prepare($sql);
$stmt->bind_param("sssssissss", $dados['nome'], $dados['email'], $dados['senha'], $dados['telefone']);
$stmt->execute();

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

1- você postou na secao errada;
2- se é tudo 1 pg so, não precisa repetir a linha de conexao;
3- se as variaveis vem d 1 form, tem q declarar o campo do form
e o metodo. 1 ex completo simples
(supondo que a conexao está ok):

$stmt3=$pdo->prepare('INSERT INTO estado(nome) values(?)');
$stmt3->bindParam(1, $_POST['nome']);
$stmt3->execute();

// faz um if depois
if($stmt3->execute())
{
echo "registro inserido com sucesso";
}
else
{
echo "houve um problema";
}

4- dicas boas de PDO:
https://www.devmedia.com.br/introducao-ao-php-pdo/24973
https://www.devmedia.com.br/crud-com-php-pdo/28873
https://www.devmedia.com.br/usando-pdo-php-data-objects-para-aumentar-a-produtividade/28446
http://www.rafaelwendel.com/2011/12/tutorial-pdo-php-data-object/

qqer coisa retorne com as mensagens de erro

Editado por Marcelo_2
Link para o comentário
Compartilhar em outros sites

  • 0

ah, pera ahe.. se você esta usando mysqli não precisa repetir, tenta assim
(exemplo):

$stmt=$conn->prepare('INSERT INTO endereco(rua, cep, numero, complemento, id_cidade, id_cliente) values(?,?,?,?,?,?)');
$stmt->bind_param("ssssii", $_POST['rua'], $_POST['cep'], $_POST['numero'], $_POST['complemento'], $_POST['id_cidade'], $_POST['id_cliente']);

tem exemplo aqui tb:
https://www.w3schools.com/php/php_mysql_prepared_statements.asp

2 obs:
1- eu não faria insert na tabela de estados; faz 1 tabela no BD,
e no form você usa um select;
ex:

<select name="select_estado">
    <option value="1">Acre</option>
    <option value="2">Alagoas</option>
    <option value="3">Amapá</option>
    <option value="4">Amazonas</option>
    <option value="5">Bahia</option>
    <option value="6">Ceará</option>
    <option value="7">Distrito Federal</option>
    <option value="8">Espírito Santo</option>
    <option value="9">Goiás</option>
    <option value="10">Maranhão</option>
    <option value="11">Mato Grosso</option>
    <option value="12">Mato Grosso do Sul</option>
    <option value="13">Minas Gerais</option>
    <option value="14">Pará</option>
    <option value="15">Paraíba</option>
    <option value="16">Paraná</option>
    <option value="17">Pernambuco</option>
    <option value="18">Piauí</option>
    <option value="19">Rio de Janeiro</option>
    <option value="20">Rio Grande do Norte</option>
    <option value="21">Rio Grande do Sul</option>
    <option value="22">Rondônia</option>
    <option value="23">Roraima</option>
    <option value="24">Santa Catarina</option>
    <option value="25">São Paulo</option>
    <option value="26">Sergipe</option>
    <option value="27">Tocantins</option>
</select>

("made by" google..rs)..

e no insert (PHP) de cidade faz assim:
$_POST['select_estado']

2- atencao que você esqueceu da instrucao "prepare" em varias linhas..

 

Link para o comentário
Compartilhar em outros sites

  • 0

ok deu certo muito Obrigado. Eu tenho outro form, mas esse ele cadastra em duas tabela a cliente e no endereço, o processa que eu uso pra cadastrar os dois é esse abaixo. Mas ele cadastra apenas as informações do cliente e do endereço não.

 

<?php


if(isset($_POST['cadastro'])){
    
$nome = $_POST['nome'];
$email = $_POST['email'];
$senha = $_POST['senha'];
$rua = $_POST['rua'];
$cep = $_POST['cep'];
$numero = $_POST['numero']; 
$complemento = $_POST['complemento'];

$telefone = $_POST['telefone'];

$senha=md5($senha);

$dados = [
"nome"=>$nome,
 "email"=> $email,
  "senha"=> $senha,
   "rua"=> $rua,
    "cep"=> $cep,
     "numero"=> $numero,
      "complemento"=> $complemento,
    
"telefone"=> $telefone];


inserirUsuario($dados);

 echo"
     <META HTTP-EQUIV=REFRESH CONTENT = '0; URL=
     http://localhost/tcc/index_cliente.php'>
     <script type=\"text/javascript\">
     alert(\"Cadastro feito com sucesso.\");
     </script>
     ";
}
     
 ?> 
<?php 


function conectaBD(){
$host="localhost";
$user="root";
$password="";
$bd="tcc";

$conexao= new mysqli($host, $user, $password, $bd);
if (mysqli_connect_errno())trigger_error(mysqli_connect_errot());
return $conexao;

}

/* Insere um novo registro de cliente no banco */
function inserirUsuario($dados){
//Abrindo a conexao


$conexao = conectaBD();
$sql2= 'INSERT INTO endereco( rua, cep, numero, complemento) values(?,?,?,?)';
$stmt2->bind_param("ssis", $dados['rua'], $dados['cep'], $dados['numero'], $dados['complemento']);
$sql = 'INSERT INTO cliente (nome, email, senha, telefone) values(?,?,?,?)';
$stmt->bind_param("ssss", $dados['nome'], $dados['email'], $dados['senha'], $dados['telefone']);

$stmt2 = $conexao->prepare($sql2);
$stmt2->execute();

$stmt = $conexao->prepare($sql);
$stmt->execute();

header('Location: login.php');
/*os 's' no bind_param() significam o tipo de dado passado que podem
ser: s: para 'string', i: para 'inteiro', d: para 'double', b: para 'blob'  */
    
}

 ?>
 
 

 
 
 
 
 

 

Link para o comentário
Compartilhar em outros sites

  • 0

oi.. eu so reorganizei essas linhas:

$conexao = conectaBD();
$sql2= 'INSERT INTO endereco(rua, cep, numero, complemento) values(?,?,?,?)';
$stmt2 = $conexao->prepare($sql2);
$stmt2->bind_param("ssis", $dados['rua'], $dados['cep'], $dados['numero'], $dados['complemento']);
$stmt2->execute();

$sql = 'INSERT INTO clientes (nome, email, senha, telefone) values(?,?,?,?)';
$stmt = $conexao->prepare($sql);
$stmt->bind_param("ssss", $dados['nome'], $dados['email'], $dados['senha'], $dados['telefone']);
$stmt->execute();

e aqui tudo ok..

Link para o comentário
Compartilhar em outros sites

  • 0

Nossa muito obrigadooo mesmoo

 

Resolvi por outro método para cadastrar o estado e a cidade, fiz dois formularios separados.

<form class="form-horizontal" method="POST" action="proc_cad_estado.php">
                                    <div class="clear"> </div>
                                <h3><b>INFORME SEU ESTADO</b></h3>
                            
                                        
                                
                                <div class="clear"> </div>
                                <div class="register-bottom-grid">
                                <br></br>
                                        
                                        <div>
                                            <span>Estado<label>*</label></span>
                                            <input type="text" placeholder="Estado" name="nome"  required>
                                        </div>        
                            
                                <div class="clear"> </div>
                                <br></br>
                                <div id="success"></div>
                            
                                
                                <input   type="submit" name="cadastro" class="btn btn-lg btn-primary " value="Proximo">
                                </div>
                        </form> 

 

 

AONDE CADA UM TEM UM PROCESSA 

 

 

<?php


if(isset($_POST['cadastro'])){
    
$nome = $_POST['nome'];

$dados = [
"nome"=>$nome];


inserirUsuario($dados);

 echo"
     <META HTTP-EQUIV=REFRESH CONTENT = '0; URL=
     http://localhost/sistema/registrarCidade.php'>
     <script type=\"text/javascript\">
     alert(\"Cadastro feito com sucesso.\");
     </script>
     ";
}
     
 ?> 
<?php 


function conectaBD(){
$host="localhost";
$user="root";
$password="";
$bd="tcc";

$conexao= new mysqli($host, $user, $password, $bd);
if (mysqli_connect_errno())trigger_error(mysqli_connect_errot());
return $conexao;

}

/* Insere um novo registro de cliente no banco */
function inserirUsuario($dados){
//Abrindo a conexao


$conexao = conectaBD();
$sql2= 'INSERT INTO estado(nome) values(?)';
$stmt2 = $conexao->prepare($sql2);
$stmt2->bind_param("s", $dados['nome']);
$stmt2->execute();

header('Location: registrarCidade.php');
/*os 's' no bind_param() significam o tipo de dado passado que podem
ser: s: para 'string', i: para 'inteiro', d: para 'double', b: para 'blob'  */
    
}

 ?>
 
 

 
 
 
 
MAS POREM ELE SÓ CADASTRA UMA VEZ, E QUANDO EU VOU CADASTRAR OUTRO NÃO APARECE NENHUM ERRO MAS POREM NÃO ACRESCENTA NO BD. Sabe me dizer o porque ?

 

Editado por Maiara17
Link para o comentário
Compartilhar em outros sites

  • 0

oi.. se eu entendi bem, apos cadastrar você e direcionada
 p/ outra pg.. no caso, a "registrarCidade.php"..
mas normal, isso esta definido aqui:

echo"
     <META HTTP-EQUIV=REFRESH CONTENT = '0; URL=
     http://localhost/sistema/registrarCidade.php'>
     <script type=\"text/javascript\">
     alert(\"Cadastro feito com sucesso.\");
     </script>
     ";

e aqui:

header('Location: registrarCidade.php');

d qqer forma só p/ confirmar eu comentei essas linhas e esta cadastrando beleza,
assim que clica no botão "proximo".. e permanece nessa mesma pg..

POREM NÃO ACRESCENTA NO BD

ahe você precisa ver se a coluna não é "unique";
se for, se o nome for repetido o MySQL não cadastra mesmo..

dica: use essas linhas no começo do codigo:

ini_set('display_errors', true);
error_reporting(E_ALL);

quando a pag tiver erros, são bem uteis p/ "debugar"..

qqer coisa retorna ahe...

Link para o comentário
Compartilhar em outros sites

  • 0

EU TENHO UMA LOJA VIRTUAL E UM CARRINHO DE COMPRAS, E QUERO ADD O TAMANHO DO PRODUTO (tamanho do calçado) NESSE CARRINHO, COMO MOSTRA O CÓDIGO ABAIXO 

 

<ul class="options">
                                <h4 class="m_12">SELECIONE UM TAMANHO</h4>
                                <li><a href="#">36</a></li>
                                <li><a href="#">40</a></li>
                                <li><a href="#">42</a></li>
                                <li><a href="#">35</a></li>
                                
                            </ul>
                            

 

 

 

 

E DO CARRINHO 

 


  <div class="container">
     
<table>
         
<caption  style="font-size: 18px;
                background-color: #ddd;
                padding: 5px;"><strong>CARRINHO </strong></caption>

<br></br>
 
 
                              
<thead>

 
<tr>
       
<th    width="200">Produto</th>
 
 
<th width="200">Quantidade</th>
 
 
<th width="200">Preço</th>
 
 
<th width="200">SubTotal</th>
 
 
<th height="100"  width="200">Remover</th>
 
              </tr>
 
        </thead>
 
 
<form action="?acao=up" method="post">
 
<tfoot>
                

 
<tr>

                 
<td><a href="produtos_cliente.php"><button type='button'class='"btn btn-primary '>Continuar Comprando</button></a></td>
 
 <td><a href="produtos.php"><button type='button'class='btn btn-success'>COMPRAR</button></a></td>

        </tfoot>
 
 
<tbody>
                   <?php
                         if(count($_SESSION['carrinho']) == 0){
                            echo '
<tr>
<td colspan="5">Não há produto no carrinho</td>
</tr>
 
';
                         }else{
                            include_once("adm/conexao.php");
                                                                   $total = 0;
                           
                           foreach($_SESSION['carrinho'] as $id => $qtd){
                                  $sql13   = "SELECT *  FROM produto WHERE id= $id";
                                 
                                  $qr    = mysqli_query($conn, $sql13); 
                                  $linha    = mysqli_fetch_assoc($qr);
                                   
                                  $nome  = $linha['nome'];
                                  $preço = number_format($linha['preço'], 2, ',', '.');
                                  $sub   = number_format($linha['preço'] * $qtd, 2, ',', '.');
                                   
                                  $total += $linha['preço'] * $qtd;
                                
                                
                               echo '
<tr>       
           <br>                           
<td><strong>'.$nome.'</strong>
</td>
 
 
<td><input type="text" size="1" name="prod['.$id.']" value="'.$qtd.'" /></td>
 
 
<td>R$ '.$preço.'</td>
 
 
<td>R$ '.$sub.'</td>
 
 
<td><a href="?acao=del&id='.$id.'">Remover</a></td>
 
                                  </tr>
 
';
                            }
                               $total = number_format($total, 2, ',', '.');
                               echo '
<tr>
                                         
<td  height="200" colspan="4">TOTAL A PAGAR: </td>
 
 
<td  ><strong>R$ '.$total.'</strong></td>
 
                                  </tr>
 
';
                         }
                   ?>
        
         </tbody>
 
            </form>
 
    </table>
 

 

 

 

 

 

 

 

 

 

 

 

 

 

SE VOCÊ SOUBER SOBRE ISSO, AGRADEÇO DESDE JÁ !!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152.1k
    • Posts
      651.8k
×
×
  • Criar Novo...