PHP не показывает мне ошибки в формуляре

Хорошие во все, я создаю формуляр в HTML и PHP, и время посылания этого я хочу, чтобы Вы явились сообщением ошибки, если какое-либо из полей не выполняет обязательное условие. Моя проблема состоит в том, что Вы только остаетесь в первом поле, назовите, если Я даю Послать, если бы не наполнять ничего было должно показывать мне ошибки во всех полях, и если я наполнил какое-то поле, и все же Вы даете ошибку, эти поля должны бы быть полными с принятым в доме значением, до там мои тесты были в порядке, и: какова моя проблема?

  • Я стоивший fechaNacimiento даже не ключ
  • Имя всегда у меня остается покрашенным в формуляре
  • Если я пишу во всех полях, имени, ключ и fechaNacimiento Вы у меня остаетесь покрашенными в формуляре.

Мой кодекс PHP:

<head>
    <?php
        error_reporting (0);
        $partesFecha=explode("/",$_POST['fechaNacimiento']);
        $diaActual=$partesFecha[0];
        $mesActual=$partesFecha[1];
        $anyoActual=$partesFecha[2];

        if(isset($_POST['Enviar'])){
            $errores = array();
            if (!isset($_POST['nombre'])) {
                $errores[1] = '<span class="error">Introduce un nombre</span>';
            }
            if ((strlen($_POST['clave'] < 6)) && (strlen($_POST['clave']) > 12)) {
                $errores[2] = '<span class="error">La clave debe ser mayor de 6 y menor de 12 caracteres</span>';
            }
            if (!isset($_POST['genero'])) {
                $errores[3] = '<span class="error">Debes elegir un género</span>';
            }
            if ((!checkdate($mesActual, $diaActual, $anyoActual)) && (comprobarMayoriaEdad($diaActual, $mesActual, $anyoActual) < 18)) {
                $errores[4] = '<span class="error">La fecha debe ser dd/mm/yyyy y debes ser mayor de edad</span>';
            }
            if (!isset($_POST['pais'])) {
                $errores[5] = '<span class="error">Debes elegir un pais</span>';
            }
            if (!isset($_POST['acept'])) {
                $errores[6] = '<span class="error">Debes aceptar las condiciones</span>';
            } else {
                $nombre = $_POST['nombre'];
                $clave = $_POST['clave'];
                $genero = $_POST['genero'];
                $pais = $_POST['pais'];
                $acepto = $_POST['acept'];
            }
        }

        function comprobarMayoriaEdad($dia, $mes, $anyo){
            /*Fecha actual*/
            $diaAct=date("d");
            $mesAct=date("m");
            $anyoAct=date("Y");
            /*Fecha nacimiento*/
            $diaNac=$dia;
            $mesNac=$mes;
            $anyoNac=$anyo;
            /*Si el mes es el mismo pero el dia actual es inferior al que cumple años, no ha cumplido años, y restamos un año*/
            if(($mesNac==$mesAct)&&($diaNac>$diaAct)){
                $anyoAct=($anyoAct-1);
            }
            /*Si el mes actual es menor que el de nacimiento, no ha cumplido años y restamos un año*/
            if($mesNac>$mesAct){
                $anyoAct=($anyoAct-1);
            }
            /*Restamos los años para obtener la edad*/
            $edad=($anyoAct-$anyoNac);

            return $edad;
        }
    ?>
</head>

Мой формуляр в HTML:

<form name="Formulario" method="post" action=''>
    Nombre:
    <input type="text" name="nombre" value="<?php if(isset($_POST['nombre'])){echo $_POST['nombre'];}?>" />
    <?php if(isset($errores)){echo $errores[1];}?>
    <br/>
    <br/> Contraseña:
    <input type="password" name="clave" value="<?php if(isset($_POST['clave'])){echo $_POST['clave'];}?>" />
    <?php if(isset($errores)){echo $errores[2];}?>
    <br>
    <br/>
    <input type="radio" name="genero" value="H" />H
    <input type="radio" name="genero" value="M" />M
    <?php if(isset($errores)){echo $errores[3];}?>
    <br/>
    <br/> Fecha de nacimiento:
    <input type="text" name="fechaNacimiento" value="<?php if(isset($_POST['fechaNacimiento'])){echo $_POST['fechaNacimiento'];}?>" />
    <?php if(isset($errores)){echo $errores[4];}?>
    <br/>
    <br/>
    <select name="pais[]" multiple="multiple">
        <option value="España">España</option>
        <option value="Francia">Francia</option>
        <option value="Italia">Italia</option>
    </select>
    <?php if(isset($errores)){echo $errores[5];}?>
    <br/>
    <br/> Acepto las condiciones:
    <input type="checkbox" name="acept" value="OK" />
    <?php if(isset($errores)){echo $errores[6];}?>
    <br>
    <br/> Comentarios:
    <textarea name="comentarios" rows="10" cols="30" value=""></textarea>
    <br>
    <br/> Foto:
    <input type="file" name="foto" />
    <br/>
    <br/>
    <br/>
    <input type="submit" name="Enviar" value="Enviar" />
