【问题标题】:HTML Form Not Submitting to MYSQL DatabaseHTML 表单未提交到 MYSQL 数据库
【发布时间】:2023-03-15 18:25:01
【问题描述】:

我一直试图让它工作几个小时。我在这里研究了许多线程,试图看看我是否能找到我的代码的问题。我是 PHP 新手,我不断收到内部服务器错误,但我似乎无法追踪它。我已经尝试了网上建议的各种方法,但没有成功。它是一个基本的 HTML 用户注册表单,在一个 PHP 文件中。(我打算在同一个文件上同时执行 html 和 php,但无法让它工作)这个想法是让表单提交到我的 MYSQL 数据库到一个客户表。如果你们中的任何人都可以阐明我做错了什么或指出我正确的方向,那将不胜感激。提前致谢。

HTML

<form id="signupField" action="register.php" method="post">
First Name:<br>
<input type="text" name="FN" size="auto"/><br>
Last Name:<br>
<input type="text" name="LN" size="auto"/><br>
Street Address:<br>
<input type="text" name="SA" size="auto"/><br>
City:<br>
<input type="text" name="City" size="auto"/><br>
State:<br>
<input type="text" name="ST" size="auto"/><br>
Zip:<br>
<input type="text" name="Zip" size="auto"/><br>
Email Address:<br>
<input type="text" name="Email" size="auto"/><br>
Password:<br>
<input type="text" name="Password" size="auto"/><br>
<input type="submit" value="submit" name="submit"/>
</form>

引用的 PHP:

<?php 
$hostname = "localhost";
$username = "serviceaccount";
$password = "password";
$dbname = "nameofdb";
$conn = new mysqli($hostname,$username,$password,$dbname);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";

?>
<?php

$FName=$_POST["FN"];
$LName=$_POST["LN"];
$SA=$_POST["SA"];
$City=$_POST["City"];
$State=$_POST["ST"];
$Zip=$_POST["Zip"];
$Email=$_POST["Email"];
$Password=$_POST["Password"];

if (isset($_POST["submit"])) {

$sql = "INSERT INTO Customers(FName,LName,StreetAddress,City,State,Zip,Email,Password) VALUES('$_POST["FN"]','$_POST["LN"]','$_POST["SA"]','$_POST["City"]','$_POST["ST"]','$_POST["Zip"]','$_POST["Email"]','$_POST["Password"]')";

if ($conn->query($sql) === TRUE) {
echo "<script type= 'text/javascript'>alert('New record created successfully');</script>";
} else {
echo "<script type= 'text/javascript'>alert('Error: " . $sql . "<br>" . $conn->error."');</script>";
}

$conn->close();
}
}
?>

EDIT 发现此错误后: Connection failed: Unknown MySQL server host 'localhost:3306' (0) 我能够解决与数据库的连接问题。现在,当我将其余的 PHP 重新放入时,我仍然会收到 500 错误。它肯定会缩小问题所在!

编辑我想在这里感谢大家的帮助。主要问题是 SQL 连接。在我处理完之后,我发现我有一个额外的支架,这是我收到另一个内部错误的原因。

【问题讨论】:

  • 检查 apache error_log 文件以获取详细信息。您将数据放入数据库的方式也很危险。
  • 您的插入查询可能会导致您出现问题,而且您正在将 POST 值分配给变量,但在您的查询中,您不使用变量并插入 $_POST 数据。这也让你很容易受到 SQL 注入的攻击,请使用 mysqli 准备语法 w3schools.com/php/php_mysql_prepared_statements.asp

标签: php html mysql forms


【解决方案1】:

首先,“基本检查”问题:与form和register.php的html在同一目录下,对吗?不包括、要求等

如果您有权访问 apache error_log,请先检查它以查看您收到的错误消息。如果您看不懂,请在此处发布以帮助您。

如果您无权访问该文件,首先我们需要找出您在哪里出错。作为一个想法,从 register.php 中的这个开始......

<?php 
$hostname = "localhost";
$username = "serviceaccount";
$password = "password";
$dbname = "nameofdb";
$conn = new mysqli($hostname,$username,$password,$dbname);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";

?>

直接到http://[yourdirectory]/register.php 看看你会得到什么。然后开始逐步添加其余部分,并在您遇到错误时告诉我们。

其他认为要检查的是数据库NULL变量配置。所有列都允许空值吗?您是填写所有表单字段还是将任何字段留空?

【讨论】:

  • 感谢您的意见。是的,html 和 php 文件在同一个目录中。不幸的是,我无权访问任何日志文件。当我只使用连接语句时,我得到这个:连接失败:未知的 MySQL 服务器主机'localhost:3306'(0)。我猜这意味着它甚至找不到主机服务器?该表也不接受任何空值。
  • 是的。参加响应,您似乎可以访问Mysql服务器。首先检查: 1. mysql 服务器已启动并正在运行。 2.它使用3306端口(可能配置为使用不同的端口)。 3. 您的用户 $username 有权访问数据库 $dbname。先检查一下,让我知道结果
【解决方案2】:

将您的 register.php 代码替换为以下代码。

<?php 
$hostname = "localhost";
$username = "serviceaccount";
$password = "password";
$dbname = "nameofdb";
$conn = new mysqli($hostname,$username,$password,$dbname);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";

如果它打印出连接失败;那么您必须检查您的代码以连接到数据库。

【讨论】:

  • 感谢您的帮助。这似乎是一个连接问题。我仍在追查哪里出了问题。它显示的错误消息是:Connection failed: Unknown MySQL server host 'localhost:3306' (0)
【解决方案3】:

对所有后置变量使用 isset($_POST["FN"]) .. 等,并尝试在插入查询中使用变量 $FName 、 $LName 等,而不是直接使用 $_POST 变量。 例如

$FName = '';
if(isset($_POST["FN"]) && $_POST["FN"] !=''){
    $FName = $_POST["FN"];
}

还要检查连接是打开还是失败。

【讨论】:

  • 感谢您的回复。经过进一步检查,我遇到的一个大问题是我的连接。如果我只在 PHP 上留下我的连接信息,页面将返回:连接失败:未知 MySQL 服务器主机 'localhost:3306' (0)。
  • @Heathen0042:您是否使用正确的凭据与数据库建立连接。请尝试使用 Sql Yog 社区版或 HeidiSQL,或 Phpmyadmin 工具检查是否连接数据库。
【解决方案4】:

在将任何新字段插入数据库之前使用

mysql_real_escape_string

在将这些参数插入数据库之前检查空参数

使用以下命令打开 MySQLi 的所有错误报告

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

【讨论】:

  • 谢谢,我将 mysql_real_escape_string 添加到我的代码中,但它仍然给了我错误。我在哪里可以看到 MYSQLi 的错误报告?
【解决方案5】:

您应该使用为您的帖子字段分配的变量而不是 $_POST 对象,并确保清理所有用户输入。

您可以尝试将 $sql-string 替换为以下内容:

$sql = "INSERT INTO Customers(FName,LName,StreetAddress,City,State,Zip,Email,Password) VALUES('$FName','$LName','$SA','$City','$State','$Zip','$Email','$Password')";

【讨论】:

  • 感谢您的建议我试过了,但它似乎仍然不能解决我的问题。经过进一步检查,它似乎与我的连接有关。他们返回此错误:连接失败:未知 MySQL 服务器主机 'localhost:3306' (0)
猜你喜欢
  • 2016-05-22
  • 2016-03-24
  • 2013-06-03
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
相关资源
最近更新 更多