2016-03-29 12 views
-3

私は異なるドロップダウンフィルタ(Grade、School、Team、Students)で検索を実装しようとしていますが、私のコードで何かがひどく間違っています。ページ「retrieve1.php」を読み込むと、Gradeという1つのボックスしか表示されず、それも空です。助けていただければ幸いです。以下は私のコードです -データの問題を取得しています

<?php 
$db = new PDO('mysql:host=localhost;dbname=test',$user, $pass); 
?> 

account1.php

<?php 
require 'account1.php'; 
echo "<body style='background-color:#DCDCDC'>"; 

$sql= "SELECT * FROM bpi_registration LEFT JOIN bpi_schoolInfo on 
bpi_registration.id_school = bpi_schoolInfo.id_school "; 
$query=$db->query($sql); 


function grade() { 
    $result = $db->query('SELECT * FROM bpi_classInfo'); 
    while($row = $result->fetchALL(PDO::FETCH_ASSOC)) 
    { 
     echo "<option value='" . $row['class_name'] . "'>" . $row['class_name'] . "</option>"; 
    } 
} 

function school() { 
    $result = $db->query('SELECT * FROM bpi_schoolInfo'); 
    while($row = $result->fetchALL(PDO::FETCH_ASSOC)) 
    { 
     echo "<option value='" . $row['school_name'] . "'>" . $row['school_name'] . "</option>"; 
    } 
} 

function team() { 
    $result = $db->query('SELECT * FROM bpi_teamProfile'); 
    while($row = $result->fetchALL(PDO::FETCH_ASSOC)) 
    { 
     echo "<option value='" . $row['team_name'] . "'>" . $row['team_name'] . "</option>"; 
    } 
} 

function students() { 
    $result = $db->query('SELECT * FROM bpi_registration'); 
    while($row = $result->fetchALL(PDO::FETCH_ASSOC)) 
    { 
     echo "<option value='" . $row['id']. "'>" . $row['first_name'].' '.$row['last_name']. "</option>"; 
    } 
} 
?> 

<form action="retrieve1.php" method="GET"> 
    <select name="Grade"> 
     <option value="" selected="selected">Choose Grade</option> 
     <?php grade() ?> 
    </select> 

    <select name="School"> 
     <option value="" selected="selected">Choose School</option> 
     <?php school() ?> 
    </select> 

    <select name="Team"> 
    <option value="" selected="selected">Choose Team</option> 
    <?php team() ?> 
    </select> 

    <select name="Students"> 
     <option value="" selected="selected">Choose Students</option> 
     <?php students() ?> 
    </select> 

    <input type="submit" value="Find" /> 
</form> 

<table width="600" border="2"> 
    <tr> 
     <th width="198"> <div align="center">Email </div></th> 
     <th width="97"> <div align="center">City </div></th> 
     <th width="97"> <div align="center">State </div></th> 
     <th width="59"> <div align="center">Country </div></th> 
    <tr> 


<?php 
if (isset($_GET['Students'])) 
{ 
    //echo $_GET['Students']; 
    $userQuery = "{$sql} WHERE bpi_registration.id = :user_id"; 
    $user = $db->prepare($sql); 
    $user->execute(['user_id' => $_GET['Students']]); 
    $selectedUser=$user->fetch(PDO::FETCH_ASSOC); 
} 
?> 

<?php 
if(isset($selectedUser)) 
{ 
    echo $selectedUser['email']; 
    echo $selectedUser['address_city']; 
    echo $selectedUser['address_state']; 
    echo $selectedUser['address_country']; 
} 
?> 

私はあなたが報告し、エラーが変数のスコープの問題が原因でエラー

Fatal error: Call to a member function query() on null 
in public_html/retrieve1.php on line 24 
+0

サイトのマークアップはどのように見えますか?ブラウザ機能を使用して、読み込んだページの「ソース」を表示します。 – arkascha

+0

また、httpサーバのエラーログファイルを常に監視する必要があります。そこでは、PHPスクリプトの何かが間違っているかどうかを正確に知ることができます。 – arkascha

+0

@arkaschaエラーは発生していません。私が見るのは、「retrieve1.php」をロードするときに空の「グレード」ボックスが1つだけあることです –

答えて

