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

Relação de foreing key


vini_agrof

Pergunta

Bom dia à todos,

Estou tentando desenvolver um sistema de agendamentos de horários, há algumas semanas tento resolver um problema de relação de tabela. 

Tenho duas principais tabelas, AGENDAMENTOS e CLIENTE, meu objetivo é identificar o agendamento do cliente através do login, não sendo necessário o mesmo ter que digitar o nome para um agendamento.

Os dados de inserção são processados por meio de um formulário.

Estou tentando relacionar o cliente_id da tabela de CLIENTE para a tabela de AGENDAMENTOS.

Segue os códigos para melhor entendimento.

CREATE TABLE IF NOT EXISTS `u748203187_agenda`.`cliente` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(45) NULL DEFAULT NULL,
  `login` VARCHAR(45) NULL DEFAULT NULL,
  `senha` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB
AUTO_INCREMENT = 4
DEFAULT CHARACTER SET = latin1
CREATE TABLE IF NOT EXISTS `u748203187_agenda`.`agendamentos` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(220) NULL DEFAULT NULL,
  `telefone` VARCHAR(45) NULL DEFAULT NULL,
  `servicos` VARCHAR(220) NULL DEFAULT NULL,
  `data` DATETIME NULL DEFAULT NULL,
  `cliente_id` INT(11) UNSIGNED NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_agendamentos_cliente_idx` (`cliente_id` ASC),
  CONSTRAINT `fk_agendamentos_cliente`
    FOREIGN KEY (`cliente_id`)
    REFERENCES `u748203187_agenda`.`cliente` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
AUTO_INCREMENT = 9
DEFAULT CHARACTER SET = latin1

 

Quando tento definir o cliente_id como not null retorna erro 1452 - Cannot add or update a child row: a foreign key constraint fails.

 

index.php:

<?php
	session_start();
?>
<!DOCTYPE html>
<html lang="pt-br">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <link rel="stylesheet" type="text/css" href="css/bootstrap-datetimepicker.min.css">
    <title>Sistema - Agendamento</title>
  <body>
  	<div class="container-fluid">
      <div class="jumbotron"> 
    	   <h1 class="text-center">Agendamento</h1><br> 
    </div><br>
    	<form class="form-horizontal" action="processa.php" method="POST"> 
  			<div class="col-sm-3 col-sm-offset-3">         
            <label>Nome</label>
            <input class="form-control" type="text" name="nome" placeholder="Digite seu nome" required> 
        </div>
        <div class="col-sm-3"> 
          <label>Telefone</label>         
          <input class="form-control" type="text" name="telefone" placeholder="Digite seu telefone" required>
        </div>
        <div class="col-sm-6 col-sm-offset-3">	
    			<label>Serviços</label>
      			<select name="servicos" class="form-control">
                <option value="" selected=>Selecione um serviço</option>
                <option>Teste</option>
                <option>Teste</option>
                <option>Teste</option>
                <option>Teste</option>
                <option>Teste</option>
            </select>  			
  			</div>
  			<div class="col-sm-6 col-sm-offset-3">
    			<label>Data e hora</label>
    				<div class="input-group date data_formato" data-date-format="dd/mm/yyyy HH:ii:ss">
    					<input class="form-control" type="text" name="data" placeholder="Data do serviço">
    					<span class="input-group-addon">
    						<span class="glyphicon glyphicon-th"></span>
    					</span>
					  </div> 
  			</div>
  			
    			<div class="col-sm-offset-3 col-sm-6"><br>
      				<button type="submit" class="btn btn-success">Agendar</button>
              <a class="btn btn-primary btn_carrega_conteudo" href='#' id="pagina">Ver agendamentos</a><br><br>
              <?php
                if(isset($_SESSION['msg'])){
                echo $_SESSION['msg'];
                unset($_SESSION['msg']);
                }
              ?>
    			</div>
  			
		</form>
    
      
          <div class="col-sm-6 col-sm-offset-3" id="div_conteudo"><!-- div onde será exibido o conteúdo-->
              <img id="loader" src="loader.gif" style="display:none;margin: 0 auto;">
          </div>  
      
  

    </div>
    
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
   	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
   	<script src="js/bootstrap-datetimepicker.min.js"></script>
   	<script src="js/locales/bootstrap-datetimepicker.pt-BR.js"></script>
   	<script type="text/javascript">
   		$('.data_formato').datetimepicker({
   			weeKStart: 1,
   			todayBtn: 1,
   			autoclose: 1,
   			todayHighlight: 1,
   			startView: 2,
   			forceParse: 0,
   			showMeridian: 1,
   			language: "pt-BR",
   			startDate: '-0d'
   		});

       $(document).ready(function(){// Ao carregar a página faça o conteudo abaixo
            $('.btn_carrega_conteudo').click(function(){// Ao clicar no elemento que contenha a classe .btn_carrega_conteudo faça...
                            
            var carrega_url = this.id; //Carregar url pegando os dados pelo ID
            carrega_url = carrega_url+'_listar.php'; //Carregar a url e o conteudo da página
                            
                $.ajax({ //Carregar a função ajax embutida no jQuery
                    url: carrega_url,
                               
                    //Variável DATA armazena o conteúdo da requisição
                    success: function(data){//Caso a requisição seja completada com sucesso faça...
                        $('#div_conteudo').html(data);// Incluir o conteúdo dentro da DIV
                    },
                               
                    beforeSend: function(){//Antes do envio do cabeçalho faça...
                        $('#loader').css({display:"block"});//carregar a imagem de load
                    },
                               
                    complete: function(){//Após o envio do cabeçalho faça...
                        $('#loader').css({display:"none"});//esconder a imagem de load
                    }
                });  
            });
        });
   	</script>
  </body>
</html>

processa.php:

<?php
session_start();

//Incluir a conexão com o BD
include_once("conexao.php");

//Receber os dados do formulário
$data = $_REQUEST['data'];
$servicos = $_REQUEST['servicos'];
$nome = $_REQUEST['nome'];
$telefone = $_REQUEST['telefone'];

//Converter a data e hora para o formato do BD.
$data = explode(" ", $data);
list($date, $hora) = $data;
$data_sem_barra = array_reverse(explode("/", $date));
$data_sem_barra = implode("-", $data_sem_barra);
$data_sem_barra = $data_sem_barra . " " . $hora;

//Validação dos campos
if(empty($_POST['nome']) || empty($_POST['data']) || empty($_POST['servicos'])){
	$_SESSION['msg'] = "<div class='alert alert-warning'>Preencha os campos corretamente</div>";
	header("Location: index.php"); 
}else{
	//Salvar no BD
	$result_data = "INSERT INTO agendamentos(servicos, data, nome, telefone) VALUES ('$servicos','$data_sem_barra','$nome','$telefone')";
	$resultado_data = mysqli_query($conn, $result_data);

	//Verificar se salvou no banco de dados através do "mysqli_insert_id" que verifica se existe o ID do ultimo dado inserido
	if(mysqli_insert_id($conn)){
		$_SESSION['msg'] = "<div class='alert alert-success'>Agendamento efetuado com sucesso</div>";
		header("Location: index.php");
	}else{
		$_SESSION['msg'] = "<div class='alert alert-danger'>Erro ao efetuar o agendamento</div>";
		header("Location: index.php");
	}
	
}





?>

conexao.php:

<?php
	$servidor = "localhost";
	$usuario = "u748203187_agenda";
	$senha = "";
	$dbname = "u748203187_agenda";

	$conn = mysqli_connect($servidor, $usuario, $senha, $dbname);
?>

 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Quando tento definir o cliente_id como not null retorna erro 1452 - Cannot add or update a child row: a foreign key constraint fails.

Quando tento definir o cliente_id como não null retorna erro 1452 - Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha.

Obs: O erro 1452 - Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha ocorre quando o registro de dados é inicialmente inserido na Tabela Estrangeira.

Exemplo:

https://translate.google.com.br/translate?hl=pt-BR&sl=en&u=https://www.tutorialspoint.com/mysql-error-1452-cannot-add-or-a-child-row-a-foreign-key-constraint-fails&prev=search&pto=aue

abraço

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...