2016-04-23 12 views
1

ユーザはgpaを入力し、入力された最小値を満たす学生を検索するためのWebページを用意しています(私は初心者のphpです) 。検索ボタンをクリックすると、phpファイルから関数を呼び出してデータベースに問い合わせます。私のコードはほぼ正しく動作しています。問題はすべての生徒を返すことであり、入力された最小のGPAを満たす行のみを返すことです。 HAVING句などを使用しようとしましたが、依然として私が望むものが返されません。ありがとう! SQLフィドルへユーザ検索条件を満たす選択行だけを返すには

リンク:http://www.sqlfiddle.com/#!2/be9da

HTML:

<script type="text/javascript"> 
function queryStudent() { 
    var ajaxRequest = new XMLHttpRequest; 
    ajaxRequest.onreadystatechange = function() { 
     if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) { 
      document.getElementById("ajax_output").innerHTML = ajaxRequest.responseText; 
     } 
    }; 
    ajaxRequest.open("GET", "gpa_search.php", true); 
    ajaxRequest.send(null); 
} 
</script> 
<form name="student"> 
<label>Minimum GPA: </label> 
<input type="text" id="GPA" name="gpa"><br><br> 

<input type="button" onclick="queryStudent();" value="Search" id="button"> 
</form><br> 
<!--output section after search--> 
<section id="ajax_output"> 

</section><br><br> 

<p>Students with higher than minimum GPA will be displayed here.</p><br> 

<a href="search_split.htm">Search & Split</a> 

は、PHP:

<?php 
//get user input from text box on index.htm 
$GPA = filter_input(INPUT_GET, 'GPA'); 
//Code for query 
$query = 'SELECT * 
      FROM student 
      ORDER BY studentID'; 
$statement = $db->prepare($query); 
$statement->bindValue(':GPA', "%".$GPA."%", PDO::PARAM_STR); 
$statement->execute(); 
$students = $statement->fetchAll(); 
?> 
<!--table to hold output--> 
<table> 
<tr> 
<th>Student ID</th> 
<th>Name</th> 
<th>Email</th> 
<th>GPA</th> 
</tr> 

<?php foreach ($students as $student) : ?> 
<tr> 
    <td><?php echo $student['studentID']; ?></td> 
    <td><?php echo $student['name']; ?></td> 
    <td><?php echo $student['email']; ?></td> 
    <td><?php echo $student['GPA']; ?></td> 
</tr> 
<?php endforeach; ?> 

</table> 
<body> 
</body> 
</html> 
+0

投稿されたメソッドはどれも働いていません。それはSQLクエリでなければならないが、何かが正しく動作していない。 – allendks45

答えて

1

のようなものでなければなりません変更後WHERE GPA = :GPA

+0

htmlテキストボックスに入力した値をクエリに渡すことはできますか?それは私が信じるようにGPAを比較すべき価値です。それがそうであるように、GPAが入力されたものよりも低い場合でも、クエリはすべての学生を返す。 – allendks45

+0

これはyesの値を渡し、データベースのGPAと比較されます。すべてが返されますか? –

+0

はい、私は理由を理解できません。ユーザーが入力した値をクエリに渡します。 – allendks45

0

SQLクエリをチェックし、エラーがそこから最も可能性が高いです。あなたのselectステートメントにはwhere句がありません。あなたは、具体的にのみそのGPAを持つ学生を取得したい場合は

$query = 'SELECT * 
     FROM student 
     WHERE GPA >= :GPA 
     ORDER BY studentID'; 
$statement->bindValue(':GPA', $GPA, PDO::PARAM_STR); 

これは、$GPAに大きいと同等のGPAを持っている学生を検索します:それは、次のコードの使用にselect * from students where GPA = :GPA Order by studentid

関連する問題