Relação de foreing key

16/07/2020

6

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


<?php
	session_start();
?>

index.php:
<!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");
	}
	
}

?>
Vinicius

Vinicius

Responder

Post mais votado

16/07/2020

se entendi bem, falta vc inserir na tabela de agendamentos o id do cliente.
se sua duvida é como obter esse id, vc o captura qdo o cliente se logar, usando uma variavel de sessão.
veja um exemplo pratico aqui:
http://trocadicas.blogspot.com/2018/08/como-exibir-as-preferencias-do-usuario.html

Fernando C

Fernando C
Responder

Mais Posts

16/07/2020

Vinicius

se entendi bem, falta vc inserir na tabela de agendamentos o id do cliente.
se sua duvida é como obter esse id, vc o captura qdo o cliente se logar, usando uma variavel de sessão.
veja um exemplo pratico aqui:
http://trocadicas.blogspot.com/2018/08/como-exibir-as-preferencias-do-usuario.html


Fernando eu inseri o cliente_id na tabela de agendamento, mas vou estudar a questão da session, assim que resolver eu posto aqui. Achei que não seria possível armazenar uma session no banco de dados, muito obrigado pela atenção.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários,
consulte nossa política de privacidade.

Aceitar