1

を取得します。言い換えれば、関数は範囲外であるため$dbが存在するが、各関数スコープには存在しないため、$dbが何であるか分からない。

また、->FetchAll()は配列を返します。クエリから結果セットを処理するwhileループを使用する場合は、->fetch()を使用する必要があります。これは、呼び出しごとに1行を返し、whileループで使用できるためです。

また、実行した最初のクエリで、後で検索条件を修正しようとすると、動作しません。​​が呼び出されると、クエリを修正することはできません。そのコードを実際に使用されていた場所に移動し、不要な呼び出しを削除しました​​

また、表のHTMLを出力に追加して、データがテーブル構造に収まるようにしました。

次の修正コードは、目標に向かって移動する必要があります。次のエラーです。

<?php 
require 'account1.php'; 
echo "<body style='background-color:#DCDCDC'>"; 

function grade($db) { 
    $result = $db->query('SELECT * FROM bpi_classInfo'); 
    while($row = $result->fetch(PDO::FETCH_ASSOC)) 
    { 
     echo "<option value='" . $row['class_name'] . "'>" . $row['class_name'] . "</option>"; 
    } 
} 

function school($db) { 
    $result = $db->query('SELECT * FROM bpi_schoolInfo'); 
    while($row = $result->fetch(PDO::FETCH_ASSOC)) 
    { 
     echo "<option value='" . $row['school_name'] . "'>" . $row['school_name'] . "</option>"; 
    } 
} 

function team($db) { 
    $result = $db->query('SELECT * FROM bpi_teamProfile'); 
    while($row = $result->fetch(PDO::FETCH_ASSOC)) 
    { 
     echo "<option value='" . $row['team_name'] . "'>" . $row['team_name'] . "</option>"; 
    } 
} 

function students($db) { 
    $result = $db->query('SELECT * FROM bpi_registration'); 
    while($row = $result->fetch(PDO::FETCH_ASSOC)) 
    { 
     echo "<option value='" . $row['id']. "'>" . $row['first_name'].' '.$row['last_name']. "</option>"; 
    } 
} 
?> 

<form action="retrieve1.php" method="GET"> 
    <select name="Grade"> 
     <option value="" selected="selected">Choose Grade</option> 
     <?php grade($db) ?> 
    </select> 

    <select name="School"> 
     <option value="" selected="selected">Choose School</option> 
     <?php school($db) ?> 
    </select> 

    <select name="Team"> 
    <option value="" selected="selected">Choose Team</option> 
    <?php team($db) ?> 
    </select> 

    <select name="Students"> 
     <option value="" selected="selected">Choose Students</option> 
     <?php students($db) ?> 
    </select> 

    <input type="submit" value="Find" /> 
</form> 

<table width="600" border="2"> 
    <tr> 
     <th width="198"> <div align="center">Email </div></th> 
     <th width="97"> <div align="center">City </div></th> 
     <th width="97"> <div align="center">State </div></th> 
     <th width="59"> <div align="center">Country </div></th> 
    </tr> 


<?php 
if (isset($_GET['Students'])) 
{ 
    $sql= "SELECT * 
      FROM bpi_registration 
      LEFT JOIN bpi_schoolInfo on 
         bpi_registration.id_school = bpi_schoolInfo.id_school "; 


    //echo $_GET['Students']; 
    $userQuery = "{$sql} WHERE bpi_registration.id = :user_id"; 
    $user = $db->prepare($sql); 
    $user->execute(['user_id' => $_GET['Students']]); 
    $selectedUser=$user->fetch(PDO::FETCH_ASSOC); 

    if(isset($selectedUser)) 
    { 
     echo '<tr>'; 
     echo '<td>' . $selectedUser['email'] . '</td>'; 
     echo '<td>' . $selectedUser['address_city'] . '</td>'; 
     echo '<td>' . $selectedUser['address_state'] . '</td>'; 
     echo '<td>' . $selectedUser['address_country'] . '</td>'; 
     echo '</tr> 
    } 
} 
echo '</table>`; 
?> 
+0

これは大きな助けとなりました。私はあなたがそれらの資料を勉強するために参照することができるそれらの文書を共有してくれてありがとう。それは私をたくさん助けます。 –

関連する問題