【发布时间】:2021-09-07 21:10:21
【问题描述】:
我有一个 HTML 表单(应该)将用户输入数据发送到 Web PHP 服务:
<!DOCTYPE HTML>
<html>
<head>
<title>Register Form</title>
</head>
<body>
<form action="localhost/test.php" method="POST">
<table>
<tr>
<td>Thema :</td>
<td><input type="text" name="theme" required></td>
</tr>
<tr>
<td>Jahr :</td>
<td><input type="number" name="year" required></td>
</tr>
<tr>
<td><input type="submit" value="Speichern"></td>
</tr>
</table>
</form>
</body>
</html>
Web 服务会将数据输入 MySQL 数据库。这工作正常。我知道,因为如果我在浏览器中打开 Web 服务,它会在我的数据库中填充一行 NULL。但是,如果我单击 HTML 站点上的提交按钮,它既不会填充用户输入,也不会填充 NULL。这是我的网络服务:
<?php
if(isset($_POST['theme']) && isset($_POST['year'])) {
$theme = $_POST['theme'];
$year = $_POST['year'];}
$url = "127.0.0.1";
$database = "songs";
$username = "root";
$password = "";
$connect = mysqli_connect($url, $username, $password, $database);
if(!$connect)
{
die("Connection failed: ".$connect->connect_error);
}
//create a template
$sql = "INSERT INTO theme (theme, year) VALUES (?, ?);";
//create a prepared statement
$stmt = mysqli_stmt_init($connect);
//prepare the prepared statement
if (!mysqli_stmt_prepare($stmt, $sql)) {
echo "SQL statement failed";
} else {
//bind parameters to the placeholders
mysqli_stmt_bind_param($stmt, "si", $theme, $year); //1 string, 1 integer, is equal to theme and year
//run parameters inside database
mysqli_stmt_execute($stmt);
mysqli_close($connect);
}
?>
我知道我的 HTML 网站正在运行,因为在 webhook.site 它向我显示了输入。 (请忽略丢失的错误处理以及我的网络服务上的所有内容,我知道。)
我做错了什么?
【问题讨论】:
-
您是否尝试过
var_dump($_POST)来验证您的脚本是否确实收到了数据? -
您不能在网络服务中发布数据。你已经使用 CURL 函数来满足你的要求。 php.net/manual/en/ref.curl.php
-
“我做错了什么?” - 首先,你没有给出准确的问题描述。您从脚本中得到什么响应/输出 - 没有?还是您的自定义错误消息之一?
-
假设这首先进入最外层的 IF,那么我希望您很可能会得到
SQL statement failed... 因为您的查询包含用作列名的未加引号的保留字。 -
@CBroe Bro 冷静下来
标签: php html database web-services post