PHP VALIDAÇÕES - AJUDA

Boa Tarde

As minhas dúvidas são:

É possível usar a função required (HTML) no select ?

Existe alguma função que limpe o campo automáticamente (como fosse um clear) em PHP?

O ficheiro de PHP faz sentido (se está bem programado)?

Agradeço a ajuda de todos!

Abraço

HTML:
<section class="section section_reservation mt-5" id="reservation">
        <div class="container">
            <div class="row">
                <div class="col">
                    <h2 class="text-center">Reserva Online</h2>
                </div>
            </div>
            <div class="row justify-content-lg-center section_reservation__row">
                <div class="col-lg-8">
                    <form class="section_reservation__form" action="reservation.php" method="post">
                        <div class="row">
                            <div class="col-md-6">
                                <div class="form-group">
                                    <label class="sr-only">Nome Completo</label>
                                    <input type="text" class="form-control" name="name" placeholder="Nome Completo" required>
                                </div>
                                <div class="form-group">
                                    <label class="sr-only">Telemóvel</label>
                                    <input type="tel" class="form-control" name="tel" placeholder="Telemóvel" maxlength="9" required>
                                </div>
                                <div class="form-group">
                                    <label class="sr-only">E-mail</label>
                                    <input type="email" class="form-control" name="email" placeholder="E-mail" required>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="form-group">
                                    <label class="sr-only">Pessoas</label>
                                    <select class="form-control" name="people">
                                        <option value="0">Selecione!</option>
                                        <option value="1">1 pessoa</option>
                                        <option value="2">2 pessoas</option>
                                        <option value="3">3 pessoas</option>
                                        <option value="4">4 pessoas</option>
                                        <option value="5">5 pessoas</option>
                                    </select>
                                </div>
                                <div class="form-group">
                                    <label class="sr-only">Data</label>
                                    <input type="date" class="form-control" name="date" required>
                                </div>
                                <div class="form-group">
                                    <label class="sr-only">Time</label>
                                    <input type="time" class="form-control" name="time" required>
                                </div>
                            </div>
                            <div class="col">
                                <div class="text-center">
                                    <button type="submit" class="btn btn-primary">Reserve</button>
                                </div>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </section>

PHP:
<?php

    if($_SERVER['REQUEST_METHOD'] == 'POST'){
        if(!isset($_POST['name']) ||
           !isset($_POST['tel']) ||
           !isset($_POST['email']) ||
           !isset($_POST['people']) ||
           !isset($_POST['date']) ||
           !isset($_POST['time']) )
        {
            header('Location: index.php#reservation');
            die();
        }
    }     

    $name = $_POST['name'];
    $tel = $_POST['tel'];
    $email = $_POST['email'];
    $people = $_POST['people'];
    $date = $_POST['date'];
    $time = $_POST['time'];

    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
        // Existe alguma função que limpe o campo ?
    } else{
        $name = $_POST['name'];
    }
   
    if (!preg_match("/^[0-9]*$/",$tel)) {
        // Existe alguma função que limpe o campo ?
    } else{
        $tel = $_POST['tel'];
    }

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
        // Existe alguma função que limpe o campo ?
    } else{
        $email = $_POST['email'];
    }

    if (!empty($name) && !empty($tel) && !empty($email) && !empty($people) && !empty($date) && !empty($time)){
        include('email.php'); // Ficheiro que envia os dados do formulário
    }
 
Boa Tarde

Fiz algumas alterações, no entanto continua sem dar. Não me apresenta os erros no site.
Penso que o PHP agora esteja correto, que lhe parece? Aguardo Resposta.
Abraço

HTML:
<form class="section_reservation__form" action="reservationn.php" method="post">
                        <div class="row">
                            <div class="col-md-6">
                                <div class="form-group">
                                    <label class="sr-only">Nome Completo</label>
                                    <input type="text" class="form-control" name="name" placeholder="Nome Completo" required>
                                </div>
                                <div class="form-group">
                                    <label class="sr-only">Telemóvel</label>
                                    <input type="tel" class="form-control" name="tel" placeholder="Telemóvel" maxlength="9" required>
                                </div>
                                <div class="form-group">
                                    <label class="sr-only">E-mail</label>
                                    <input type="email" class="form-control" name="email" placeholder="E-mail" required>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="form-group">
                                    <label class="sr-only">Pessoas</label>
                                    <select class="form-control" name="people" required>
                                        <option value="">Selecione</option>
                                        <option value="1">1 pessoa</option>
                                        <option value="2">2 pessoas</option>
                                        <option value="3">3 pessoas</option>
                                        <option value="4">4 pessoas</option>
                                        <option value="5">5 pessoas</option>
                                    </select>
                                </div>
                                <div class="form-group">
                                    <label class="sr-only">Data</label>
                                    <input type="date" class="form-control" name="date" required>
                                </div>
                                <div class="form-group">
                                    <label class="sr-only">Time</label>
                                    <input type="time" class="form-control" name="time" required>
                                </div>
                            </div>
                            <div class="col">
                                <div class="text-center">
                                    <button type="submit" class="btn btn-primary">Reserve</button>
                                </div>
                            </div>
                        </div>
                    </form>

