2016-06-18 16 views
0

私はログインスクリプトを作成していますが、アカウント情報が正しいのにサインインできません。私は過去にこのログインスクリプトを使用しましたが、MySQLを使用していましたので、私はMySQLiで動作するようにいくつか変更しましたが、そうではありません。ログインスクリプトが機能しない

config.phpの

更新
<?php 
$con = mysqli_connect("localhost","root","wachtwoord","huizenverkoop"); 

// Database verbinding controleren 
if (mysqli_connect_errno()){ 
    echo "Kan geen verbinding maken met MySQL: " . mysqli_connect_error(); 
} 
?> 

:login.php

include 'config.php'; 

if(isset($_SESSION['persoon'])!="") 
{ 
    header("Location: index.php"); 
} 
if(isset($_POST['loginnu'])) 
{ 
    $gebruikersnaam = mysqli_real_escape_string($con, $_POST['gebruikersnaam']); 
    $wachtwoord = mysqli_real_escape_string($con, $_POST['wachtwoord']); 

    $gebruikersnaam = trim($gebruikersnaam); 
    $wachtwoord = trim($wachtwoord); 

    $query = "SELECT id, gebruikersnaam, wachtwoord FROM persoon WHERE gebruikersnaam='$gebruikersnaam'"; 
    $row = mysqli_query($con,$query); 

    $count = mysqli_num_rows($row); 

    if($count == 1 && $row['wachtwoord']==md5($wachtwoord)){ 
     $_SESSION['persoon'] = $row['id']; 
     header("Location: index.php"); 
    }else{ 
     header("Location: login.php?fout=true"); 
    } 
} 

if (@$_GET['fout'] == 'true'){ 
    $melding = "De ingevulde gegevens kloppen niet."; 
    include('alert.php'); 
} 

Gebruikersnaamは、ユーザー名とwachtwoord、パスワードを意味を意味します。 「ログイン」ボタンを押すと、login.php?fout = trueに送られます。ファットは間違っている。

<form method="post"> 
    <h1 class="box-titel">Inloggen</h1> 
     <div class="controle"> 
      <input type="text"  class="speciaal-tekstveld" name="gebruikersnaam" placeholder="Gebruikersnaam" required> 
      <input type="password" class="speciaal-tekstveld" name="wachtwoord"  placeholder="Wachtwoord"  required> 
     </div> 
      <input type="submit" class="grootknop"   name="loginnu"   value="Inloggen"> 
</form> 

Persoonテーブル:

id int(2) 
gebruikersnaam varchar(50) 
wachtwoord varchar(255) 

は、誰かが私を助けていただけますか?

+0

(http://php.net/manual/en/ mysqli-result.fetch-assoc.php)。 – Qirel

+0

1)あなたのフォームには、同じページにリダイレクトする場合はaction = ""を含めます。

のようにします。 && 2)$ conはコードごとに定義されていません。それが含まれている場合は、あなたの接続コードを更新してください。 – Bhavin

+0

私の投稿を更新しました – TripleDeal

答えて

1

データを取得するだけでなく、データを取得する必要があります。現在、クエリの結果であるMySQLiオブジェクトを使用しようとしています。これはデータベースのデータを含む配列ではないため、最初にフェッチする必要があります。このようなものが必要です

$query = "SELECT id, gebruikersnaam, wachtwoord FROM persoon WHERE gebruikersnaam='$gebruikersnaam'"; 
$result= mysqli_query($con,$query); 
$row = mysqli_fetch_assoc($result); // Fetch the data! 
$count = mysqli_num_rows($result); 

if($count == 1 && $row['wachtwoord']==md5($wachtwoord)){ 
    // .... 

また、クエリのパスワードを確認してコードの一部を減らすこともできます。基本的に、SQLで何かできるのであれば、SQLでそれを行います。


これに加えて、パスワードを保存するためmd5を使用しないでください。 PHPにはより安全なpassword_hash()機能が組み込まれています!

SQLインジェクション攻撃からデータベースを保護するために、プリペアドステートメントを利用することも有効です。あなたは、[データをフェッチ]する必要が&

読書、材料のドキュメント

+0

それは動作します!ありがとうございました。私は間違いなくpassword_hash()関数を試してみます。そして私はその文書を読むでしょう。もう一度、本当にありがとう! – TripleDeal

+0

援助のおかげで嬉しいです:-) – Qirel

0

あなたはmysqli接続に問題があると思います。

契約は、この行にあります。あなたはそれがテーブル内の少なくとも1つの行になります期待している

$count = mysqli_num_rows($row); 
if($count == 1 ... 

。あなたがshureであれば、そのような行がデータベースに存在しているので、$ countはエラーのためにfalseを受け取ると思います。

0

コードには$conが定義されていないので、定義したと仮定して接続があることを確認する必要があります。また、あなたのmysqliクエリからのエラーを報告していません。

http://www.php.net/function.mysqli_connect

//check make sure you have it 
if (!$con) { 
    echo "Error: Unable to connect to MySQL." . PHP_EOL; 
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; 
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; 
    exit; 
} 

をそしてmysqli_queryからエラーを報告し、Qirelによって示唆されているように、もちろんあなたは、行をフェッチする必要があります:あなたは、それらを行うためにこれらのそれぞれを試みることができる

$query = "SELECT id, gebruikersnaam, wachtwoord FROM persoon WHERE gebruikersnaam='$gebruikersnaam'"; 
$result = mysqli_query($con,$query) or die(mysqli_error($con)); 
$row = $result->fetch_row(); 
+1

$ conは私のconfig.phpファイルで定義されています。 config.phpが上記に含まれている場合(isset($ _ POST ['loginnu'])) – TripleDeal

+0

これで、定義するのではなく、あなたがそこにいることを確認することができます。 –

0

そこに3つの問題があるかもしれません。フォームで

1)あなたは、同じページにリダイレクトされている場合は...それのようにしてください「」=アクションが含まれ、

<form method="post" action=""> 

2)$詐欺は、あなたのコードごとに定義されていません。それが含まれている場合、あなたのコードを設定ファイルで更新するよりも。

3)、また、同様に

$res = $conn -> query("SELECT id, gebruikersnaam, wachtwoord FROM persoon WHERE gebruikersnaam='$gebruikersnaam'"); 

$row = mysqli_fetch_assoc($res); 
echo $row['wachtwoord']; 

を行を取得するスクリプトの中でいくつかのエラーログを開始します。