2017-02-19 6 views
1

私はこれを数時間働かせようとしています。私はここで私のコードで問題を見つけることができるかどうかを試してみるために多くのスレッドを研究しました。私はPHPに新しいですし、私は内部サーバーのエラーを取得し続けますが、私はそれを追跡するようだ。私は、これを運がうまくいかないようにするためにオンラインで提案されたあらゆる種類の方法を試しました。その基本的なユーザー登録フォームは、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(); 
} 
} 
?> 

EDIT:接続に失敗しました:不明なMySQLサーバのホストが 'localhostの:3306'(0)私は解決することができましたデータベースへの接続の問題。今ではPHPの残りの部分を入れても、私は500エラーを受け取ります。それは間違いなく問題がどこにあるかを絞り込んでいます!

EDITここにお手伝いいただき、ありがとうございます。主な問題はSQL接続でした。私がそれを取った後、私は私が受け取っていた他の内部エラーの原因だった場所に余分なブラケットを持っていることがわかった。

+0

詳細については、Apacheのerror_logファイルのファイルを確認してください。また、データをデータベースに格納する方法も危険です。 – mmta41

+0

あなたは挿入クエリがおそらくあなたの問題を引き起こしていると思いますが、POST値を変数に割り当てていますが、クエリでは変数を使用せずに$ _POSTデータを挿入します。また、SQLインジェクションに対して非常に脆弱になります。mysqliの構文を使用してください。https://www.w3schools.com/php/php_mysql_prepared_statements.asp – PhilS

答えて

0
のために報告するすべてのエラーを有効にするには、以下の使用

をDBへこれらを挿入

まず、「基本チェック」の質問:フォームとregister.phpを持つhtmlは同じディレクトリにあります。含まれていない、必要なものなど

Apacheのエラーログにアクセスできる場合は、最初にチェックアウトしてエラーメッセージが表示されます。あなたがそれを理解できない場合は、あなたを助けるためにここに投稿してください。

ファイルへのアクセス権がない場合、最初に間違っている場所を見つける必要があります。考え方としては、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変数の設定があります。すべての列でNULL値が許可されていますか?すべてのフォームフィールドを塗りつぶしているのですか、またはフィールドを空白にしていますか?

+0

ありがとうございます。はい、htmlとphpファイルは同じディレクトリにあります。残念ながら、ログファイルにアクセスすることはできません。私は接続文を使用すると、次のようになります。Connection failed:不明なMySQLサーバホスト 'localhost:3306'(0)。それは、ホストサーバーを見つけることさえできないということを推測していますか?また、表はNULL値を受け入れません。 – Heathen0042

+0

はい。応答に出席すると、あなたはMysqlサーバーにアクセスできるようです。最初にこれを確認してください: 1. mysqlサーバが稼働しています。 2. 3306ポートを使用します(おそらく、別のポートを使用するように設定されています)。 3.ユーザー$ usernameにデータベース$ dbnameにアクセスする権限があります。 これを最初に確認し、結果をお知らせください –

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"])..などを使用し、直接$ _POST変数ではなく、挿入クエリで変数$ FName、$ LNameなどを使用しようとします。例:

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

また、接続が開いているかどうかを確認します。

+0

ありがとうございます。さらなる検査で、私が抱えている大きな問題の1つは、私のつながりです。私が接続情報をPHPに残すと、ページは次のように返されます:接続に失敗しました:不明なMySQLサーバホスト 'localhost:3306'(0)。 – Heathen0042

+0

@ Heathen0042:データベースとの接続に正しい資格情報を使用していますか。 Sql Yog Community EditionまたはHeidiSQL、またはPhpmyadminツールを使用してデータベースに接続しているかどうかを確認してください。 –

0

あなたのDBの使用に空のparamsのため

mysql_real_escape_string

チェックを任意の新しいフィールドを挿入する前に前にMySQLiを

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

+0

ありがとう、私は自分のコードにmysql_real_escape_stringを追加しましたが、それでも私にエラーが出ました。 MYSQLiのエラー報告はどこで確認できますか? – Heathen0042

0

$ _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

関連する問題