<?php if(!empty($error)):?>
        <div class="alert alert-warning" role="alert"><?php echo $error;?></div>
    <?php endif;?>

PHP:
<?php

    $name = $tel = $email = $people = $date = $time = '';
    $error = '';

    if($_SERVER['REQUEST_METHOD'] == 'POST'){

        if(!isset($_POST['name']) ||
           !isset($_POST['tel']) ||
           !isset($_POST['email']) ||
           !isset($_POST['people']) ||
           !isset($_POST['date']) ||
           !isset($_POST['time']) )
        {
            header('Location: index.php#reservation');
            $error = 'Pelo menos um dos campos não existe';
        }

        if(empty($error)){

            if(empty($_POST['name']) || !preg_match("/^[a-zA-Z ]*$/", $name)){
                $error = 'Nome Inválido';
            } else {
                $name = $_POST['name'];
            }
            if(empty($_POST['tel']) || !preg_match("/^[0-9]*$/", $tel) || strlen($_POST['tel']) > 9){
                $error = 'Telemóvel Inválido';
            } else {
                $tel = $_POST['tel'];
            }
            if(empty($_POST['email']) || !filter_var($email, FILTER_VALIDATE_EMAIL)){
                $error = 'Email Inválido';
            } else {
                $email = $_POST['email'];
            }
            if(empty($_POST['people'])){
                $error = 'É necessário que introduza um número de pessoas';
            } else {
                $people = $_POST['people'];
            }
            if(empty($_POST['date'])){
                $error = 'É necessário que introduza uma data';
            } else {
                $date = $_POST['date'];
            }
            if(empty($_POST['time'])){
                $error = 'É necessário que introduza um horário';
            } else {
                $time = $_POST['time'];
            }
        } 
        if(empty($error)){
            include('email.php');
        } else {
            header('Location: index.php#reservation');
        }
    }
 
PHP:
<?php include "reservation.php"; ?>
<form class="section_reservation__form" method="post">
    <div class="row">
        <div class="col-md-6">
            <div class="form-group">
                <label class="sr-only">Nome Completo</label>
                <input type="text" class="form-control" name="name" placeholder="Nome Completo" value="<?= isset($name) ? $name : ""?>">
            </div>
            <div class="form-group">
                <label class="sr-only">Telemóvel</label>
                <input type="tel" class="form-control" name="tel" placeholder="Telemóvel" maxlength="9" value="<?= isset($tel) ? $tel : ""?>"">
            </div>
            <div class="form-group">
                <label class="sr-only">E-mail</label>
                <input type="email" class="form-control" name="email" placeholder="E-mail" value="<?= isset($email) ? $email : ""?>"">
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-group">
                <label class="sr-only">Pessoas</label>
                <select class="form-control" name="people">
                    <option value="" >Selecione</option>
                    <option value="1" <?= isset($people) && $people == 1 ? "selected" : ""?>>1 pessoa</option>
                    <option value="2" <?= isset($people) && $people == 2 ? "selected" : ""?>>2 pessoas</option>
                    <option value="3" <?= isset($people) && $people == 3 ? "selected" : ""?>>3 pessoas</option>
                    <option value="4" <?= isset($people) && $people == 4 ? "selected" : ""?>>4 pessoas</option>
                    <option value="5" <?= isset($people) && $people == 5 ? "selected" : ""?>>5 pessoas</option>
                </select>
            </div>
            <div class="form-group">
                <label class="sr-only">Data</label>
                <input type="date" class="form-control" name="date" value="<?= isset($date) ? $date : ""?>">
            </div>
            <div class="form-group">
                <label class="sr-only">Time</label>
                <input type="time" class="form-control" name="time" value="<?= isset($time) ? $time : ""?>">
            </div>
        </div>
        <div class="col">
            <div class="text-center">
                <button type="submit" class="btn btn-primary">Reserve</button>
            </div>
        </div>
    </div>
</form>

PHP:
<?php

$name = $tel = $email = $people = $date = $time = '';
$errors = [];

