PHP 专注于输入

PHP Focus on input

我正在尝试创建一个 PHP 验证表单。 验证错误每次都为我正确显示。我唯一的问题是,如果出现错误,我无法将焦点设置在错误的输入上。 例如,我正在使用 $rut_error、$first_name_error、$last_name_error、$email_error、$address_error 并且我想将焦点设置在相应的输入上如果出现任何错误。 我尝试使用 javascript 但我不清楚我应该把代码放在哪里,谁能指导我如何解决它?我可以只用 PHP 解决这个问题吗?请帮忙。

我尝试进入这里但没有成功:

//First name Validation
if (empty($_POST["first_name"]) and $rut_error == '')
{
    $first_name_error = "First name is required";
    echo "<script>document.registration.first_name.focus();</script>";
}

我的代码如下:

addStudent.php

<html>
    <head>
        <title>Add Client</title>
    </head>
    <body>
        <a href="getStudentInfo.php">Show Client</a>
        <?php include('form_processStudent.php'); ?>
        <div id="divAgenda"> 
        <form id="contact" action="<?= htmlspecialchars($_SERVER["PHP_SELF"]) ?>" method="post" name = "registration">
            <fieldset>
                <span class="error"><?= $rut_error ?></span><br>
                <input placeholder="Rut..." id="rut" type="text" name="rut" value="<?= $rut ?>" tabindex="1" size="8" maxlength="8"> - <input type="text" name="dv" value="<?= $dv ?>" size="1" tabindex="2" maxlength="1">  Ejemplo: 12345678-1<br>
            </fieldset>
            <fieldset>
                <span class="error"><?= $first_name_error ?></span><br>
                <input placeholder="Primer Nombre..." id="first_name" type="text" id="first_name" name="first_name" value="<?= $first_name ?>" maxlength="50" tabindex="3"><br>
            </fieldset>
            <fieldset>
                <span class="error"><?= $last_name_error ?></span><br>
                <input placeholder="Segundo Nombre..." id="last_name" type="text" id="last_name" name="last_name" value="<?= $last_name ?>" maxlength="50" tabindex="4"><br>
            </fieldset>
            <fieldset>
                <span class="error"><?= $email_error ?></span><br>
                <input placeholder="Correo Electrónico..." id="email" type="text" name="email" value="<?= $email ?>" maxlength="100" tabindex="5"><br>
            </fieldset>
            <fieldset>
                <span class="error"><?= $address_error ?></span><br>
                <input placeholder="Dirección..." id="address" type="text" name="address" value="<?= $address ?>" maxlength="200" tabindex="5"><br>
            </fieldset>
            <fieldset>
                <button name="submit" type="submit" id="contact-submit" data-submit="...Sending">Enviar</button>
            </fieldset>
        </form>
    </body>
</html>

form_processStudent.php

<?php 

// define variables and set to empty values
        echo"<script>
                          document.registration.last_name.focus();
                          return false;

        </script>";
$rut_error = $first_name_error = $last_name_error = $email_error = $address_error = "";
$rut = $dv = $first_name = $last_name = $email = $address = "";

