首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >注册表到mysql数据库

注册表到mysql数据库
EN

Stack Overflow用户
提问于 2018-08-30 07:39:24
回答 1查看 0关注 0票数 0

我是PHP新手,我得到了它的主旨。我看过大约20种不同的YouTube视频和在线教程,以便在我来到这里之前弄清楚如何做到这一点。我通过亲自动手,试验和错误学到了最好的知识,但是我无法克服这一点。我正在尝试将此基本注册表单数据发送到我的sql数据库。我使用xampp作为我的本地主机。我在做一个myphpadmin数据库标题database1,然后表是database11用和idemailpasswordusername我将让我的用户稍后添加一个用户名。对于第一个表单,我只想让一个用户到我的站点输入他们的1.电子邮件,2。密码和3.确认密码。我知道我的当前代码会出现安全问题,但我想在我添加更多代码(如密码安全性等)之前,想知道如何连接所有这些。这是我到目前为止:

<p>
<form action="login2.php" method="POST">
<br>
Email:<input type="text" name="email">
<br>
Password:<input type="text" name="password">
<br>
Confirm Password:<input type="text" name="confirmpass">
<br>
<input type="submit" value="Sign up">
</form> 
</p>

这是我上面的html表单。我想我已经相应地制定了它,但如果我犯了一个致命的错误,请告诉我。

<?php

$con = mysqli_connect ('127.0.0.1', 'root', '');

if (!$con)
{
echo 'Not Connected To Server';
}

if (!mysqli_select_db($con, 'database1'))
{
echo 'Database Not Selected';
}

$email = $_POST ['email'];
$password = $_POST ['password'];

$sql = 'INSERT INTO database11 (email, password) VALUES ('$email', 
'$password')";

if (!mysqli_query($con,$sql))
{
echo 'Not Inserted';
}
else 
{
echo 'Inserted';
}

header ("refresh:1; url=localhost/index/newuser.html")




$confirmpass = 'confirmpass';

if $confirmpass = $password 



?>

这是我的HTML文件,我的html表单应该发送它的输入。我无法弄清楚如何处理if$confirmpass = 'password'部分。如果有人有想法,将不胜感激。但主要的问题是无论有多少不同的PHP脚本变种我尝试在线跟踪..我似乎无法获取我输入数据库的数据!.-。如果有任何提示或错误修复可以帮助我,将非常感谢。只是旁注,我刚刚开始学习后端编码,我不在这里只是为了从你们/ gals获得一个免费的代码片段,但正如我所说,我学习动手并在这里休息会很好所以我可以看到一个实际的“工作”形式,所以我知道下次该做什么!我从Youtube视频中复制了大部分代码,他的代码也适用于他。请好,因为我还在学习,这可能是显而易见的哈哈。谢谢!!:)

EN

回答 1

Stack Overflow用户

发布于 2018-08-30 17:06:37

在这里,我希望有所帮助。

我使用PDO而不是mysql预处理语句来防止SQL注入。

寄存器脚本与寄存器表单在同一页面上运行,以便更容易地返回错误。

database.php中:

<?php

// setup PDO database connection
$servername = 'localhost';
$username = 'root';
$password = 'password';

try {
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo 'Connected successfully';
}
catch(PDOException $e)
{
    echo 'Connection failed: ' . $e->getMessage();
}

?>

register.php:

<?php include './database.php'; ?>

<p>
<!-- remove action to run same page -->
<form method="POST">
    <br>
    <!-- set email if page is reloading with error; use htmlspecialchars to encode XSS-relevant characters-->
    Email:<input type="text" name="email" value="<?php echo isset($_POST['email']) ? htmlspecialchars($_POST['email']) : null; ?>">
    <br>
    Password:<input type="password" name="password">
    <br>
    Confirm Password:<input type="password" name="confirmpass">
    <br>
    <input type="submit" value="Sign up">
</form>
</p>
<p>
    <?php
    // run on same page to get error message
    if(isset($_POST)) {
        echo register();
    } ?>
</p>


<?php

/**
 * register function
 * redirect if register is successful
 * @return null|string
 */
function register(): ?string {
    $error = null;

    // null coalescing operator
    // replaces
    /*if(isset($_POST['email'])) {
        $email = $_POST['email'];
    } else {
        $email = null;
    }*/
    $email = $_POST['email'] ?? null;
    $password = $_POST['password'] ?? null;
    $confirmPass = $_POST['confirmpass'] ?? null;

    // check if fields are empty
    if ($email !== null && $password !== null && $confirmPass !== null) {

        // non looping do-while-loop to exit/break on error
        // prevent nested ifs
        do {
            // remove unallowed characters from email address
            $email = filter_var($email, FILTER_SANITIZE_EMAIL);

            // check if email address has valid format
            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $error = 'Please enter a valid email address';
                break;
            }

            // check if both passwords match
            if ($password !== $confirmPass) {
                $error = 'Passwords do not match';
                break;
            }

            // check if user already exists
            $stmt = $conn->prepare('SELECT COUNT(*) FROM database11 WHERE email = :email');
            // bind value of $email to placeholder :email
            $stmt->bindParam(':email', $email);

            // execute the query and fetch the first column with count-result
            if ($stmt->execute() && $stmt->fetchColumn() > 0) {
                $error = 'Email is already registered.';
                break;
            }


            // hash password for database
            $hashedPassword = password_hash($password, PASSWORD_DEFAULT);

            // insert new user
            $stmt = $conn->prepare('INSERT INTO database11 (email, password) VALUES (:email, :password)');
            $stmt->bindValue(':email', $email);
            $stmt->bindValue(':password', $hashedPassword);

            if ($stmt->execute()) {
                // redirect to success page
                header('Location: ./success.php');
                // stop current request
                exit();
            }

            $error = 'Could not register';

        } while (0);

    } else {
        $error = 'Some fields are empty';
    }

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

https://stackoverflow.com/questions/-100002510

复制
相关文章

相似问题

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