当前位置: 首页 > 知识库问答 >
问题:

使用php向mySQL提交html表单

罗智志
2023-03-14

对此非常新,我目前正在尝试为我的网站创建一个登录系统。我已经创建了一个html日志表单,我计划使用该表单为用户创建帐户。我已经创建了一个php页面,其中包含了我要连接到服务器的代码,如下所示。

当我填写表单时,我没有得到任何输出。我不确定php代码是在错误的地方(它是作为一个单独的文件)还是不期望输出。提交表单时,当我在测试时手动提交时,数据库似乎不会发生变化。

我的最终目标是能够将用户添加到数据库中名为users的表中。

下面是我的日志表单的代码:

 <body>

        <h2>Sign Up</h2>

        <p></p>

        <form action="Create_User.php" method="post">
            <div class="imgcontainer">
                <img src="http://fc05.deviantart.net/fs70/f/2012/361/1/6/albert_einstein_by_zuzahin-d5pcbug.jpg" alt="Einstein the lad" class="img" />
            </div>

            <div class="container">
                <label><b>Username</b></label>
                <input type="text" placeholder="Please Enter your desired Username" name="username" required />

                <label><b>Password</b></label>
                <input type="password" placeholder="Please Enter Your Desired Password" name="password" required />

                <label><b>Email Address</b></label>
                <input type="email" placeholder="Please Enter Your Email Address" name="email" required />

                <label><b>Date Of Birth</b></label>
                <input type="date" name="date_of_birth" required />

                <label><b>First Name</b></label>
                <input type="text" placeholder="Please Enter your first name" name="first_name" required />

                <label><b>Surname</b></label>
                <input type="text" placeholder="Please Enter your surname" name="surname" required />

            </div>

            <div class="container" style="background-color: #f1f1f1">
                <button type="submit">Sign Up</button>
                <button class="signinbtn" onclick="location.href='/AccountRelatedPages/SignIn.aspx'">Already have an account? Sign in here</button>
            </div>
        </form>

    </body>

下面是我的php文件中的代码:

<?php
$servername = "localhost";
$username = "root";
$password = "rootpass";
$dbname = "synther_physics";


$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO users (username, password, email, date_of_birth, first_name, surname)
VALUES ('<?php echo $_POST[$username];', '<?php echo $_POST[$password];', '<?php echo $_POST[$email], <?php echo $_POST[$date_of_birth];, <?php echo $_POST[$first_name], <?php echo $_POST[$surname];')";

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

再一次,我对这一切都很陌生,所以我正在尽力让我的脑袋转过来,所以请记住这一点。

多谢了。

共有1个答案

田鸿彩
2023-03-14

将注释、sql注入、password_hash()组合在一起。对于sql注入保护,则需要使用准备好的语句。我就不多说了很多重要的事情都在评论中说过了,希望你们都看过了,因为我看过了。

您的代码应该是这样的:

<?php
$servername = "localhost";
$username   = "root";
$password   = "rootpass";
$dbname     = "synther_physics";



//Validate user inputs
$username = $_POST['username'];

$password = $_POST['password'];

$hash = password_hash($password, PASSWORD_DEFAULT);

$email = $_POST['email']; //VALIDATE the email

$dob   = $_POST['date_of_birth'];
$fname = $_POST['first_name'];


$sname = $_POST['surname'];

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO users (username, password, email, date_of_birth, first_name, surname)
VALUES (?,?,?,?,?,?)";

$stmt = $conn->prepare($sql);

$stmt->bind_param("ssssss", $username, $hash, $email, $dob, $fname, $sname);

if ($stmt->execute()) {

    echo "New record created successfully";
} else {

    echo "Error : " . $conn->error; // on dev mode only

    // echo "Error, please try again later"; //live environment
}

$conn->close();
?>

编辑:

如果您的php文件和html文件是相同的,那么为了避免未定义索引,您需要在处理前检查表单是否已提交。您需要做的是为表单按钮提供一个name属性。

然后检查表单是否已提交。

<?php
$servername = "localhost";
$username   = "root";
$password   = "rootpass";
$dbname     = "synther_physics";



//Validate user inputs
if(isset($_POST['buttonName'])){


$username = $_POST['username'];

$password = $_POST['password'];

$hash = password_hash($password, PASSWORD_DEFAULT);

$email = $_POST['email']; //VALIDATE the email

$dob   = $_POST['date_of_birth'];
$fname = $_POST['first_name'];


$sname = $_POST['surname'];

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO users (username, password, email, date_of_birth, first_name, surname)
VALUES ('?,?,?,?,?,?')";

$stmt = $conn->prepare($sql);

$stmt->bind_param("ssssss", $username, $hash, $email, $dob, $fname, $sname);

if ($stmt->execute()) {

    echo "New record created successfully";
} else {

    echo "Error : " . $conn->error; // on dev mode only

    // echo "Error, please try again later"; //live environment
}

$conn->close();
}
?>

此外,您还需要检查字段是否已设置且不为空。

 类似资料:
  • 这是我的第一次。php页面是html部分。我有一个表单,包括一个div和一个submit按钮。我希望当点击按钮时,打开一个新页面(second.php)并显示div的内容(id=orderList) 这是javascript部分; 这是第二.php我想在div(id=confirmForm)中显示内容的地方 不管用,我该改什么?

  • 将html表单转发到具有 用于在jsp页面中处理“name”参数。当没有提供名称时,我确实希望表单提交给jsp,jsp应该检测“null”以处理if-else循环以显示相关消息。 我如何做到这一点?

  • 问题内容: 我试图使用此示例使用AJAX提交HTML表单。 我的HTML代码: 我的剧本: 这是行不通的,我什至没有收到警告消息,提交时我不想重定向到另一个页面,我只想显示警告消息。 有简单的方法吗? PS:我有几个领域,我仅举两个例子。 问题答案: AJAX快速描述 AJAX只是异步JSON或XML(在大多数新情况下为JSON)。因为我们正在执行ASYNC任务,所以我们很可能会为我们的用户提供更

  • 嗨,伙计们,我一直与使用超文本标记语言和PHP的网站之一有麻烦 表单似乎没有提交或发送消息。附件是代码请任何帮助将是伟大的。另外,还附上了PHP和javascript作为参考。有时页面也不响应按钮。如果有人能修复代码将是伟大的。

  • 我正在尝试从HTML表单使用PHP向SQL数据库插入新记录。 我用Post方法制作了一个表单 带有提交按钮 我想做的是,当我按下按钮时,它将调用create.php,这是 然后将表单中的数据插入SQL数据库(表单中的id、名称、年份)。我在SQL语法中发现了一些错误。我犯了什么错误?

  • 我是新的PHP Codeigniter框架。我正在设计一个页面,其中我使用了一个链接。点击链接时,它调用一个jQuery函数,通过jQuery提交表单。我已经使用codeigniter表单验证方法进行服务器端验证,目前我已经禁用了客户端验证。 问题是,在这个过程中,当表单通过jQuery提交时,codeigniter表单验证方法不起作用。 但是如果我使用submit按钮来提交表单,那么codeig