2011-06-23 14 views
1

私がここで理解しようとしているのは、必要な配列値にアクセスする方法です。私は次のクエリを持っていて、print_r()が適用されたときに配列のためにこれを返します。何らかの理由で、dbテーブルの最初の行のみを実行します。それはまったく別の行を返す必要があります。あなたはちょうどあなたが結果にループが代わりに設定する必要があります最初の1、フェッチので十分な行が返されない

<?php 

session_start(); 

// Include the database page 
require ('../inc/dbconfig.php'); 
require ('../inc/global_functions.php'); 

//Login submitted 
if (isset($_POST['submit'])) { 

// Errors defined as not being any 
$errors = "no"; 

if((empty($_POST['answer1'])) || (trim($_POST['answer1'])=="") || ($_POST['answer1'] == NULL) || (!isset($_POST['answer1']))){$errors = "yes";} 
if((empty($_POST['answer2'])) || (trim($_POST['answer2'])=="") || ($_POST['answer2'] == NULL) || (!isset($_POST['answer2']))){$errors = "yes";} 

// Error checking, make sure all form fields have input 
if ($errors == "yes") { 

    // Not all fields were entered error 
    $message = "You must enter values to all of the form fields!"; 

    $output = array('errorsExist' => true, 'message' => $message); 

} else { 

    $userID = mysqli_real_escape_string($dbc,$_POST['userID']); 
    $answer1Post = mysqli_real_escape_string($dbc,$_POST['answer1']); 
    $answer2Post = mysqli_real_escape_string($dbc,$_POST['answer2']); 
    $question1 = mysqli_real_escape_string($dbc,$_POST['question1']); 
    $question2 = mysqli_real_escape_string($dbc,$_POST['question2']); 

    $query = "SELECT * FROM manager_users_secretAnswers WHERE userID = '".$userID."'"; 
    $result = mysqli_query($dbc,$query); 

    // Count number of returned results from query 
    if (mysqli_num_rows($result) > 0) { 

     while ($row = mysqli_fetch_array($result)) { 

      $answer = $row['answer']; 

      // Comparing the database password with the posted password 
      if ($answer == $answerPost) { 



      } else { 

       $errors = "yes"; 
       $message = "Your answers did not match the answers inside the database!"; 

       $output = array('errorsExist' => true, 'message' => $message); 

      } 


     } 

    } else { 

     $errors = "yes"; 
     $message = "We did not find any answers for your questions! Please consult the site administrator!"; 

     $output = array('errorsExist' => true, 'message' => $message); 

    } 

} 

} 

//Output the result 
$output = json_encode($output); 
echo $output; 

?> 

答えて

4

:ところで

$query = "SELECT * FROM manager_users_secretAnswers WHERE userID = '$userID'"; 
$result = mysqli_query($dbc,$query); 

if (mysqli_num_rows($result) > 0) { 
    while ($row = mysqli_fetch_array($result)) { 
     print_r($row); 
    } 
} 

を、あなたはSQL injectionを避けるためにprepared statementsを使用する必要があります。

+0

ありがとうございます。コードを更新しました。私の唯一の質問は、最後の行をチェックするか、両方の行をチェックするかということです。 –

+1

結果セット内の*すべての行をループします。 2つの行がある場合、両方を返します。 – Benjamin

+0

さて、私はそれがどのように私はそれがdbのユーザーからの第1の答えに対して答えをテストすることができます知って好奇心です。 –

2

ループ内でフェッチをラップする必要があります。例えば

if (mysqli_num_rows($result) > 0) 
{ 
    while (($row = mysqli_fetch_array($result)) !== false) 
    { 
    if ($row['answer'] == $answerPost) 
    { 
     // $row matches what we're looking for 
    } 
    else 
    { 
     $errors = "yes"; 
     $message = "Your answers did not match the answers inside the database!"; 
     $output = array('errorsExist' => true, 'message' => $message); 
    } 
    print_r($row); 
    } 
} 
+0

ありがとうございます。コードを更新しました。私の唯一の質問は、最後の行をチェックするか、両方の行をチェックするかということです。 –

+1

@ジェフ:最新の回答をご覧ください。 –

+0

しかし、それはどのようにユーザー入力からの2つの異なる投稿応答に対処するのでしょうか。 –

関連する問題