</form>
2
задан 20.10.2016, 20:07
4 ответа

Подтверди условия. Какие-то содержат ошибки и никогда он не войдет в них. Кроме того ты должен иметь в виду, что какие-то сельские типы не посланы никогда, в то время как другие только посланы, когда он "работал" с ними (например радио и checkboxes).

Мы увидим поля и утверждения один в один:


Имя - тип текст (input type='text') которым всегда он будет послан формуляром (даже, если он будет пустым), а следовательно будет считаться, что он всегда действительный, включено, если послана пустота. Не только ты был бы должен подтверждать, что он, но также что у него был размер (действительно его хватило бы тебе с вышеупомянутым):

if ($_POST['nombre'] != "") {

Потом у ключа есть проверка плохо:

if ((strlen($_POST['clave'] < 6)) && (strlen($_POST['clave']) > 12)) {

Никогда не будет встречаться случай, что длина ключа была одновременно несовершеннолетним, который 6 и больше, чем 12, ты был бы должен использовать || вместо && потому что то, что ты хочешь подтвердить, состоит в том, чтобы длина ключа не была меньшей, чем 6 или большие, чем 12:

if ((strlen($_POST['clave'] < 6)) || (strlen($_POST['clave']) > 12)) {

Дата рождения не удается, потому что в функции comprobarMayoriaEdad не подтверждается случай, в котором дата пустая. Что делает, что, если не прошла никакая дата, тогда исчисленный возраст будет равен настоящему году (всегда больше возраста).

Кроме того, у него есть та же проблема, что и ключ, if он должен бы быть с одним || или ты встретишься с проблемой, которую или выполняют две, или она не явится ошибкой. Тогда оно должно бы быть чем-то как это:

if ((!checkdate($mesActual, $diaActual, $anyoActual)) || (comprobarMayoriaEdad($diaActual, $mesActual, $anyoActual) < 18)) {

И в функции comprobarMayoriaEdad ты мог бы добавлять первую линию, которую возвращал бы 0, если год ($anyo) он не определен:

function comprobarMayoriaEdad($dia, $mes, $anyo){
    if (!$anyo) return 0;
    ....

Сейчас, на полях, которые остаются сходными. Это происходит, потому что их пишет в PHP:

<input type="text" name="nombre" value="<?php if(isset($_POST['nombre'])){echo $_POST['nombre'];}?>" />
...
<input type="password" name="clave" value="<?php if(isset($_POST['clave'])){echo $_POST['clave'];}?>" />
...
<input type="text" name="fechaNacimiento" value="<?php if(isset($_POST['fechaNacimiento'])){echo $_POST['fechaNacimiento'];}?>" />
...

То, что ты мог бы делать, состоит в том, чтобы добавлять переменную, когда осуществятся все проверки и будут правильны и только показывать стоимость, если что-то пошло плохо.

2
ответ дан 24.11.2019, 12:59

Мне кажется, что утверждение поля твоего формуляра проще, если ты делаешь ее с Jquery. Я обычно использую этот plugin https://jqueryvalidation.org/documentation /

Другое возможное решение состоит в том, чтобы добавлять свойство required к элементам DOM

<input type="radio" name="genero" value="H" required="true" />

И для password было бы чего-либо подобного

<input type="radio" name="genero" value="H" required="true" maxlength="12"/>

maxlenght, он не будет показывать тебе сообщение, это будет максимальное число символов, что пользователь может вводить

в компьютер
1
ответ дан 24.11.2019, 12:59
  • 1
    Это упражнение для класса и я должен использовать только PHP. –  NeoChiri 20.10.2016, 20:29
  • 2
    Использовать validaci и # 243; n s и # 243; это в стороне клиента это плохой pr и # 225; ctica. validaci и # 243; n с языком сценариев JavaScript или HTML смоги нарушать f и # 225; cilmente и посылать неправильную стоимость в сервер. –  Alvaro Montoro♦ 20.10.2016, 20:30
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <?php
    error_reporting (0);
    $partesFecha=explode("/",$_POST['fechaNacimiento']);
    $diaActual=$partesFecha[0];
    $mesActual=$partesFecha[1];
    $anyoActual=$partesFecha[2];

    if(isset($_POST['Enviar'])){
        $errores = array();
        if ( $_POST['nombre'] == '' ) {
            $errores[1] = '<span class="error">Introduce un nombre</span>';
        }
        if ( strlen($_POST['clave']) < 6 or strlen($_POST['clave']) > 12 ) {
            $errores[2] = '<span class="error">La clave debe ser mayor de 6 y menor de 12 caracteres</span>';
        }
        if (!isset($_POST['genero'])) {
            $errores[3] = '<span class="error">Debes elegir un género</span>';
        }
        if (!checkdate($mesActual, $diaActual, $anyoActual) && comprobarMayoriaEdad($diaActual, $mesActual, $anyoActual) < 18) {
            $errores[4] = '<span class="error">La fecha debe ser dd/mm/yyyy y debes ser mayor de edad</span>';
        }
        if (!isset($_POST['pais'])) {
            $errores[5] = '<span class="error">Debes elegir un pais</span>';
        }
        if (!isset($_POST['acept'])) {
            $errores[6] = '<span class="error">Debes aceptar las condiciones</span>';
        } else {
            $nombre = $_POST['nombre'];
            $clave = $_POST['clave'];
            $genero = $_POST['genero'];
            $pais = $_POST['pais'];
            $acepto = $_POST['acept'];
        }
    }

    function comprobarMayoriaEdad($dia, $mes, $anyo){
        /*Fecha actual*/
        $diaAct=date("d");
        $mesAct=date("m");
        $anyoAct=date("Y");
        /*Fecha nacimiento*/
        $diaNac=$dia;
        $mesNac=$mes;
        $anyoNac=$anyo;
        /*Si el mes es el mismo pero el dia actual es inferior al que cumple años, no ha cumplido años, y restamos un año*/
        if(($mesNac==$mesAct)&&($diaNac>$diaAct)){
            $anyoAct=($anyoAct-1);
        }
        /*Si el mes actual es menor que el de nacimiento, no ha cumplido años y restamos un año*/
        if($mesNac>$mesAct){
            $anyoAct=($anyoAct-1);
        }
        /*Restamos los años para obtener la edad*/
        $edad=($anyoAct-$anyoNac);

        return $edad;
    }
    ?>
</head>
<body>
    <form name="Formulario" method="post" action='' autocomplete="off" >
        Nombre:
        <input type="text" name="nombre" value="<?php if(isset($_POST['nombre'])){echo $_POST['nombre'];}?>" />
        <?php if(isset($errores)){echo $errores[1];}?>
        <br/>
        <br/> Contraseña:
        <input type="password" name="clave" value="<?php if(isset($_POST['clave'])){echo $_POST['clave'];}?>" />
        <?php if(isset($errores)){echo $errores[2];}?>
        <br>
        <br/>
        <input type="radio" name="genero" value="H" />H
        <input type="radio" name="genero" value="M" />M
        <?php if(isset($errores)){echo $errores[3];}?>
        <br/>
        <br/> Fecha de nacimiento:
        <input type="text" name="fechaNacimiento" value="<?php if(isset($_POST['fechaNacimiento'])){echo $_POST['fechaNacimiento'];}?>" />
        <?php if(isset($errores)){echo $errores[4];}?>
        <br/>
        <br/>
        <select name="pais[]" multiple="multiple">
            <option value="España">España</option>
            <option value="Francia">Francia</option>
            <option value="Italia">Italia</option>
        </select>
        <?php if(isset($errores)){echo $errores[5];}?>
        <br/>
        <br/> Acepto las condiciones:
        <input type="checkbox" name="acept" value="OK" />
        <?php if(isset($errores)){echo $errores[6]; var_dump($errores); }?>
        <br>
        <br/> Comentarios:
        <textarea name="comentarios" rows="10" cols="30" value=""></textarea>
        <br>
        <br/> Foto:
        <input type="file" name="foto" />
        <br/>
        <br/>
        <br/>
        <input type="submit" name="Enviar" value="Enviar" />
    </form>
</body>
</html>

Петля каких-то вещей сначала есть больше скобки их приведенный в соответствие в решениях о IF секунда ты поместил if(!isset($_POST['nombre'])) он это чувствует он будет фальшивым, потому что, если ты посылаешь формуляр, уже он существует, то, что ты был должен санкционировать, что эта пустота или нет

Рекомендация: Что ты хотел, чтобы он оставил ошибку из-за пустоты, или он не использует помимо этого этикетку required html5 для даты использует тип восходите, и как ты не можешь быть нескольким parisea, лиши его стран тот факт, что это был array.

0
ответ дан 24.11.2019, 12:59
  • 1
    Вещь - что, если ты можешь выбирать несколько стран. –  NeoChiri 20.10.2016, 20:29

1.1) В основном дебете меняться && из-за || так как ты говоришь, что, если ключ МЕНЬШЕ В 6 И ПРЕВОСХОДЯЩИЙ 12 он должен выполнять эти 2 условия...

1.2) Также ты должен менять операцию && из-за || потому что ты санкционируешь кроме того формат, если он выполняет формат dd / мм / yyyy Y, он не младше тогда он вошел бы, чтобы показывать ошибку, однако, если он больше возраста, НО формат плохой не санкционировал бы не показал бы ошибку. В этом выборе я отделил бы утверждения был бы порядком

if ((!checkdate($mesActual, $diaActual, $anyoActual)){
     echo "error en fecha formato"
}else if (comprobarMayoriaEdad($diaActual, $mesActual, $anyoActual) < 18){
     echo "menor de edad";
}

И как вторая ошибка, они остаются "сходными", потому что ты не обновляешь их, что я сделал бы серьезная изменчивые setear от утверждения до HTML прямо

if($clave < 6 || $clave > 12){
    $error_clave = true;
}

HTML

 <input type="password" name="clave" value="<?php if(isset($_POST['clave'])){echo $_POST['clave'];}?>" />
 <?php if($error_clave){
      echo '<span class="error">Error en la clave</span>'
   }
 ?>
0
ответ дан 24.11.2019, 12:59