2016-03-25 7 views
1

私はphpログインシステムを作成しようとしていますが、有効なユーザー名とパスワードでログインしようとすると機能しません。私はこのテクニックを以前に使っていましたが、成功しましたが、今度はこれを動作させることができません。ログインシステムPHPの作成中にエラーが発生しました

コード:私はあなたのコードをフォーマットしてきたし、それが動作するようになりました

<?php 
$username=$_POST['username']; 
$password=$_POST['password']; 


$conn = new PDO("mysql:host=localhost;dbname=login" ,'root',''); 

if (!$conn){ 
    die("Not connected". mysqli_connect_error()); 

}else { 
    echo "Connection sucessfull"; 
    echo "</br>"; 


} 
$sql = "select * from details where Username=$username and Password=$password"; 

$stmt=$conn->prepare($sql); 

$stmt->bindparam("Username",$username,PDO::PARAM_STR); 
$stmt->bindparam("Password",$password,PDO::PARAM_STR); 

$stmt->execute(); 

$num = $stmt->rowCount(); 


if ($num>0){ 
    echo "You are logged in"; 

}else { 
    echo "fail"; 
} 

おかげ

+2

と '$'を交換してください':'クエリ文字列の – Clive

+1

あなたはここで間違ったことをしています。 –

+1

mysqliをmysqli_connect_error()でpdoと組み合わせる – Saty

答えて

0

mysqli_*とPDOを混在させることはできません。

$conn = new pdo("mysql:host=localhost;dbname=login;", 'root', ''); 

if ($conn->connect_error) { 
    die("Not connected" . $conn->connect_error); 
} 
echo "Connection successful<br/>"; 

$sql= "select * from details where Username=:username and Password=:password"; 
$result = $connection->prepare($sql); 
$result->bindParam(":username" ,$_POST['username']); 
$result->bindParam(":password" ,$_POST['password']); 
$result->execute(); 

$num=$result->fetchColumn(); 
if($num > 0){ 
    header("location:index.php"); 
}else{ 
    header("location:login.php"); 
} 
+0

おかげさまで本当に助かりました! –

+0

@ Ahmed.Ads大歓迎です! upvote/downvoteボタンの下のチェックマークをクリックして、最高の答えを受け入れてください、ありがとう! – Panda

1

あなたの文は次のように行く必要があります。

$stmt= $conn->prepare("SELECT * FROM `details` 
         WHERE `Username`=:username AND `Password`=:password"); 
$stmt->bindParam(':username', $username, PDO::PARAM_STR); 
$stmt->bindParam(':password', $password, PDO::PARAM_STR); 
$stmt->execute(); 

注:

php.netをPDOStatementによると::をrowCount()最後の影響を受け 行の数を返します。 DELETE、INSERT、またはUPDATE文は、対応するPDOStatementオブジェクトによって を実行しました。

だから、select文で返される行数をカウントするために、あなたは(fetchAllを使用することができます):

if (count($stmt->fetchAll()) > 0) { 
    echo "You are logged in"; 
}else { 
    echo "fail"; 
} 

とスマートPDO接続を設定するため:

try { 
     $db_host = '';// hostname 
     $db_name = '';// databasename 
     $db_user = '';// username 
     $user_pw = '';// password 
     $conn = new PDO('mysql:host='.$db_host.'; dbname='.$db_name, $db_user, $user_pw); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $conn->exec("SET CHARACTER SET utf8"); 
    }catch (PDOException $err) { 
     echo "harmless error message if the connection fails"; 
     $err->getMessage() . "<br/>"; 
     file_put_contents('PDOErrors.txt',$err, FILE_APPEND);//log errors 
     die(); // terminate connection 
    } 
関連する問題