从php插入mysql数据库

从php插入mysql数据库,php,mysql,email,hash,Php,Mysql,Email,Hash,我已经用dovecot postfix和mysql创建了一个邮件服务器。 用户应该能够通过php网页创建新的邮件地址,该网页将数据插入mysql数据库。 它也会将其插入数据库,但与邮件服务器的连接无法使用该凭据。 当我自己将同样的东西插入数据库时,它可以工作,你能看一下代码并告诉我可能有什么问题吗? 我认为它与使用doveadm生成密码哈希有关 <?php ob_start(); session_start(); if( isset($_SESSION['user'

我已经用dovecot postfix和mysql创建了一个邮件服务器。 用户应该能够通过
php网页
创建新的邮件地址,该网页将数据插入
mysql数据库
。 它也会将其插入数据库,但与邮件服务器的连接无法使用该凭据。 当我自己将同样的东西插入数据库时,它可以工作,你能看一下代码并告诉我可能有什么问题吗? 我认为它与使用doveadm生成密码哈希有关

<?php
    ob_start();
    session_start();
    if( isset($_SESSION['user'])!="" ){
            header("Location: home.php");
    }
    include_once 'dbconnect.php';

    $error = false;

    if ( isset($_POST['btn-signup']) ) {

            // clean user inputs to prevent sql injections
            $name = trim($_POST['name']);
            $name = strip_tags($name);
            $name = htmlspecialchars($name);

            $email = trim($_POST['email']);
            $email = strip_tags($email);
            $email = htmlspecialchars($email);

            $pass = trim($_POST['pass']);
            $pass = strip_tags($pass);
            $pass = htmlspecialchars($pass);

            // basic name validation
            if (empty($name)) {
                    $error = true;
                    $nameError = "Please enter your full name.";
            } else if (strlen($name) < 3) {
                    $error = true;
                    $nameError = "Name must have atleat 3 characters.";
            } else {
                    // check email exist or not
                    $query = "SELECT username FROM accounts WHERE username='$name'";
                    $result = mysql_query($query);
                    $count = mysql_num_rows($result);
                    if($count!=0){
                            $error = true;
                            $nameError = "Benutzeraccount existiert schon.";
                    }
            }

            //basic email validation
            if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) {
                    $error = true;
                    $emailError = "Please enter valid email address.";
            } else {
                    // check email exist or not
                    $query = "SELECT resetmail FROM accounts WHERE resetmail='$email'";
                    $result = mysql_query($query);
                    $count = mysql_num_rows($result);
                    if($count!=0){
                            $error = true;
                            $emailError = "Kontakt E-Mail Adresse bereits in Verwendung.";
                    }
            }
            // password validation
            if (empty($pass)){
                    $error = true;
                    $passError = "Please enter password.";
            } else if(strlen($pass) < 6) {
                    $error = true;
                    $passError = "Password must have atleast 6 characters.";
            }

            // password encrypt using SHA256();
            $password = shell_exec('/usr/bin/doveadm pw -s SHA512-CRYPT -p '. $pass);


            // if there's no error, continue to signup
            if( !$error ) {

                    $query = "INSERT INTO accounts(username,domain,at,complete,resetmail,password,quota,enabled,sendonly) VALUES('$name','chillihorse.de','@','test','$email','$password','2048','1','0')";

                    $res = mysql_query($query);


                    if ($res) {
                            $errTyp = "success";
                            $errMSG = "Successfully registered, you may login now";
                            unset($name);
                            unset($email);
                            unset($pass);
                    } else {
                            $errTyp = "danger";
                            $errMSG = "Something went wrong, try again later...";
                    }

            }


    }
?>

每次在新代码中使用数据库扩展时,它都会被弃用,并且已经存在多年,在PHP7中永远消失。如果你只是在学习PHP,那么就把精力花在学习
PDO
mysqli
数据库扩展和准备好的语句上。您的脚本有可能会出现问题,请不要使用您自己的密码散列。PHP提供并请使用它们。如果您使用的是5.5之前的PHP版本,而不是在这里打印无用的错误消息,那么这里有一些示例将其更改为
$errMSG=mysql\u error()
然后您将看到是否/真正失败的地方将其更改为“$errMSG=mysql_error();”,但现在,每次在新代码中使用数据库扩展时,都不会再打印错误。它已被弃用多年,并且在PHP7中永远消失。如果你只是在学习PHP,那么就把精力花在学习
PDO
mysqli
数据库扩展和准备好的语句上。您的脚本有可能会出现问题,请不要使用您自己的密码散列。PHP提供并请使用它们。如果您使用的是5.5之前的PHP版本,而不是在这里打印无用的错误消息,那么这里有一些示例将其更改为
$errMSG=mysql\u error()然后您将看到是否/真正失败的地方将其更改为“$errMSG=mysql_error();”,但现在不再打印错误