php insert does not add data to table by constraint error account

0

I'm having an FK error. I can not insert data through form using ajax and php insert code .

When I fill out the form and click the submit button, ajax fulfills the role of sending the data to PHP in> add_ps.php ), however a return of costraint error where it says I can not add or update the table.

Error:
Cannot add or update a child row: a foreign key constraint fails 
('click1lw_fornecedores'.'produtos_servicos', CONSTRAINT 'produtos_servicos_ibfk_4' FOREIGN KEY ('categoria_id') REFERENCES 'categorias' 
('categoria_id') ON DELETE NO ACTION ON UPDATE CASCADE)

In the case I have 5 tables. The Supplier table:

CREATE TABLE 'fornecedor' (
 'fornecedor_id' int(11) NOT NULL AUTO_INCREMENT,
 'nome' varchar(100) NOT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

The Categories table:

CREATE TABLE 'categorias' (
 'categoria_id' int(11) NOT NULL AUTO_INCREMENT,
 'categoria' varchar(100) NOT NULL,
 PRIMARY KEY ('categoria_id'),
 KEY 'categoria' ('categoria')
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

The table subcategories :

CREATE TABLE 'categorias_sub' (
 'subcategoria_id' int(11) NOT NULL AUTO_INCREMENT,
 'subcategoria' varchar(100) NOT NULL,
 'categoria' int(11) NOT NULL,
 PRIMARY KEY ('subcategoria_id'),
 KEY 'categoria' ('categoria') USING BTREE,
 CONSTRAINT 'categorias_sub_ibfk_1' FOREIGN KEY ('categoria') REFERENCES 'categorias' ('categoria_id') ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

The table type_ps :

CREATE TABLE 'tipo_ps' (
 'tipo_id' int(11) NOT NULL AUTO_INCREMENT,
 'tipo' varchar(15) NOT NULL,
 PRIMARY KEY ('tipo_id')
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

And finally the table service_products :

CREATE TABLE 'produtos_servicos' (
 'produto_id' int(11) NOT NULL AUTO_INCREMENT,
 'fornecedor_id' int(11) NOT NULL,
 'tipo' int(11) NOT NULL,
 'nome' varchar(100) NOT NULL,
 'categoria_id' int(11) NOT NULL,
 'subcategoria_fk' int(11) NOT NULL,
 'imagem' varchar(20) NOT NULL,
 'descricao' text NOT NULL,
 PRIMARY KEY ('produto_id'),
 KEY 'tipo' ('tipo'),
 KEY 'fornecedor_id' ('fornecedor_id'),
 KEY 'categoria_id' ('categoria_id'),
 KEY 'subcategoria_fk' ('subcategoria_fk'),
 CONSTRAINT 'produtos_servicos_ibfk_2' FOREIGN KEY ('tipo') REFERENCES 'tipo_ps' ('tipo_id') ON DELETE NO ACTION ON UPDATE CASCADE,
 CONSTRAINT 'produtos_servicos_ibfk_3' FOREIGN KEY ('fornecedor_id') REFERENCES 'fornecedor' ('fornecedor_id') ON DELETE NO ACTION ON UPDATE CASCADE,
 CONSTRAINT 'produtos_servicos_ibfk_4' FOREIGN KEY ('categoria_id') REFERENCES 'categorias' ('categoria_id') ON DELETE NO ACTION ON UPDATE CASCADE,
 CONSTRAINT 'produtos_servicos_ibfk_5' FOREIGN KEY ('subcategoria_fk') REFERENCES 'categorias_sub' ('subcategoria_id') ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8

Below is the code for my form and the code responsible for AJAX :

<form id="insert_form" method="POST">
    <div class="form-row">
    <div class="form-group col-md-3">
    <label for="tipo">Selecione o tipo</label>
<select id="tipo" class="form-control" name="tipo" >
    <?php

    //Include the database configuration file
include 'dbconnect.php';

//Fetch all the country data
$query = $conn->query("SELECT * FROM tipo_ps ORDER BY tipo ASC");

//Count total number of rows
$rowCount = $query->num_rows;

    if($rowCount > 0){
        while($row = $query->fetch_assoc()){ 
            echo '<option value="'.$row['tipo_id'].'">'.$row['tipo'].'</option>';
        }
    }else{
        echo '<option value="'.$row['tipo_id'].'">Tipo não encontrado</option>';
    }
    ?>

</select>
  </div>

  <div class="form-group col-md-8">
    <label for="nome">Nome</label>
    <input type="text" name="nome" id="nome" class="form-control" />
  </div>

    <div class="form-group col-md-5">

<label for="categoria_id">Categoria Principal</label>

<select id="categoria" class="form-control" name="categoria_id" >

    <option value="">Selecione uma categoria</option>
    <?php

    //Include the database configuration file
include 'dbconnect.php';

//Fetch all the country data
$query = $conn->query("SELECT * FROM categorias ORDER BY categoria ASC");

//Count total number of rows
$rowCount = $query->num_rows;

    if($rowCount > 0){
        while($row = $query->fetch_assoc()){ 
            echo '<option value="'.$row['categoria_id'].'">'.$row['categoria'].'</option>';
        }
    }else{
        echo '<option value="">Categoria não encontrada</option>';
    }
    ?>

</select>

</div>

    <div class="form-group col-md-5">
     <label for="subcategoria_id">Sub Categoria</label>
<select id="subcategoria" name="subcategoria_fk" class="form-control">
<option value="">Selecione a categoria primeiro</option>
</select>
  </div>

  </div>

  <div class="form-group">
    <label for="exampleFormControlFile1">Imagem d produto ou serviço</label>
    <input type="file" class="form-control-file" id="imagem" name="imagem">
  </div>
  <div class="form-group">
    <label for="descricao">Descreva o produto ou serviço</label>
    <textarea class="form-control" name="descricao" id="descricao" rows="2" ></textarea>
  </div>

    </form>

<script>  
$(document).ready(function(){
 $('#insert_form').on("submit", function(event){
           $('#insert').val("CADASTRAR ITEM"); 
           $('#insert_form')[0].reset();
  event.preventDefault();  

   $.ajax({  
    url:"adicionar_ps.php",  
    method:"POST",  
    data:$('#insert_form').serialize(),  
    beforeSend:function(){  
     $('#insert').val("CADASTRANDO...");  
    },  
    success:function(data){  
     $('#insert_form')[0].reset();
     $('#add_data_Modal').modal('hide');  
     $('#ps_table').html(data);
    }  
   });  

 });
});

 </script>

And a snippet of the PHP code that receives the data via AJAX :

<?php

include 'dbconnect.php';
if(!empty($_POST))
{
 $output = '';
    $session_id = $_SESSION['f_id'];
    $imagem = mysqli_real_escape_string($conn, $_POST['imagem']); 
    $tipo = mysqli_real_escape_string($conn, $_POST['tipo']); 
    $nome = mysqli_real_escape_string($conn, $_POST['nome']);  
    $categoria = mysqli_real_escape_string($conn, $_POST['categoria_id']);  
    $subcategoria = mysqli_real_escape_string($conn, $_POST['subcategoria_fk']);  
    $descricao = mysqli_real_escape_string($conn, $_POST['descricao']);

    $query = "
    INSERT INTO produtos_servicos (fornecedor_id, imagem, tipo, nome, categoria_id, subcategoria_fk, descricao)  
     VALUES('".$_SESSION['f_id']."', '$imagem', '$tipo', '$nome', '$categoria', '$subcategoria', '$descricao')
    ";

    if(mysqli_query($conn, $query)) 
    {
When the script ajax sends the form data to PHP , only two fields are added as below:

  

What could it be?

    
asked by anonymous 16.07.2018 / 05:33

0 answers