2017-11-15 20 views
-2

こんにちは私はちょっとした問題を抱えています。私はトップのgeht towを試しています。私のpdoクエリーと印刷の結果ですが、そのような運がありません。私はおそらくちょうど愚かな間違いを見ました。名前はデータベース内にある(そして、あなたが引用符でそれを置くならば、それは違いが)、おそらく変数がNULL値か何かを取得している場合、それは違いを作るんのでfindeこと...Pdoの結果を表示

$username="xxx"; 
$firstname="xxx"; 
$check=0; 
    if (isset($_GET['u'])){ 
     $username=strip_tags(@$_GET['u']); 
     if (ctype_alnum($username)){ 
      $check=$stmt=$link->prepare("SELECT * FROM 
users WHERE username = ?"); 
      $stmt->execute(array($username)); 
      $check=$stmt->fetchAll(); 
      if(count($check)==1){ 
       $get=$stmt->fetch(PDO::FETCH_BOTH); 
       echo "$get"; 
       $username =$get["username"]; 
       $firstname = $get["first_name"]; 
      }else{ 
       echo "<h2> User does not exist!</h2>"; 
       exit(); 
      } 
     } 
    } 
?> 
<h2>Profilepage for: <?php echo "$username"; ?></h2> 
<h2>First name: <?php echo "$firstname"; ?></h2 
+2

**警告**:エラーを抑制する '@'演算子を使用すると、コードの問題が隠され、このようなデバッグの問題が発生します。これは最後の手段であり、例外的な状況でのみ使用すべきです。ユーザーのエラーメッセージを表示したり、問題を記録したり、何らかのリトライを開始したり、これらのすべてを連携させたりする必要があります。 – tadman

+2

**警告**:独自のアクセス制御レイヤーを作成するのは簡単ではなく、間違った操作をする機会がたくさんあります。 [Laravel](http://laravel.com/)のような最新の[開発フレームワーク](http://codegeekz.com/best-php-frameworks-for-developers/)がある場合は、独自の認証システムを作成しないでください。強力な[認証システム](https://laravel.com/docs/master/authentication)が組み込まれています。絶対に[推奨されるセキュリティのベストプラクティス](http://www.phptherightway.com/#security)に従ってください。パスワードはプレーンテキスト**として保存しないでください。 – tadman

+0

フィールドユーザーネームは一意ですか? –

答えて

0

$stmt->fetchAll()がありますクエリのすべての結果を取得します。これが完了すると、$stmt->fetch()をフェッチするために利用できる結果はもうありません。 $check配列からデータを取得する必要があります。

if (count($check) == 1) { 
    $get = $check[0]; 
    $username = $get["username"]; 
    $firstname = $get["first_name"]; 
} else { 
    echo "<h2> Username does not exist </h2>"; 
    exit(); 
} 

それとも、ただfetchfetchAllを置き換えることができます。

$stmt->execute(array($username)); 
$get = $stmt->fetch(PDO::FETCH_ASSOC); 
if ($get) { 
    $username = $get["username"]; 
    $firstname = $get["first_name"]; 
} else { 
    echo "<h2> Username does not exist </h2>"; 
    exit(); 
}   

また、echo "$get"は意味を成さない。 $getは配列で、エコーすることはできません。print_r($get)またはvar_dump($get)を使用する必要があります。

+0

あなたのご協力ありがとうございました –