代码之家  ›  专栏  ›  技术社区  ›  Chloe13

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

  •  -1
  • Chloe13  · 技术社区  · 6 年前

    我正在尝试将HTML表单和PHP表单的网页中的数据输入到我的MySQL数据库中。这两个页面的连接都很好,但是当我试图从表单提交时,会收到一个错误。如果我自己把它写进PHP并单击提交,它将接收数据,但它不会从表单中获取数据,所以肯定有什么问题,但我不知道是什么。我以前从未在MySQL中使用过PHP,所以我不太确定它是如何工作的。任何帮助解释它是如何工作的都会受到感激。

    下面是我的test.html.php页面,我的表单在这里,以及我尝试插入数据的test insert.php页面。

    (而且,courseID是“测试”表中的一个外键,因此我需要从选项中选择courseID,我对此感到很挣扎,我不知道这是否是问题所在。在当前代码中,它位于下拉菜单中,显示课程ID,但在每个选项之间有一个空白选项,例如选项列表将是-'4'、'blank'、'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>
    

    测试.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 回复  |  直到 6 年前
        1
  •  2
  •   mickmackusa Tom Green    6 年前

    在每个具有预期值的选项之后,您将获得空白选项,因为您未能写入结束选项标记。 / 需要写入第二个选项标签,如下所示:

    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 陈述:

    警告 不要在不受信任的数据上使用extract(),如用户输入(例如,$_get,$_文件)。

    页面下面还有更多的警告,但是您通过调用 提取液 在用户提供的数据上。 别这样做,没什么好理由这么做。

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

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

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

    千万不要将未过滤、未初始化的用户提供的数据直接写入MySQL查询中,这样做最多会导致查询不稳定,最坏也会导致不安全。

    必须在插入查询中使用带有占位符和绑定变量的准备好的语句。关于如何在stackoverflow上执行这个过程,有成千上万的例子,请仔细研究,直到它有意义为止——不要告诉自己将要进行分层。

        2
  •  -2
  •   Anis R.    6 年前

    确保您添加了 extract($_POST) 在您的PHP代码中!

    在使用前,需要从post请求中提取参数,否则 $name , $testsentence $courseid 将是未定义的。