if($_SERVER['REQUEST_METHOD'] == 'POST'){

    if(!isset($_POST['name']) ||
        !isset($_POST['tel']) ||
        !isset($_POST['email']) ||
        !isset($_POST['people']) ||
        !isset($_POST['date']) ||
        !isset($_POST['time']) )
    {
        header('Location: /');
        $errors[] = 'Pelo menos um dos campos não existe';
    }

    if(empty($errors)){

        if(empty($_POST['name']) || !preg_match("/^[a-zA-Z ]*$/", $name)){
            $errors[] = 'Nome Inválido';
        } else {
            $name = $_POST['name'];
        }
        if(empty($_POST['tel']) || !preg_match("/^[0-9]*$/", $tel) || strlen($_POST['tel']) > 9){
            $errors[] = 'Telemóvel Inválido';
        } else {
            $tel = $_POST['tel'];
        }
        if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
            $errors[] = 'Email Inválido';
        } else {
            $email = $_POST['email'];
        }
        if(empty($_POST['people'])){
            $errors[] = 'É necessário que introduza um número de pessoas';
        } else {
            $people = $_POST['people'];
        }
        if(empty($_POST['date'])){
            $errors[] = 'É necessário que introduza uma data';
        } else {
            $date = $_POST['date'];
        }
        if(empty($_POST['time'])){
            $errors[] = 'É necessário que introduza um horário';
        } else {
            $time = $_POST['time'];
        }
    }
    if(empty($errors)){
        include('email.php');
    }
}

Analisa as alterações que fiz, para perceberes o que estava mal.
 
Não devo manter esta linha de código para apresentar os erros? No entanto apresenta este erro, caso mantenha a linha de código: "Array to string conversion". Um segundo erro que aparece: "Cannot modify header information - headers already sent" linha 15 (header: 'Location: /'); no reservation.php

Eu testei o código e o formulário é submetido conseguindo passar pelas validações (ainda não consegui perceber o porquê )

PHP:
<?php if(!empty($errors)):?>
        <div class="alert alert-warning" role="alert"><?php echo $errors;?></div>
    <?php endif;?>
 
Última edição:
No código que alterei eu alterei essa linha.
PHP:
<?php if(!empty($errors)):?>
    <?php foreach($errors as $error): ?>
        <div class="alert alert-warning" role="alert"><?php echo $error;?></div>
    <?php endforeach; ?>
<?php endif;?>

Esqueci-me de incluir.
No segundo erro, para resolver basta colocar o include do reservation no topo do ficheiro html, antes da tag do doctype
 
Ao testar: ao clicar primeiro no botão de reserva, apresentame os erros ( falta preencher os campos ) (correto!); ao eliminar um campo do html e ao clicar no botão de reserva, não apresenta o erro nem redireciona corretamente. preenchi os campos com os dados corretos exceto o nome (coloquei números) e o formulário foi submetido (o que não deveria acontecer).

No entanto eu penso que as validações estão bem, não deveria funcionar tudo ?
 
Resolveu o problema (redirecionamento).

Preenchi os campos com os dados corretos exceto o nome (coloquei números) e o formulário foi submetido (o que não deveria acontecer), o que é que estará a falhar?
 
O erro está onde estás a fazer a validação do name. Estás a validar na expressão regular o $name, mas ainda não fizeste set de nada na variável $name. O que tens de colocar na expressão regular é $_POST['name'] conforme eu já tinha corrigido em baixo no email, por isso te disse para olhares para o que corrigi, para tentares entender.
 
Correto! Obrigado!

Fiz esta função, mas só elimina um erro como é que a devo corrigir ?

PHP:
<?php if(!empty($errors)): ?>
    <?php foreach($errors as $error): ?>
        <div class="alert alert-warning" role="alert" id="error"><?php echo $error; ?></div>
    <?php endforeach; ?>
    <?php endif; ?>

Código:
$().ready(function() {
    setTimeout(function () {
        $('#error').hide();
    }, 2500);
});
 
Eu quando me refiro ao id é ao do HTML que está embebido no PHP, se alterar para uma class é a mesma coisa.

Podes usar um iterador e adicionar no id e depois usar esse iterador para fazer o for no JS.
Ou podes usar a class e recebes um array.

Código:
var elements = document.getElementsByClassName("alert alert-warning");
for ( var i=0; I < elements.length; i++){
    // a tua lógica aqui.
}
 
Mesmo assim não funciona!

Código:
var elements = document.getElementsByClassName("alert alert-warning");
for ( var i=0; I < elements.length; i++){
    $().ready(function() {
    setTimeout(function () {
        $('#error').hide();
    }, 2500);
});
}
 
Back
Topo