PHP HTML表单验证

时间:2017-05-29 11:05:49

标签: php html5

所以我对HTML编程/脚本编写起来相当新。

我目前的项目是PHP / HTML,构建一个网站,HTML模板已经准备好了,但我需要插入PHP和JavaScript来使事情有效。

今天的问题,我正在为我的网站创建一个注册表单(在我创建登录和安全页面之前......)

我在w3schools找到了一些有用的信息,允许我复制和修改下面的代码。

代码工作正常,除非我修复了错误,否则会在页面上显示错误。

我想将php堆叠到一个函数中,以便在函数运行并定义vars之前,数据库处理的未定义vars没有显示在页面上,完全否定了其他错误php文件。

我现在的问题是该函数要么没有运行on click,要么没有将值返回到echo进行调试。

也许因为这是我的拳头PHP页面,我错过了你们可以帮助的东西

我检查了w3schools&谷歌的答案,但似乎没有什么足够详细,或问题是不一样的。

(文件名已被更改,并且为了便于阅读而删除了诸如类和样式之类的垃圾,未包含或不需要外部文件)

//PHP>Register page> php placed before form html
<?php
    //define variables
        //error var
    $usernameErr = $emailErr = $passwordErr = $repeatpassErr = "";
        //transferable vars
    $username = $email = $password = $repeatpass = "";

    //create session manager
        function session_reg(){
        //Start session registration
        session_start();
        //require push file
        require 'secure-sql.php';
        //confirm request method
            if($_SERVER['REQUEST_METHOD'] == "POST"){
            //confirm fields are populated
            if(empty($_POST["username"])) {
                    //if empty error
            $usernameErr = "Name is required";
            }else {
            //else confirm input and check restrictions
                $username = test_input($_POST["username"]);
                // check if name only contains letters and whitespace
                if (!preg_match("/^[a-zA-Z0-9 ]*$/",$username)) {
                        $usernameErr = "Only letters and white space allowed";
                }
            }
            //confirm fields are populated
            if(empty($_POST["email"])) {
                $emailErr = "Email is required";
            }else {
                $email = test_input($_POST["email"]);
                // check if e-mail address is well-formed
                if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                    $emailErr = "Invalid email format"; 
                }
            }
            //confirm fields are populated
            if(empty($_POST["password"])){
                $passwordErr = "Must enter a password";
            }else{
                $password = test_input($_POST["password"]);
            }
            //confirm fields are populated
            if(empty($_POST["repeatpass"])){
                $repeatpassErr = "Must repeat your password";
            }else{                      
                $repeatpass = test_input($_POST["repeatpass"]);
            }
        }
        //compare password and repeat are the same
        if ($password === $repeatpass){
            //db_quote to secure from injection
            $username = db_quote($_POST['username']);
            $email = db_quote($_POST['email']);
            $password = db_quote($_POST['password']);
//section is a work in progress, shouldn't be required for local debugging
            //query db for usernames and emails to avoid dupes
            //db_query()
            //insert into db
        }else{
            //or return password error
            $passwordErr = "passwords must be the same";
        }
    }
    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
?>

我尝试使用$GLOBALS['varname']从函数外部调用变量,并return $varname将其推回回来,但是没有结果,没有错误。

这是HTML表单,以便您知道我是如何尝试移动vars的。

//PHP> Register Page>After PHP Functions
<h2>Register</h2>
<h6>* Required field<h6>
        <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
        <table class='reg-table' style='align-content:center;'>
            <tr>
                <td>Username:</td>
                <td><input size='20' type="text" name="username" value='<?php echo $username;?>'><span>* <?php echo $usernameErr;?></span></td>
            </tr>
            <tr>
                <td>E-mail:</td> 
                <td><input type="text" name="email" value='<?php echo $email;?>'><span>* <?php echo $emailErr;?></span></td>
            </tr>
            <tr>
                <td>Password:</td>
            <td><input pattern=".{5,}" required title="5 characters minimum" type="password" name="password" ><span>* <?php echo $passwordErr;?></span></td>
            </tr>
            <tr>
                <td>Repeat Password:</td>
                <td><input type="password" name="repeatpass"><span>* <?php echo $passwordErr;?></span></td>
            </tr>
            <tr>
                <td></td>
            <td class="g-recaptcha" required></tr>
            </tr>
            <tr>
                <td></td>
                <td><input onclick="session_reg()" type="submit" name="submit" value="Register"></td>
            </tr>
        </table>
    </form>

最后,我尝试将输出调试到我正在使用的同一页面上。一旦我完成了休息时间的修复,这部分将被注释掉或删除。

//debug output
    echo "<h3>var outputs</h3>";
    echo "<br>";
    echo $username;
    echo "<br>";
    echo $usernameErr;
    echo "<br>";
    echo $email;
    echo "<br>";
    echo $emailErr;
    echo "<br>";
    echo $password;
    echo "<br>";
    echo $passwordErr;
    echo "<br>";
    echo "<h3>end debug</h3>";
    ?>

1 个答案:

答案 0 :(得分:0)

在我看来,您正在尝试使用onclick加载PHP函数。您只能使用onclick调用JavaScript函数。

<td><input onclick="session_reg()" type="submit" name="submit" value="Register"></td>