php - HTML/PHP 表单不会将数据插入 MySQL 数据库

标签 php html mysql

我是 PHP 新手,我一直在尝试制作一个小型的家庭作业管理应用程序。

这个想法是,您可以输入主题和描述,它将被添加到 MySQL 数据库(目前就是这样)。

我创建了一个 html 表单:

<form action="insert.php">
        <label for="subj">Subject:</label>
        <br>
        <input type="text" name="subj">
        <br>
        <label for="desc">Description:</label>
        <br>
        <input type="text" name="desc">
        <br>
        <input type="submit" value="Submit" name="submit">
    </form>

和一些 php 代码:

<?php
$subject = $_POST['subj'];
$description = $_POST['desc'];
$subject = mysql_real_escape_string($subject);
$description = mysql_real_escape_string($description);

$dbhost = ''; //These are filled in actually
$dbuser = ''; //These are filled in actually
$dbpass = ''; //These are filled in actually
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
    die('Could not connect: ' . mysql_error());
}

$sql = 'INSERT INTO organiser '.
    '(subject,description) '.
    'VALUES ('$subject', '$description')';

mysql_select_db(''); //These are filled in actually
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
    die('Could not enter data: ' . mysql_error());
}
echo "Entered data successfully\n";
mysql_close($conn);
?>

问题在于 HTML 表单上的“主题”和“描述”框中的输入不会进入 MySQL 数据库。

但是,如果我设置

'VALUES ('$subject', '$description')';

'VALUES ("test", "test")';

它有效。

感谢任何帮助! 谢谢!

最佳答案

除了已经给出的关于连接缺少点的答案之外:

如果表单标记中省略了方法,则表单方法默认为 GET 方法。

您正在使用<form action="insert.php">这相当于做
<form action="insert.php" method = "get">不是您想要的不需要。

更改为

<form action="insert.php" method="post">

因为您正在使用 POST 变量。

这就是 'VALUES ("test", "test")';贡献原因有效,而不是相反,因为这两个变量 $subject -$description ,基于您的 POST 变量:

$subject = $_POST['subj'];
$description = $_POST['desc'];

你可以这样做

$sql = "INSERT INTO organiser (subject,description) VALUES ('$subject', '$description')";

如评论中所述。

$sql = "INSERT INTO organiser (subject,description) VALUES ('".$subject."', '".$description."')";
<小时/>

将错误报告添加到文件顶部

error_reporting(E_ALL);
ini_set('display_errors', 1);

这将表明您的代码中发现了错误。

<小时/>

但是,您的方法对SQL injection开放。使用 mysqli_* with prepared statements ,或PDOprepared statements .

<小时/>

使用 mysqli准备好的报表方法;这样更安全。

<?php 

$DB_HOST = "xxx"; // replace with your own
$DB_NAME = "xxx";
$DB_USER = "xxx";
$DB_PASS = "xxx";

$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
  die('Connection failed [' . $conn->connect_error . ']');
}

// optional to check for empty fields
// if(isset($_POST['submit']) && !empty($_POST['subj'])  && !empty($_POST['desc'])) {
if(isset($_POST['submit'])) {

$subject = stripslashes($_POST['subj']);
$description = stripslashes($_POST['desc']);

$stmt = $conn->prepare("INSERT INTO organiser (`subject`, `description`) VALUES (?, ?)");

$stmt->bind_param('ss', $subject, $description);

    if (!$stmt->execute()) {
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    }

        else{
          echo "<h2>Success!</h2>";
        }

$stmt->close(); // Statement
$conn->close(); // MySQLi

}

?>

表格:(新)

<form action = "insert.php" method = "post">
        <label for="subj">Subject:</label>
        <br>
        <input type="text" name="subj">
        <br>
        <label for="desc">Description:</label>
        <br>
        <input type="text" name="desc">
        <br>
        <input type="submit" value="Submit" name="submit">
</form>

关于php - HTML/PHP 表单不会将数据插入 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25253443/

相关文章:

html - Firefox Shared Web Workers 中的服务器发送事件

android - Sqlite从原始文件创建带有多个表的数据库

php - Mysql 注册事务

php - 格式化从 1000 到 10.00 的数字

javascript - 从输入字段获取值并将其用作函数中的参数

javascript - 刷新包含 PHP 代码的 div,而不刷新页面

mysql - 使用 SQL 获取表的前 k 条记录/行

mysql - 如何将 mysql 慢查询日志解析成有用的东西?

php - 如何将尾随换行符与正则表达式匹配?

php - 如何在没有 Zend Gdata 库的情况下使用 PHP 将数据保存在非公开的谷歌电子表格中?