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

Insert_id PHP duplicando INSERT


chiquito

Pergunta

Estou gravando um grupo em uma tabela e pego uma array dos privilégios e gravo em outra tabela, para identificar todos os privilégios pertencentes ao grupo, utilizo o insert_id para pegar o último ID da tabela grupo e incluir na tabela privilegio juntamente com os privilegios selecionados, mas o grupo está duplicando na tabela grupo, segue abaixo o código, não sei o que posso estar fazendo de errado:

$grupo = $_POST['grupo'];
$id = $_POST['codigo'];
 
 $sql = "SELECT id FROM grupo WHERE nome = '$grupo'";
 $result = $conexao->query($sql);
   
 if ($result->num_rows > 0) {
     echo "O grupo '$grupo' já existe.";
  } else {
       // Inserir dados na tabela grupo
       $smt = "INSERT INTO grupo (nome) VALUES ('$grupo')";   
  }    
              
        if ($conexao->query($smt) === TRUE) {
            // Pegar o ID do último grupo inserido
            $id_grupo = $conexao->insert_id;
               
        for($i=0; $i<count($id); $i++ ) {      
            $insere = "INSERT INTO grupo_privilegio(id_grupo,id_privilegio) VALUES ('$id_grupo','$id[$i]')";
            $resultado = mysqli_query($conexao, $insere);
    }
}
 

por exemplo se inputar o nome do grupo: TESTE e os privilegios 1, 2, 3 e 5
e esse grupo TESTE for o primeiro ID da tabela grupo, armazena corretamente na tabela privilegio
ID_grupo   ID_Privilegio
      1                  1
       1                  2
       1                  3
       1                  5

mas na tabela grupo invés de apenas gravar o grupo TESTE com o código 1, está gravando:

ID       NOME
1          TESTE
2          TESTE

Não consegui descobrir por que está duplicando o grupo, alguém poderia ajudar por favor, obrigado!

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Nos ajude a entender:
Que versão de php usas?

você recebe um código

37 minutos atrás, chiquito disse:

$id = $_POST['codigo'];

E depois tenta iterar sobre esse código?

38 minutos atrás, chiquito disse:

