使用php将数据从html表单插入到mysql数据库中的数据表中

时间:2017-03-16 23:20:47

标签: php html mysql forms

我是新来的,最近开始研究各种形式的代码,为我的各种项目创建简单的解决方案。我已经使用了许多有用的提示,你们已经在这个网站上发布了很多但我觉得我终于达到了一个我无法弄清楚如何解决的问题。所以我决定求助于你们所有人。它似乎应该是一个简单的解决方案,但我找不到它所以也许新鲜的眼睛会有所帮助。所以我希望有人可以帮助我。我帮助在我的城市举办活动,使用视频游戏摇滚乐队进行卡拉OK。我有一个名为rbn_setlist_small的表格设置,它有两列'艺术家'和#歌曲标题'。我必须定期在表格中插入更多歌曲以考虑新购买的歌曲。所以我创建了一个表单来将数据插入表中。它是一个简单的表单,有两个字段Artist和Song Title。每当我输入测试信息(比如艺术家:123,歌曲标题:测试)时,它表示已输入数据,但当我去检查表格时,输入的新数据在歌曲名称下的艺术家和标题下有一个空白点。 。所以我确定我在某个地方错过了一个逗号或其他东西,但我找不到它。

这是表单的php:

<?php
/* Attempt MySQL server connection.*/
$link = mysqli_connect("host", "user", "pass", "db");

/*Check connection*/
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/*attempt insert query execution*/
$query = "INSERT INTO `rbn_setlist_small`(`Artist`, `Song Title`) 

VALUES ('$Artist', '$Song Title')";
if ($result = mysqli_query($link, $query)) {
    echo "Records added successfully.";
} else{
    echo "ERROR: Could not execute $sql. " . mysqli_error($link);
}

/*close connection*/
mysqli_close($link);
?>

这是表单的HTML:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Add Music to Database</title>
</head>
<body>
<form action="insert.php" method="post">
    <p>
        <label for="Artist">Artist:</label>
        <input type="text" name="Artist" id="Artist">
    </p>
    <p>
        <label for="Song Title">Song Title:</label>
        <input type="text" name="Song Title" id="Song Title">
    </p>
    <input type="submit" value="Submit">
</form>
</body>
</html>

我的编码中的任何帮助也是值得赞赏的我是一个超级新手。 谢谢大家的帮助。

2 个答案:

答案 0 :(得分:0)

好像你只是忘了从表单中获取值!除此之外,您的$Song Title不是变量,它是变量,然后是空格,然后是字符串“Title”。

我建议您不要在表单或包含空格的数据库中使用任何名称,使用下划线作为替换(或选择更简单的名称)。例如,你的

<input type="text" name="Song Title" id="Song Title">

应该是

<input type="text" name="Song_Title" id="Song_Title">

相反,可以使用$_POST['Song_Title']在PHP中获取。使用它,我们可以将它发送到数据库。我已经通过以下改进修改了您的代码:

  • 使用$_POST
  • 从表单中获取值
  • 使用占位符(mysqli::prepare)添加参数化查询以防止SQL注入
  • 添加了支票(isset()),因此我们只在表单已发送时插入值

以上几点会产生以下PHP代码段

/* Attempt MySQL server connection.*/
$link = mysqli_connect("host", "user", "pass", "db");

/*Check connection*/
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

if (isset($_POST['Artist'], $_POST['Song_Title'])) {
    if ($stmt = $link->prepare("INSERT INTO `rbn_setlist_small`(`Artist`, `Song Title`) VALUES (?, ?)")) {
        $stmt->bind_param("ss", $_POST['Artist'], $_POST['Song_Title']);
        if (!$stmt->execute()) {
            error_log("Execute failed ".$stmt->error);
        } else {
            echo "Data successfully inserted! Artist ".$_POST['Artist']." and song ".$_POST['Song_Title'];
        }
        $stmt->close();
    } else {
        error_log("Prepare failed ".$link->error);
    }
}

此外,在进行故障排除时,如果您只是通过添加

启用错误报告,PHP将为您提供确切的错误
<?php 
error_reporting(E_ALL);
ini_set("display_errors", 1);

位于文件顶部。对于正常的MySQLi函数,MySQLi也会抛出它可能看到的$link->error错误,而使用MySQLi语句(对于$stmt->error创建的对象上调用的对象)则会$link->prepare()

参考

答案 1 :(得分:0)

您没有定义变量。添加

$Artist = $_POST['Artist'];
  $Song_title= $_POST['Song_title'];

靠近php代码的顶部

同时将HTML中“歌曲标题”的名称更改为“Song_title”

相关问题