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

VALIDAÇÃO DE CAMPOS DA TABELA CASO ESTEJAM PREENCHIDOS


Lucimara Moquenco Canhiato

Pergunta

Olá!

Pessoal, meu problema é o seguinte:

Tenho uma tabela para cadastrar guias com os campos: 

 

id_guia; status_guia; dt_cadastro_guia, id_posto, id_paciente, id_tipo(tipo de atendimento), id_atend(atendimento), peso_guia, alt_guia, urg_guia, id_esp(especialista).

 

Na minha tabela atend(atendimento) tenho os campos:

 

id_atend, id_tipo, nome_atend, obs_atend, idade_ini_atend, idade_fim_atend.

 

Vou inserir na tabela atend, idade que aquele atendimento atende, exemplo de 0 a 17 anos.

Alguns atendimentos não terão nenhuma informação nestes campos.

Preciso que ao inserir guias caso haja a informação nestes campos, faça uma verificação da idade do paciente e diga que a especialidade não atende caso esteja fora deste intervalo.

PS: Eu sei que os nomes dos campos das tabelas não precisam ter _guia ou _atend, mas preferi colocar mesmo sabendo que é redundante pois como sou muito iniciante estava tendo dificuldades para me organizar, ok?

 

 

<?php include_once "../../config/db.php";?>
<?php include_once "../../view/layout/menu.php";?>
<?php include_once "../../config/functions.php";?>

<?php

date_default_timezone_set('America/Sao_Paulo');
setlocale(LC_NUMERIC, 'pt_BR');

$id = $_GET['id'];

