使用PHP从HTML表单获取mySQL数据库输入

时间:2019-01-15 21:42:04

标签: php html mysql database

我正在尝试从HTML表单和PHP网页中获取数据到mySQL数据库。它在两个页面上的连接都很好,但是当我尝试从表单提交时出现错误。如果我自己将其写入PHP并单击Submit,它将接收数据,但不会从表单中获取数据,因此那里肯定有问题,但我不知道是什么。我以前从未将PHP与mySQL一起使用,所以我不太确定它的工作方式。任何帮助,以解释其工作原理将不胜感激。

下面是我的表单所在的test.html.php页面和我尝试插入数据的testinsert.php页面。

(此外,courseID是“测试”表中的外键,因此我需要从选项中选择courseID,我为此感到困惑,而且我不知道这是否是问题所在。在当前代码位于下拉菜单中,显示的是CourseID,但每个选项之间都有一个空白选项,例如,选项列表为-“ 4”,“空白”,“ 5” ...等)

<!DOCTYPE html>

<?php
include 'connect.php';
?>

<html lang="en">
<head>
    <link rel="stylesheet" type="text/css" href="style.css" />
    <meta name="viewport" content="width=1024, initial-scale=1.0, maximum-scale=1.0,user-       scalable=no"/>
</head>
    <title>Test Sign Up</title>
<body>

<header>
    <h1>Test Sign Up</h1>

</header>
        <div class="contactform">
            <form action="testinsert.php" method ="post">

                <label for="name">Name:</label>
                <input type="text" id="name" name="name" placeholder="Enter 
                your name here" required>

                <label for="testsentence">Test Sentence:</label>
                <input type="text" id="testsentence" name="testsentence" placeholder="Enter your sentence here" required>


                <label for="course">Course:</label>
                <select id="course" name="course">
                <?php

                $query = "SELECT CourseID FROM Course";

                $result = mysqli_query($conn, $query);


                while($row = mysqli_fetch_array($result)){

                    echo "<option>" . $row['CourseID'] . "<option>";

                }

                mysqli_close($conn);

                ?>
                </select>

            <button type="submit" name="submit">Submit</button>

            </form>                                    
        </div>
    <p></p>
    <a href="courses.html.php">View Courses</a>
    <p></p>
    <a href="index.html">Return to home page</a>
</body>    
</html>

Testinsert.php-

<?php
include 'connect.php';

$name = 'name';
$testsentence = 'testsentence';
$courseid = 'course';

$sql="INSERT INTO Test (Name, TestSentence, Course)
VALUES ('$name','$testsentence', '$courseid')";

if (mysqli_query($conn, $sql)) {
    echo "<p></p>New record added successfully";
    echo '<p></p><a href="index.html">Return to home page</a>';
} else {
    echo "<p></p>Error adding record";
    echo '<p></p><a href="index.html">Return to home page</a>';
}

mysql_close($conn);
?>

2 个答案:

答案 0 :(得分:2)

每个选项带有期望值之后,您将获得空白选项,因为您没有写入关闭选项标签。 /需要像这样被写入第二个选项标签:

while ($row = mysqli_fetch_array($result)) {
    echo "<option>{$row['CourseID']}</option>";
}

即使未正确关闭选项标签,它们仍会呈现。在这种情况下,错误会通过生成所需标签的两倍来呈现。

我建议您将MYSQLI_ASSOC用作mysqli_fetch_array通话的第二个参数,或更方便的方法是:mysqli_fetch_assoc

实际上,由于$result是可迭代的,因此您可以编写:

foreach ($result as $row) {
    echo "<option>{$row['CourseID']}</option>";
}

关于使用extract($_POST) ...

我从未发现在我的一个脚本中使用extract的充分理由。不止一次。此外,php手册中有特定的Warning说明:

  

警告   请勿对用户输入(例如$ _GET,$ _ FILES)之类的不受信任的数据使用extract()。

该页面上还有更多警告,但是您通过对用户提供的数据调用extract来有效地将不安全因素纳入代码中。 永远不要这样做,没有理由这样做。

以下是一个不错的页面,其中介绍了如何访问提交的数据:PHP Pass variable to next page

具体地说,这是您访问预期的超全局数据的方式:

$name = $_POST['name'];
$testsentence = $_POST['testsentence'];
$courseid = $_POST['course'];

您绝不能将未经过滤,未经卫生处理的用户提供的数据直接写入mysql查询,这将导致查询不稳定(最好的情况下)和最糟糕的不安全情况。

您必须在INSERT查询中使用带占位符和绑定变量的预处理语句。有成千上万个有关如何在Stackoverflow上执行此过程的示例,请研究直到有意义为止-不要告诉自己自己会分层进行。

答案 1 :(得分:-2)

确保在您的PHP代码中添加了extract($_POST)(或类似内容)!

您需要先从POST请求中提取参数,然后再使用它们,否则您的$name$testsentence$courseid将不确定。