if(isset($_POST['submit']))
{
    //RUT Validation
    $rut = test_input($_POST["rut"]);
    $dv  = ($_POST["dv"]);
    if ( empty($_POST["rut"]))
    {
        $rut_error = "RUT is required";
    }
    else if ( $dv=='' )
    {
        $rut_error = "Verification digit is required";
    }
    else if (!is_numeric($rut))
    {
        $rut_error = "Entered RUT is not numeric";
    }
    else if (!((strlen($rut) == 7) or (strlen($rut) == 8)))
    {
        $rut_error = "Number of digits of RUT not valid";
    }
    else
    {
        $x = 2; $s = 0; $dv2 = 0;
        for($i = (strlen($rut) - 1); $i >= 0; $i--)
        {
            if($x > 7)
                $x = 2;
            $s += ($rut[$i] * $x);
            $x++;
        }
        $dv2=11-($s % 11);
        if($dv2 == 10)
            $dv2 = 'K';
        if($dv2 == 11)
            $dv2 = '0';
        if($dv2 == $dv)
        {
            //echo "<br>". "rut={" . $rut . "}";
            //echo "<br>". "dv ={" . $dv . "}";
        }
        else
            $rut_error = "invalid RUT";
    }

    //First name Validation
    if (empty($_POST["first_name"]) and $rut_error == '')
    {
        $first_name_error = "First name is required";
        echo "<script>document.registration.first_name.focus();</script>";
    }
    else
    {
        if ($rut_error == '')
        {
            $first_name = test_input($_POST["first_name"]);
            //echo "<br>". "first_name={" . $first_name . "}";
        }
    }
    //Last name Validation
    if (empty($_POST["last_name"]) and $rut_error == '' and $first_name_error == '')
    {
        $last_name_error = "Second name is required";
        echo "<script>function validateform()
                      {
                          document.registration.last_name.focus();
                          return false;
                      }
              </script>";
    }
    else
    {
        if ($rut_error == '' and $first_name_error == '')
        {
            $last_name = test_input($_POST["last_name"]);
            //echo "<br>". "last_name={"  . $last_name  . "}";
        }
    }
    //Email Validation
    if (empty($_POST["email"]) and $rut_error == '' and $first_name_error == '' and $last_name_error == '')
    {
        $email_error = "Email is required";
    }
    else
    {
        if ($rut_error == '' and $first_name_error == '' and $last_name_error == '')
        {
            $email = test_input($_POST["email"]);
            //echo "<br>". "email={"  . $email  . "}";
            // check if e-mail address is well-formed
            if ((!filter_var($email, FILTER_VALIDATE_EMAIL)) and $rut_error == '' and $first_name_error == '' and $last_name_error == '')
            {
                $email_error = "Invalid email"; 
            }
        }
    }

    //Adress Validation
    if (empty($_POST["address"]) and $rut_error == '' and $first_name_error == '' and $last_name_error == '' and $email_error == '')
    {
        $address_error = "Address is required";
    }
    else
    {
        if ($rut_error == '' and $first_name_error == '' and $last_name_error == '' and $email_error == '')
        {
            $address = test_input($_POST["address"]);
            //echo "<br>". "address={"  . $address  . "}";
        }
    }

    if ($rut_error == '' and $first_name_error == '' and $last_name_error == '' and $email_error == '' and $address_error == '')
    {
        //echo "<br>". "Dentro de IF";echo "<br>";
        require_once('mysqli_connect.php');
        $query = "INSERT INTO students (rut, dv, first_name, last_name, email, address) VALUES (?,?,?,?,?,?)";
        $stmt = mysqli_prepare($dbc, $query);
        mysqli_stmt_bind_param($stmt, "ssssss", $rut, $dv, $first_name, $last_name, $email, $address);
        mysqli_stmt_execute($stmt);
        $affected_rows = mysqli_stmt_affected_rows($stmt);

        echo 'affected_rows=<' . $affected_rows . '>';

        if($affected_rows == 1)
        {
            $rut = $dv = $first_name = $last_name = $email = $address = '';
            echo "<br>"."Client Entered";
            mysqli_stmt_close($stmt);
            mysqli_close($dbc);
        }
            else
            {
                echo 'Error Occurred<br />';
                echo mysqli_error();
                mysqli_stmt_close($stmt);
                mysqli_close($dbc);
            }

    }
}

function test_input($data)
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

getStudentInfo.php

<a href="addStudent.php">Add Client</a>
<?php
    // Get a connection for the database
    require_once('mysqli_connect.php');

    // Create a query for the database
    $query = "SELECT serie, rut, dv, first_name, last_name, email, address FROM students ORDER BY serie desc";

    // Get a response from the database by sending the connection
    // and the query
    $response = @mysqli_query($dbc, $query);

    // If the query executed properly proceed
    if($response)
    {
        echo '<table align="left" cellspacing="5" cellpadding="8">
                <tr><td align="left"><b>Serie              </b></td>
                    <td align="left"><b>Rut                </b></td>
                    <td align="left"><b>Dígito Verificador </b></td>
                    <td align="left"><b>Primer Nombre      </b></td>
                    <td align="left"><b>Segundo Nombre     </b></td>
                    <td align="left"><b>Email              </b></td>
                    <td align="left"><b>Dirección          </b></td>
                </tr>';

        // mysqli_fetch_array will return a row of data from the query
        // until no further data is available
        while($row = mysqli_fetch_array($response))
        {
            echo '<tr><td align="left">' . $row['serie']      . '</td>
                      <td align="left">' . $row['rut']        . '</td>
                      <td align="left">' . $row['dv']         . '</dv>
                      <td align="left">' . $row['first_name'] . '</td>
                      <td align="left">' . $row['last_name']  . '</td>
                      <td align="left">' . $row['email']      . '</td>
                      <td align="left">' . $row['address']    . '</td>'
                      ;
            echo '</tr>';
        }

        echo '</table>';

    }
        else
        {
            echo "Couldn't issue database query<br />";

            echo mysqli_error($dbc);

        }

    // Close connection to the database
    mysqli_close($dbc);

?>

mysqli_connect.php

<?php

    // Defined as constants so that they can't be changed
    DEFINE ('DB_USER', 'studentweb');
    DEFINE ('DB_PASSWORD', '123');
    DEFINE ('DB_HOST', 'localhost');
    DEFINE ('DB_NAME', 'dbTest');

    // $dbc will contain a resource link to the database
    // @ keeps the error from showing in the browser

    $dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
        OR die('Could not connect to MySQL: ' . mysqli_connect_error());
    //echo "Connected...\n\n";
?>

您可以通过 javascript 完成。

您放置了一个在页面完全加载后即可运行的脚本。 该脚本将检查每个 <span class="error"> 的内容。如果找到非空的,则将焦点放在它上面。

在你的html中:

<body>
   ...
    <script type="text/javascript">
      window.onload = function(){
         var errors = document.querySelectorAll('.error');
         for(var i = 0, l = errors.length; i < l; i++){
             var error = errors[i],
                 shouldForcus = error.textContent.trim().length !== 0;
             if(shouldFocus){
                 var input = error.parentNode.querySelector('input');
                 input.focus();
                 break;

             }    

         }
      }
    </script>
</body>