if (count($_POST) > 0) {
    $data_hora_formatada = date('Y-m-d H:i:s');
    $dt_cadastro = date('Y-m-d H:i:s');
    $posto = $_POST['posto'];
    $status = $_POST['status'];
    $paciente = $_POST['paciente'] ?? null;
    $tipo_atend = $_POST['tipo_atend'];
    $atend = $_POST['atend'];
    $peso = str_replace(',', '.', $_POST['peso']);
    $alt = str_replace(',', '.', $_POST['alt']);
    $urg = isset($_POST['urg']) ? 1 : 0;
    $esp = $_POST['esp'];
        
    $erros = [];

// Verifica se o paciente existe
$stmt = $conn->prepare("SELECT * FROM paciente WHERE id_paciente = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
$pac = $stmt->fetch(PDO::FETCH_ASSOC);

// Calcular a idade do paciente
$dt_nascto = $pac['dt_nascto_paciente']; 
$idade = date_diff(date_create($dt_nascto), date_create('now'))->y;    

if (!empty($tipo_atend) && !empty($atend)) {
    // Buscar os limites de idade da especialidade
    $stmt = $conn->prepare("SELECT idade_ini_atend, idade_fim_atend FROM atend WHERE id_atend = :id_atend");
    $stmt->bindParam(':id_atend', $atend);
    $stmt->execute();
    $atend_data = $stmt->fetch(PDO::FETCH_ASSOC);

    // Verifica se a especialidade foi encontrada
    if ($atend_data) {
        $idade_ini = $atend_data['idade_ini_atend'];
        $idade_fim = $atend_data['idade_fim_atend'];

        // Verifica se os limites de idade estão definidos
        if (!is_null($idade_ini) && !is_null($idade_fim) && $idade_ini !== '' && $idade_fim !== '') {
            $idade_ini = (int)$idade_ini;
            $idade_fim = (int)$idade_fim;

            // Verifica se a idade do paciente está dentro dos limites
            if ($idade < $idade_ini || $idade > $idade_fim) {
                $erros[] = "A idade do paciente não está dentro dos limites permitidos para esta especialidade!";
            }
        }
    } else {
        $erros[] = "Especialidade não encontrada!";
    }
}    
    
    if (empty($posto)) {
        $erros[] = "Selecione um Posto!";
    }
    if (empty($esp)) {
        $erros[] = "Informe qual especialista solicitou!";
    }
    if (empty($tipo_atend)) {
        $erros[] = "Selecione um tipo de Especialidade!";
    }
    if (empty($atend)) {
        $erros[] = "Informe a Especialidade!";
    }
    if (empty($peso)) {
        $erros[] = "Informe o Peso!";
    }
    if (!is_numeric($peso) || $peso <= 0) {
        $erros[] = "Peso deve ser um número positivo!";
    }
    if (empty($alt)) {
        $erros[] = "Informe a altura!";
    }
    if (!is_numeric($alt) || $alt <= 0) {
        $erros[] = "Altura deve ser um número positivo!";
    }

    if (!empty($erros)) {
        echo "<script>alert('ATENÇÃO! " . implode("\\n", $erros) . "');</script>";
    } else {
        
        $sql_code = "INSERT INTO guia(id_posto, status_guia, id_paciente, id_tipo, id_atend, peso_guia, alt_guia, urg_guia, dt_cadastro_guia, id_esp) VALUES(:posto, :status, :paciente, :tipo_atend, :atend, :peso, :alt, :urg, :dt_cadastro, :esp)";
        $stmt = $conn->prepare($sql_code);
        $stmt->bindParam(':posto', $posto);
        $stmt->bindParam(':status', $status);
        $stmt->bindParam(':paciente', $id); 
        $stmt->bindParam(':tipo_atend', $tipo_atend);
        $stmt->bindParam(':atend', $atend);
        $stmt->bindParam(':peso', $peso);
        $stmt->bindParam(':alt', $alt);
        $stmt->bindParam(':urg', $urg);
        $stmt->bindParam(':dt_cadastro', $data_hora_formatada);
        $stmt->bindParam(':esp', $esp);
        
        $deu_certo = $stmt->execute();
        if ($deu_certo) {
            echo "<script>
                alert('Guia cadastrada com sucesso!!');
                window.location.href = 'buscaGuias.php?id_paciente=" . htmlspecialchars($id) . "';
            </script>";
            unset($_POST);
        }
    }
}

$stmt = $conn->prepare("SELECT * FROM paciente WHERE id_paciente = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
$pac = $stmt->fetch(PDO::FETCH_ASSOC);

?>
```html
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="../../assets/css/addGuia.css">
    <title>Cadastro de Guias</title>
</head>
<body>

    <div class="container" id="contcadGuia">
        <br>
        <div class="row">
            <h3><?php echo "" . $pac['nome_paciente'] . ""?></h3>
            <div class="form col-sm-2" id="btnVoltar">
                <a href="buscaGuias.php?id_paciente=<?php echo htmlspecialchars($id); ?>" class="form-control btn btn-primary">Voltar</a>
            </div>
        </div>
        <p class="destaque" style="margin-left:60px;">*Campo Obrigatório</p>

        <form class="form-control-sm" method="post" id="form_addGuia" class="form_addGuia" name="form_addGuia" action="">
            
            <br> 

            <div class="row">
                
                <div hidden class="form col-sm-2" id="divStatus">
                    <label>Status<span class="destaque">*</span></label>
                    <input class="form-control form-control-sm inputs" name="status" id="status" type="hidden" maxlength="10" value="Ativa" readonly>
                </div>

                <div class="form col-sm-2" id="divPosto">
                    <label>Posto Solicitante<span class="destaque">*</span></label>
                    <input type="hidden" name="id" maxlength="150" value="<?php echo $id;?>">
                    <select name="posto" id="posto" required>
                        <option value="">Selecione..</option>
                        <?php
                            $query = $conn->query("SELECT id_posto, apelido_posto FROM posto ORDER BY apelido_posto ASC");
                            $registros = $query->fetchAll(PDO::FETCH_ASSOC);
                            
                            foreach($registros as $option) {
                                ?>
                                    <option value="<?php echo $option['id_posto']?>"><?php echo $option['apelido_posto']?></option>
                                <?php
                            }
                        ?>                      
                    </select>
                </div>

                <div class="form col-sm-2" id="divEsp">
                    <label>Especialista Solicitante<span class="destaque">*</span></label>
                    <select name="esp" id="esp" required>
                        <option value="">Selecione..</option>
                        <?php
                            $query = $conn->query("SELECT id_esp, nome_esp FROM especialista ORDER BY nome_esp ASC");
                            $registros = $query->fetchAll(PDO::FETCH_ASSOC);
                            
                            foreach($registros as $option) {
                                ?>
                                    <option value="<?php echo $option['id_esp']?>"><?php echo $option['nome_esp']?></option>
                                <?php
                            }
                        ?>                      
                    </select>
                </div>

                <div class="form col-sm-3" id="divTipo">
                    <label>Tipo de Especialidade<span class="destaque">*</span></label>
                    <select name="tipo_atend" id="tipo_atend" required>
                        <option value="">Selecione..</option>
                        <?php
                            $query = $conn->query("SELECT * FROM tipo_atend ORDER BY nome_tipo ASC");
                            $registros = $query->fetchAll(PDO::FETCH_ASSOC);
                            
                            foreach($registros as $option) {
                                ?>
                                    <option value="<?php echo $option['id_tipo']?>"><?php echo $option['nome_tipo']?></option>
                                <?php
                            }
                        ?>                      
                    </select>
                </div>

                <div class="form col-sm-2" id="divAtend">
                    <label>Especialidade<span class="destaque">*</span></label>
                    <select name="atend" id="atend" required>
                        <option value="">Selecione..</option>
                    </select>
                </div>                
                
                <div class="form col-sm-1" id="divPeso">
                    <label>Peso<span class="destaque">*</span></label>
                    <input class="form-control form-control-sm inputs" name="peso" id="peso" type="text" maxlength="10" value="<?php if(isset($_POST['peso'])) echo $_POST['peso'];?>">
                </div>

                <div class="form col-sm-1" id="divAlt">
                    <label>Altura<span class="destaque">*</span></label>
                    <input class="form-control form-control-sm inputs" name="alt" id="alt" type="text" maxlength="10" value="<?php if(isset($_POST['alt'])) echo $_POST['alt'];?>">
                </div>

                <div class="container" id="contUrg">
                    <div class="form col-sm-1 checkbox-item" id="divUrg">
                        <label>                    
                            Urgente<input type="checkbox" name="urg" id="urg" value="Sim">
                            <span class="custom-checkbox"></span>
                        </label>                    
                    </div>
                </div>

                <div class="form col-sm-1" id="divBtnInserir">
                    <input class="form-control btn btn-primary" id="btnInserir" name="salvar" type="submit" value="Inserir">
                </div>
            </div>
        </form>
    </div>

    <script type="text/javascript" defer src="../../assets/js/addGuias.js"></script>
    
</body>
</html>

Esqueci de avisar que o código está validando mesmo quando os campos estão vazios!

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Quando você usa o atributo required no <select> ou no <input>, o formulário não será submetido se o usuário não preencher.
Quando você usa <input type="number"> o usuário não poderá usar letras. Para testar o seu código, tive que comentar vários trechos, mas acredito que você conseguirá testar no seu terminal do que jeito que escrevi:

<?php

$conn=new PDO("mysql:host=localhost;dbname=teste","root",""); // desconsidera
date_default_timezone_set('America/Sao_Paulo');
setlocale(LC_NUMERIC, 'pt_BR');
$id = 1; // desconsidera

if (count($_POST) > 0) {
    $data_hora_formatada = date('Y-m-d H:i:s');
    $dt_cadastro = date('Y-m-d H:i:s');
    $posto = $_POST['posto'];
    $status = $_POST['status'];
    $paciente = $_POST['paciente'] ?? null;
    $tipo_atend = $_POST['tipo_atend'];
    // $atend = $_POST['atend']; --> 
    $peso = str_replace(',', '.', $_POST['peso']);
    $alt = str_replace(',', '.', $_POST['alt']);
    $urg = isset($_POST['urg']) ? 1 : 0;
    $esp = $_POST['esp'];
        
    $erros = [];

// Verifica se o paciente existe
$stmt = $conn->prepare("SELECT * FROM paciente WHERE id_paciente = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
$pac = $stmt->fetch(PDO::FETCH_ASSOC);

/*  Calcular a idade do paciente
$dt_nascto = $pac['dt_nascto_paciente']; 
$idade = date_diff(date_create($dt_nascto), date_create('now'))->y;    

if (!empty($tipo_atend) && !empty($atend)) {
    // Buscar os limites de idade da especialidade
    $stmt = $conn->prepare("SELECT idade_ini_atend, idade_fim_atend FROM atend WHERE id_atend = :id_atend");
    $stmt->bindParam(':id_atend', $atend);
    $stmt->execute();
    $atend_data = $stmt->fetch(PDO::FETCH_ASSOC);

    // Verifica se a especialidade foi encontrada
    if ($atend_data) {
        $idade_ini = $atend_data['idade_ini_atend'];
        $idade_fim = $atend_data['idade_fim_atend'];

        // Verifica se os limites de idade estão definidos
        if (!is_null($idade_ini) && !is_null($idade_fim) && $idade_ini !== '' && $idade_fim !== '') {
            $idade_ini = (int)$idade_ini;
            $idade_fim = (int)$idade_fim;

            // Verifica se a idade do paciente está dentro dos limites
            if ($idade < $idade_ini || $idade > $idade_fim) {
                $erros[] = "A idade do paciente não está dentro dos limites permitidos para esta especialidade!";
            }
        }
    } else {
        $erros[] = "Especialidade não encontrada!";
    }
}    */
    
    if ($peso <= 0) {
        $erros[] = "Peso deve ser um número positivo!";
    }

    if ($alt <= 0) {
        $erros[] = "Altura deve ser um número positivo!";
    }

    if (!empty($erros)) {
        echo "<script>alert('ATENÇÃO! " . implode("\\n", $erros) . "');</script>";
    } /* else { 
        
        $sql_code = "INSERT INTO guia(id_posto, status_guia, id_paciente, id_tipo, id_atend, peso_guia, alt_guia, urg_guia, dt_cadastro_guia, id_esp) VALUES(:posto, :status, :paciente, :tipo_atend, :atend, :peso, :alt, :urg, :dt_cadastro, :esp)";
        $stmt = $conn->prepare($sql_code);
        $stmt->bindParam(':posto', $posto);
        $stmt->bindParam(':status', $status);
        $stmt->bindParam(':paciente', $id); 
        $stmt->bindParam(':tipo_atend', $tipo_atend);
        $stmt->bindParam(':atend', $atend);
        $stmt->bindParam(':peso', $peso);
        $stmt->bindParam(':alt', $alt);
        $stmt->bindParam(':urg', $urg);
        $stmt->bindParam(':dt_cadastro', $data_hora_formatada);
        $stmt->bindParam(':esp', $esp);
        
        $deu_certo = $stmt->execute();
        if ($deu_certo) {
            echo "<script>
                alert('Guia cadastrada com sucesso!!');
                window.location.href = 'buscaGuias.php?id_paciente=" . htmlspecialchars($id) . "';
            </script>";
            unset($_POST); 
        }
    } */
}

$query = $conn->query("SELECT * FROM paciente WHERE id_paciente = $id");
$pac=$query->fetch(PDO::FETCH_OBJ)->nome_paciente;

$query = $conn->query("SELECT id_posto, apelido_posto FROM posto ORDER BY apelido_posto ASC");
$postos = $query->fetchAll(PDO::FETCH_OBJ);

$query = $conn->query("SELECT id_esp, nome_esp FROM especialista ORDER BY nome_esp ASC");
$especialistas = $query->fetchAll(PDO::FETCH_OBJ);

$query = $conn->query("SELECT * FROM tipo_atend ORDER BY nome_tipo ASC");
$tipos = $query->fetchAll(PDO::FETCH_OBJ);


?>
<!DOCTYPE html>
<html>
<head>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" 
        rel="stylesheet"><!-- desconsidera -->
    <title>Cadastro de Guias</title>
</head>
<body>

    <div class="container" id="contcadGuia">
        <br>
        <div class="row">
            <h3><?=$pac?></h3>
            <div class="form col-sm-2" id="btnVoltar">
                <a href="buscaGuias.php?id_paciente=<?php echo htmlspecialchars($id); ?>" class="form-control btn btn-primary">Voltar</a>
            </div>
        </div>

        <form class="form-control-sm" method="post" id="form_addGuia" name="form_addGuia">
            
            <br> 

            <div class="row">
                
                <div hidden class="form col-sm-2" id="divStatus">
                    <label>Status<span class="destaque">*</span></label>
                    <input class="form-control form-control-sm inputs" name="status" id="status" type="hidden" maxlength="10" value="Ativa" readonly>
                </div>
                
                <div class="form col-sm-2" id="divPosto">
                    <label>Posto Solicitante
                    <input type="hidden" name="id" maxlength="150" value="<?php echo $id;?>">
                    <select name="posto" id="posto" required>
                        <option value="">Selecione..</option>
                        <?php foreach($postos as $option):?>
                        <option value="<?=$option->id_posto?>"><?=$option->apelido_posto?></option>
                        <?php endforeach; ?>                     
                    </select>
                </div>

                <div class="form col-sm-2" id="divEsp">
                    <label>Especialista Solicitante
                    <select name="esp" id="esp" required>
                        <option value="">Selecione..</option>
                        <?php foreach($especialistas as $option): ?>                       
                        <option value="<?=$option->id_esp?>"><?=$option->nome_esp?></option>
                        <?php endforeach; ?>                      
                    </select>
                </div>

                <div class="form col-sm-2" id="divTipo">
                    <label class=label-form>Tipo de Especialidade
                    <select name="tipo_atend" id="tipo_atend" required>
                        <option value="">Selecione..</option>
                        <?php foreach($tipos as $option): ?>
                        <option value="<?=$option->id_tipo?>"><?=$option->nome_tipo?></option>
                        <?php endforeach; ?>                     
                    </select>
                </div>

                <!--div class="form col-sm-2" id="divAtend">
                    <label>Especialidade
                    <select name="atend" id="atend" required>
                        <option value="">Selecione..</option>
                    </select>
                </div -->                
                
                <div class="form col-sm-1" id="divPeso">
                    <label>Peso
                    <input class="form-control form-control-sm inputs" name="peso" 
                        id="peso" type="number" step=0.01 required>
                </div>

                <div class="form col-sm-1" id="divAlt">
                    <label>Altura
                    <input class="form-control form-control-sm inputs" name="alt" 
                        id="alt" type="number" step=0.01 required> 
                </div>

                <div class="form col-sm-1" id="contUrg">
                    <div class="form-check" id="divUrg">
                        <input type="checkbox" name="urg" id="urg" class="form-check-input">
                        <label class="form-check-label" for="urg">Urgente</label>                
                    </div>
                </div>

                <div class="form col-sm-1" id="divBtnInserir">
                    <input class="form-control btn btn-primary" id="btnInserir" name="salvar" type="submit" value="Inserir">
                </div>
            </div>
        </form>
    </div>
</body>
</html>

 

Captura de tela 2024-11-03 061524.png

Editado por Frank K Hosaka
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...