2017-01-04 14 views
0

大丈夫ですので、私のデータベースに問題があります。私は登録ページを作成しようとしており、すべて問題なく動作します。私はxampp phpmyadminを使用しています、そして、私はいくつかの情報を入力した後に登録ボタンを押すたびに、私のデータベースに何も出ません。ユーザー情報がデータベースに保存されていません

<?php 
session_start(); 

$db = mysqli_connect("localhost", "root", "", "saver",); 


if (isset($_POST[ 'register_btn'])) { 
session_start(); 
$username = mysql_real_escape_string($db,$POST['username']); 
$email = mysql_real_escape_string($db,$POST['email']); 
$password = mysql_real_escape_string($db,$POST['password']); 
$password2 = mysql_real_escape_string($db,$POST['password2']); 

if ($password == $password2) { 
//create user 
$password = md5($password); //hashes password before entering into database 
$sql = "INSERT INTO users(username, email, password) VALUES('$username',  $email', $password,)"; 
mysqli_query($db, $sql); 
$_SESSION['message'] = "You are now logged in"; 
$_SESSION['username'] = $username; 
header("location: home.php"); // Redirect to home page 
}else{ 
$_SESSION['message'] = "The two passwords do not match"; 
    } 
} 
?> 

<html> 
<head> 
<title> Submission form </title> 
</head> 

<body> 
<form method="post" action="saver.php"> 
<table> 
<tr> 
<td>Username:</td> 
<td><input type="text" name="username" class="textInput"> 
</tr> 

<tr> 
<td>Email:</td> 
<td><input type="email" name="email" class="textInput"> 
</tr> 

<tr> 
<td>Password:</td> 
<td><input type="password" name="password" class="textInput"> 
</tr> 

<tr> 
<td>Password again:</td> 
<td><input type="password" name="password2" class="textInput"> 
</tr> 

<tr> 
<td></td> 
<td><input type="submit" name="register_btn" value="Register"> 
</tr> 
</table> 
</form> 
</body> 
</html> 
+0

私たちが手助けをするためにコードを提供する必要があります。より関連性の高いタグを追加する価値もあります。あなたはどの言語を使用していますか? –

+0

確かです。大丈夫、私はそれを追加し、私はPHPを使用しています。私はあなたの助けを感謝します@EmettSpeer –

答えて

1

あなたはON、読書PHPのエラーログを回して、あなたが持っているすべての問題を発見し、解決することができます。 Read How to do that

あなたの問題は、これらの行にあります。

$db = mysqli_connect("localhost", "root", "", "saver",); 

と、まず

$username = mysql_real_escape_string($db,$POST['username']); 

、あなたの $db末尾にカンマ上で残っている、それを削除します。これはあなたの error reportingでピックアップする必要がある、おそらく致命的なPHPエラーを引き起こしています。

第2に、$dbオブジェクトはMySQLi識別子であり、MySQL識別子ではありませんが、MySQL_関数に渡しました。したがって、スクリプトはエラーで終了するか、データベースによって空の値が挿入されます。これはあなたが何も救われていない理由です。

また、MySQL_関数の引数の順序が逆になっているので、おそらく関数名にiを追加するのを忘れてしまったでしょう。


また、適切にMySQLの中で自分の価値観を包まれていない - の各値は、そのようなあなたが$email$arsewordで同じことを行う必要があり'$username'で行っているので、単一引用符で囲まする必要があります。

そして、あなたもあなたのMySQLが...あまりにも

いくつかの余分なノートを収集した値から末尾のカンマを削除する必要があります。

  • あなたはあなたの両方mysqli_mysql_機能を使用していますコード。 はMySQLi_関数を使用する必要があります。
  • 手続き型SQLではなくPrepared Statementsを使用して(を実行してください)を真剣に検討する必要があります。
  • ハッシュパスワード用のMD5は絶対にnot suitableです。それをやめなさい。 password_hashを使用してください。
  • header(Location:);再配置ディレクティブは、直ちにスクリプトターミネーター続いなどexit;又は
  • session_start()die();のみ、スクリプトの先頭に回と呼ばれるべきであるべきです。
  • 真剣に、準備された文章を使用してください。周囲には数百の良い例があります。
  • そして、PHP Error Loggingを読んで反応することで、何百時間ものストレスを自分自身(そして多くの人々に)救います!

EDIT:
Lukeによって明らかなように:

実際の問題がmysql_real_escape_stringのみパラメータ(すなわちmysql_real_escape_stringの($ POST [ 'ユーザ名']);)を受け付けます。 MySQLiが使用されているかどうかにかかわらず使用できますが、代わりにprepared statementを使うのは避けてください。

+0

オハイオ州、あなたの時間と助けをしてくれてありがとう、私は大いに感謝し、それに取り組んで何が起こったのを知らせるでしょう@martin –

+1

実際の問題は 'mysql_real_escape_string'は1つのパラメータ(つまり、 'mysql_real_escape_string($ POST ['username']);')を実行します。 MySQLiが使用されているかどうかに関係なく使用できますが、代わりにprep'dステートメントを避ける必要があります。また、何らかの理由でリダイレクトに失敗したブラウザに基づいて、*何か*で応答する場所のヘッダーと終了は通常は良い考えです。ユーザーは白い画面だけを見るしかありません。 )ゲームのスコアを確認するためにハッシュを使用しないでください; –

+0

もう1つ:PHPのロギングを本番サイトで有効にしないでください。それが誤ってエンドユーザーに情報の束を漏らすのではなく、ファイルに保存することを確認してください。 –

0

ねえ、私は問題を見つけました。それは挿入部分にあった。私はエディタに "users"があり、私のデータベースには "user_info"がありました。だから私は "user"を "user_info"に変更しました。あなたの助けを借りてくれてありがとう。どのように私はあなたに信用を与えることができますか

+0

うれしいです。答えの横にある上向きの矢印をクリックしてクレジットを与えることができます。また、あなた自身のanwsr(この答え)を正しい答え(目盛り付き)としてマークすると、この問題が解決します。乾杯。 – Martin

関連する問題