for($i=0; $i<count($id); $i++ ) {

Esse código é countable|iterable? Ou é apenas string?

Link para o comentário
Compartilhar em outros sites

  • 0

Versão do PHP
PHP Version 7.3.31

$id = $_POST['codigo'];, recebo uma array

 

<form action="grupo.php" method="POST" class="mbr-form form-with-styler">
                    <div class="dragArea row">
                        <font class="mbr-section-text mbr-fonts-style align-left mb-0 mt-0 display-4">
                        <div class="col-md-12 form-group mb-3" data-for="privilegio">
                            <?php
                            $resultado = "SELECT * FROM privilegio";
                            $busca = mysqli_query($conexao, $resultado);
 
                            ?>
                            <table width="60%">
                                <tr>
                                    <td style='vertical-align:middle' align='left' colspan="2">
                                        <div class="col-md-12 form-group mb-3" data-for="grupo">
                                            <input type='text' name='grupo' placeholder='nome do grupo' data-form-field='grupo' class='form-control' required>
                                        </div>
                                    </td>
                                </tr>
                            </table>  
                            <?php  
                            while($dados = mysqli_fetch_assoc($busca))
                            {
                            ?>
                            <table>
                                <tbody>
                                    <tr>
                                        <td>
                                            <label class='switch'>
                                                <font class="mbr-section-text mbr-fonts-style align-left mb-0 mt-0 display-4">
                                                <input id='codigo[]' name='codigo[]' type='checkbox' value="<?php echo $dados['id'];?>">
                                                <div class='slider round'>
                                                </div>
                                            </label>
                                        </td>
                                        <td style='vertical-align:middle'  align='left'>
                                            &nbsp;&nbsp;<?php echo $dados['nome'];?>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>
                            <?php
                            }
                            ?>
                        </div>
                        <div class="col-lg-12 col-md-12 col-sm-12 align-center mbr-section-btn">
                            <input class="btn btn-primary" type="submit" id="submit" name="submit" value="cadastrar"></font>
                        </div>
                    </div>
                </form>

for($i=0; $i<count($id); $i++ ) { para percorrer todas os resultados da array

Link para o comentário
Compartilhar em outros sites

  • 0

$grupo = $_POST['grupo'];
$id = $_POST['codigo'];
 
 $sql = "SELECT id FROM grupo WHERE nome = '$grupo'";
 $result = $conexao->query($sql);
   
 if ($result->num_rows > 0) {
     echo "O grupo '$grupo' já existe.";
  } else {
       // Inserir dados na tabela grupo
       $smt = "INSERT INTO grupo (nome) VALUES ('$grupo')";
       $inseregrupo =  $conexao->query($smt);
                
        if ($conexao->affected_rows > 0) {
            // Pegar o ID do último grupo inserido
            $id_grupo = $conexao->insert_id;
               
        for($i=0; $i<count($id); $i++ ) {      
            $insere = "INSERT INTO grupo_privilegio(id_grupo,id_privilegio) VALUES ('$id_grupo','$id[$i]')";
            $resultado = $conexao->query($insere);
            }
            if ($conexao->affected_rows > 0) {
            echo "cadastro realizado com sucesso";
    } }
}

Link para o comentário
Compartilhar em outros sites

  • 0
arquivo index.php

Esse código vai criar para cada novo grupo os privilégios 1, 2 e 3
<form method=post>
    <input name=grupo placeholder='Nome do Grupo'><br>
    <input type=submit>
</form>
<?php
// grupo (id auto_increment,nome)
// grupo_privilegio (id auto_increment,idGrupo,idPrivilegio)
if(!isset($_POST['grupo']))
{
    exit;
}
$grupo = $_POST['grupo'];

$conexao=new mysqli("localhost","root","","teste");
$sql = "SELECT id FROM grupo WHERE nome = '$grupo'";
$result = $conexao->query($sql);
   
if ($result->num_rows > 0) 
{
    echo "O grupo '$grupo' já existe.";
} else {
    // Inserir dados na tabela grupo
    $smt = "INSERT INTO grupo (nome) VALUES ('$grupo')";
    $inseregrupo =  $conexao->query($smt);
                
    if ($conexao->affected_rows > 0) 
    {
         // Pegar o ID do último grupo inserido
        $id_grupo = $conexao->insert_id;
               
        for($i=1; $i<=3; $i++ )
        {   // definindo privilégio 1,2,3 para cada novo grupo
            $insere = "INSERT INTO grupo_privilegio(idGrupo,idPrivilegio) VALUES ($id_grupo,$i)";
            $resultado = $conexao->query($insere);
        }
        if ($conexao->affected_rows > 0) 
        {
            echo "cadastro realizado com sucesso";
        } 
    }
}   
?>

NUNCA deixe o usuário definir o id de uma tabela.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela ajuda, mas ainda  continua duplicando o grupo, na tabela grupo, está inserindo corretamente os provilégios selecionados e vinculados ao ID do grupo correto, mas sempre criar dois grupos com o mesmo nome e o vinculo com o privilégio sempre é com o primeiro GRUPO Criado, segue código completo:

<form action="grupo.php" method="POST" class="mbr-form form-with-styler">
    <div class="dragArea row">
        <font class="mbr-section-text mbr-fonts-style align-left mb-0 mt-0 display-4">
        <div class="col-md-12 form-group mb-3" data-for="privilegio">
            <?php
                $resultado = "SELECT * FROM privilegio";
                $busca = mysqli_query($conexao, $resultado);
            ?>
            <table width="60%">
                <tr>
                    <td style='vertical-align:middle' align='left' colspan="2">
                        <div class="col-md-12 form-group mb-3" data-for="grupo">
                                <input type='text' name='grupo' placeholder='nome do grupo' data-form-field='grupo' class='form-control' required>
                        </div>
                    </td>
                </tr>
            </table>  
            <?php  
            while($dados = mysqli_fetch_assoc($busca))
            {
            ?>
            <table>
                <tbody>
                    <tr>
                        <td>
                            <label class='switch'>
                            <font class="mbr-section-text mbr-fonts-style align-left mb-0 mt-0 display-4">
                            <input id='codigo[]' name='codigo[]' type='checkbox' value="<?php echo $dados['id'];?>">
                            <div class='slider round'>
                            </div>
                            </label>
                        </td>
                        <td style='vertical-align:middle'  align='left'>
                            &nbsp;&nbsp;<?php echo $dados['nome'];?>
                        </td>
                    </tr>
                </tbody>
            </table>
            <?php
            }
            ?>
        </div>
        <div class="col-lg-12 col-md-12 col-sm-12 align-center mbr-section-btn">
            <input class="btn btn-primary" type="submit" id="submit" name="submit" value="cadastrar"></font>
        </div>
    </div>
</form>
 
<?php
if(isset($_POST['submit']))
    {
    include_once('config.php');
   
   // grupo (id auto_increment,nome)
   // grupo_privilegio (id auto_increment,idGrupo,idPrivilegio)
   $grupo = $_POST['grupo'];
   $id = $_POST['codigo'];
   
   $sql = "SELECT id FROM grupo WHERE nome = '$grupo'";
   $result = $conexao->query($sql);
     
   if ($result->num_rows > 0)
   {
        echo "O grupo '$grupo' já existe.";
   } else {
   
    // Inserir dados na tabela grupo
       $smt = "INSERT INTO grupo (nome) VALUES ('$grupo')";
       $inseregrupo =  $conexao->query($smt);
                   
       if ($conexao->affected_rows > 0)
       {
            // Pegar o ID do último grupo inserido
           $id_grupo = $conexao->insert_id;
           
           for($i=0; $i<count($id); $i++)
           {   // definindo privilégio 1,2,3 para cada novo grupo
               $insere = "INSERT INTO grupo_privilegio(id_Grupo,id_Privilegio) VALUES ($id_grupo,$id[$i])";
               $resultado = $conexao->query($insere);
           }
           if ($conexao->affected_rows > 0)
           {
               echo "cadastro realizado com sucesso";
           }
       }
    }  
}
?>

image.jpeg.236e4d5a17c0ebab614d8bcff1bac793.jpeg

 

Essa é a tela, coloco o nome do grupo e escolho os privilégios, por exemplo, cadastro o grupo: QUALIDADE
é inserido dois grupos - ID: 1 - NOME: QUALIDADE e ID: 2 - NOME: QUALIDADE na tabela GRUPO
e se escolher os 3 primeiros privilégios ele pega corretamente o primeiro ID do grupo Inserido:
na taleba PRIVILÉIGO - ID_GRUPO: 1 - ID_PRIVILEGIO: 1 e ID_GRUPO: 1 - ID_PRIVILEGIO: 2 e ID_GRUPO: 1 e ID_PRIVILEGIO: 3, ele não pega o ID_GRUPO: 2 que nem mesmo deveria ser criado nesse caso, não sei se por causa do uso do insert_id ele faz uma nova inserção no grupo, precisava descobrir por que está inserindo duas vezes o grupo na tabela grupo, estou quase para inserir um delete no final para sempre excluir esse ultimo grupo criado, mas queria entender por que isso está ocorrendo para não acontecer em códigos futuros, muito obrigado!

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...