2014-04-01 21 views
1

我想在表單中選擇性別時爲我的查詢添加一個WHERE。PHP bindParam和多個dropdownmenu的

我使用bindParam來使用一個dropdownmenu來獲得Year,但我想要第二個bindParam插入一個'AND Gender ='到查詢和一個'$ _GET ['dropdowngender']來填充它。

我想要使用if語句來查看是否正在使用dropdownmenu,並且如果選擇了性別信息將被添加到查詢。這是我迄今爲止的,但它似乎沒有工作。

<?php 

@include ('conn.php'); 

$query = "SELECT Name, MAX(Count) AS MaxCount, ZIPcode, Year 
      FROM Name_Data 
      WHERE Year = :year "; 
if(isset($_GET['dropdowngender']) { 
    $query = $query . " AND Gender = :gender "; 
} 

$query = $query . " AND Name_Data.Count = 
     (SELECT MAX(Count) FROM Name_Data AS f 
      WHERE f.id = Name_Data.id 
     ) GROUP BY ZIPcode"; 

$query->bindParam(':year', $_GET['dropdownyear'], PDO::PARAM_STR); 
if(isset($_GET['dropdowngender']) { 
    $query->bindParam(':gender', $_GET['dropdowngender'], PDO::PARAM_STR); 
} 

$query_send = $db->prepare($query); 

$query->execute(); 

$result = $query->fetchAll (PDO::FETCH_ASSOC); 

$jsonResult = json_encode($result); 

echo $jsonResult; 

?> 

我的索引頁

<form method="post" action="#" id="form"> 
     <select name="dropdownyear" id="menuyear"> 
      <option selected>Choose a year</option> 
     </select> 
     <select name="dropdowngender" id="menugender"> 
      <option value="M">Male</option> 
      <option value="F">Female</option> 
     </select> 
</form> 

我的jQuery腳本

$("#form") 
.change(function(){ 
$(".marker").empty(); 
var SelectYear= $("#menuyear option:selected").text(); 
var SelectGender= $("#menugender option:selected").text(); 

    $.getJSON("sql.php", { dropdownyear: SelectYear, dropdowngender: SelectGender }, function(jsonData) {  
     console.log(jsonData); 

     $.each(jsonData, function(key,row) { 
      var newDiv=$('<div>'); 
      var Content = row ['Name'] + ' '; 
      newDiv.text(Content); 
      newDiv.appendTo($("#result")); 
    }); // each 

    }); //get json 
}); // change function 

回答

0

普萊斯添加您收到錯誤消息,你有錯誤報告打開,也有一些語法錯誤會立即停止該程序。接下來你要對一個字符串調用bindParam,這也不行;)。

(字形DIT toevallig運算FB,德國技術合作公司,d)

編輯:

這是未經測試,但這樣的事情是它應如何工作:

// I assume you have an instance of the pdo object? I will call it $db for convenience. 
require_once 'conn.php'; 

$q = "SELECT Name, MAX(Count) AS MaxCount, ZIPcode, Year 
     FROM Name_Data 
     WHERE Year = :year"; 

if(isset($_GET['dropdowngender']) && !empty($_GET['dropdowngender'])) { 
    $q .= " AND Gender = :gender"; 
} 

$q .= " AND Name_Data.Count = 
     (SELECT MAX(Count) FROM Name_Data AS f 
      WHERE f.id = Name_Data.id 
     ) GROUP BY ZIPcode"; 

$stmt = $db->prepare($q); 
$stmt->bindParam(':year', $_GET['dropdownyear'], PDO::PARAM_STR); 
if(isset($_GET['dropdowngender']) && !empty($_GET['dropdowngender'])) { 
    $stmt->bindParam(':gender', $_GET['dropdowngender'], PDO::PARAM_STR); 
} 
$stmt->execute(); 

$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

$jsonResult = json_encode($result); 

echo $jsonResult; 
+0

誤差 致命錯誤:調用一個成員函數bindParam()在第25行的sql.php中的一個非對象,它是$ query-> bindParam(':year',$ _GET ['dropdownyear'],PDO :: PARAM_STR);我不知道在哪裏更改param_str,這是一個varchar權利? – lottebijl

+0

準確地說,conn中有什麼,可以在導入之前刪除@符號。它抑制了conn.php –

+0

K中的錯誤,爲您的代碼添加了一個完全未經測試的修改。它可以讓你去。請注意,代碼中還有其他一些可能需要修改的內容,但我沒有這樣做。 –