2017-02-19 31 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