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);
?>