首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP表单未将信息保存到SQL数据库

PHP表单未将信息保存到SQL数据库
EN

Stack Overflow用户
提问于 2019-02-21 02:03:14
回答 1查看 50关注 0票数 0

我目前正在做一个项目,它有一个注册表,理论上应该可以为注册工作,但我似乎无法确定我做错了什么。

以下代码是注册表的前端部分

<form style="border: 3px solid #ddd; border-radius: 10px; padding: 10px;" class="uk-form-stacked js-register">

        <div class="uk-margin">
            <label class="uk-form-label" for="form-stacked-text"><b>Username:</b></label>
            <div class="uk-form-controls">
                <input id="user_name" style="border-radius: 10px;" class="uk-input" name="form-stacked-text" type="text" required='required' placeholder="Insert Username">
            </div>
        </div>
        <div class="uk-margin">
            <label class="uk-form-label" for="form-stacked-text"><b>Email:</b></label>
            <div class="uk-form-controls">
                <input id="user_email" class="uk-input" style="border-radius: 10px;" name="form-stacked-text" type="email" required='required' placeholder="Insert Email">
            </div>
        </div>
        <div class="uk-margin">
            <label class="uk-form-label" for="form-stacked-text"><b>Password:</b></label>
            <div class="uk-form-controls">
                <input id="user_pass" class="uk-input" style="border-radius: 10px;" name="user_pass" type="Password" required='required' placeholder="Insert Password">
            </div>
        </div>
        <div class="uk-margin">
            <label class="uk-form-label" for="form-stacked-text"><b>Confirm Password:</b></label>
            <div class="uk-form-controls">
                <input id="user_pass_check" class="uk-input" style="border-radius: 10px;" name="user_pass_check" type="Password" required='required' placeholder="Confirm Password">
            </div>
        </div>
        <div class="uk-margin">
            <div class="uk-form-controls">
                <div class="captcha">

                    <div align="center" class="g-recaptcha" data-sitekey="-" data-callback="recaptcha_callback"></div>
                </div>
                <br>
            </div>
        </div>

        <div class="uk-margin uk-alert-danger js-error" style='display: none;'></div>

        <div class="uk-margin">
            <label><center>Already have an account? <a href='/~za1180x/comp1687/login.php'>login now!</a></center></label>
            <br>
            <center><button id="registerbtn" name="registerbtn" class="uk-button uk-button-default"  type="submit"><b>REGISTER</b></button></center>
        </div>

    </form>

负责将信息提交到数据库的后端代码如下

if($_SERVER['REQUEST_METHOD'] != 'POST')
{
    $return = [];
    $email = Filter::String( $_POST['user_email']);
    $password = Filter::String( $_POST['user_pass']);
    $username = Filter::String( $_POST['user_name']);

    $user_found = User::Find($email, $username);

    mysqli_report ( MYSQLI_REPORT_ALL);

    if($user_found) {
        // User exists
        // We can also check to see if they are able to log in.
        $return['error'] = "You already have an account";
        $return['is_logged_in'] = false;
    } else  {

        // User does not exist, add them now.
        $password = password_hash($_POST['password'], PASSWORD_DEFAULT);
        // make sure the user CAN be added AND is added.
        $addUser = $con->prepare("INSERT INTO users(user_name, user_email, user_pass) VALUES(:user_name, LOWER(:user_email), :user_pass)");
        $addUser->bindParam(':username', $username, PDO::PARAM_STR);
        $addUser->bindParam(':email', $email, PDO::PARAM_STR);
        $addUser->bindParam(':password', $password, PDO::PARAM_STR);
        $addUser->execute();

        $user_id = $con->lastInsertId();

        $_SESSION['user_id'] = (int) $user_id;

        $return['is_logged_in'] = true;

        $return['redirect'] = 'C:\wamp64\www\index.php?message=welcome';


    }
    // return the proper information back to Javascript to redirect us.

    echo json_encode($return, JSON_PRETTY_PRINT);
} else {
    //Kill the script. Redirect the user.
    exit('Invalid URL');
}

下面的代码是我创建的用于建立数据库连接的类。

class DB {

    protected static $con;

    private function __construct(){
        try {

            self::$con = new PDO( 'mysql:charset=latin1;host=localhost;port=3306;dbname=webenterprise', 'root', ''); //change connection string
            self::$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            self::$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
            self::$con->setAttribute( PDO::ATTR_PERSISTENT, false );
            self::$con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

        } catch (PDOException $e) {
            echo "Could not connect to database."; exit;
        }
    }


    public static function getConnection() {
        //If this instance has not been started, start it.
        if (!self::$con) {
            new DB();
        }
        //Return the writeable db connection
        return self::$con;
    }

   }
EN

回答 1

Stack Overflow用户

发布于 2019-02-21 04:33:43

我可以看到不同的问题:

  • 您的表单元素中没有method属性(GET是默认方法);
  • 您的表单元素中没有action属性;
  • 您的表单中的name属性与您正在使用的D9变量不对应(可能与is混淆?);
  • 您的后端代码以if($_SERVER['REQUEST_METHOD'] != 'POST')开始,但您在以下位置使用了$_POST变量:您应该改用if($_SERVER['REQUEST_METHOD'] == 'POST')

F216

也许我漏掉了一些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54792642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档