2017-02-19 30 views
1

我一直试图让这个工作几个小时。我在这里研究了许多线程,试图查看是否可以用我的代码找到问题。我是PHP新手,不断收到内部服务器错误,但我似乎无法跟踪它。我尝试了各种方法建议在线获得这个没有运气的工作。它是一个基于HTML的基本用户注册表单,在一个PHP文件中(我打算在同一个文件上同时执行html和php,但是无法使它工作)想法是将表单提交给我的MYSQL数据库客户表。如果你们中的任何一个人都能对我做错的事情有所了解,或者指引我朝着正确的方向发展,那么我们将非常感激。提前致谢。HTML表单不提交到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(); 
} 
} 
?> 

编辑发现这个错误后:连接失败:未知MySQL服务器主机的 'localhost:3306'(0)我是能够解决连接问题到数据库。现在,当我把剩下的PHP放回去时,我仍然得到500错误。它绝对会缩小问题的范围!

编辑我要感谢大家的帮助,你就在这里。主要问题是SQL连接。我得到了照顾后,发现我有一个额外的托架,这是我收到的其他内部错误的原因。

+0

检查apache的error_log中文件的文件。您将数据放入数据库的方式也非常危险。 – mmta41

+0

您插入查询可能会导致您的问题,再加上您将POST值分配给变量,但在您的查询中,您不使用变量并插入$ _POST数据。这也让你非常容易受到SQL注入的攻击,使用mysqli prepare语法https://www.w3schools.com/php/php_mysql_prepared_statements.asp – PhilS

回答

0
汇报

首先,“基本检查”问题:带有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变量配置。所有列允许空值?你填写所有表单域还是将任何域留空?

+0

感谢您的意见。是的,HTML和PHP文件在同一个目录中。我不幸的是无法访问任何日志文件。当我只使用连接语句时,我得到这个:连接失败:未知的MySQL服务器主机'localhost:3306'(0)。我猜这意味着它甚至找不到主机服务器?此外,该表不接受任何空值。 – Heathen0042

+0

是的。参加答复时,您似乎可以访问Mysql服务器。首先检查: 1. MySQL服务器已启动并正在运行。 2.它使用3306端口(可能配置为使用不同的端口)。 3.您的用户$用户名有权访问数据库$ dbname。 请先检查并让我知道结果 – 2017-02-20 16:19:29

0

用以下替换您的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"; 

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

+0

谢谢你的帮助。这似乎是一个连接问题。我仍在追踪哪里出错。它显示的错误消息是:连接失败:未知的MySQL服务器主机'localhost:3306'(0) – Heathen0042

0

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

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

还要检查连接是否打开或失效。

+0

感谢您的回复。在进一步检查之后,我遇到的一个重大问题就是我的联系。如果我只在PHP上留下连接信息,页面将返回:连接失败:未知的MySQL服务器主机'localhost:3306'(0)。 – Heathen0042

+0

@ Heathen0042:您是否使用正确的凭证来建立与数据库的连接?请尝试使用Sql Yog Community版本或HeidiSQL或Phpmyadmin工具来检查它是否连接到数据库。 –

0

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

mysql_real_escape_string

空PARAMS检查之前插入这些以分贝

使用以下方法来关闭所有错误的MySQLi

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

+0

谢谢,我将mysql_real_escape_string添加到我的代码中,但它仍然给我错误。我在哪里可以看到MYSQLi的错误报告? – Heathen0042

0

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

你可以尝试用下面的更换你的$的SQL字符串:查看详细

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

谢谢你的建议我尝试过,但它似乎仍然不能解决我的问题。进一步检查后,它看起来像它与我的连接。他们返回这个错误:连接失败:未知的MySQL服务器主机'localhost:3306'(0) – Heathen0042