繁体   English   中英

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

[英]Inserting data from html form using php into data table in mysql database

我是新来的,最近开始研究各种形式的代码,为我的各种项目创建简单的解决方案。 我已经使用了许多你在本网站上发布的许多有用的提示,但我想我终于达到了一个我无法弄清楚我的生活如何解决的问题。 所以我决定求助于你们所有人。 它似乎应该是一个简单的解决方案,但我找不到它所以也许新鲜的眼睛会有所帮助。 所以我希望有人可以帮助我。 我帮助在我的城市举办活动,使用视频游戏摇滚乐队进行卡拉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>

我的编码中的任何帮助都表示赞赏我是一个超级新手。 谢谢大家的帮助。

好像你只是忘了从表单中获取值! 除此之外,你的$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()创建的对象上调用的对象)。

参考

您没有定义变量。

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

靠近PHP代码的顶部

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM