2013-03-22 21 views
1

我正在使用PHP收集的選項來填充選擇標記,以導入SQL表中某個字段的所有行。在我的表中的一行格式如下:使用PHP/SQL通過Click事件處理程序獲取動態JavaScript變量

id | wcat | wtype | was | wcc | wbdmin | wbdmax 

我這部分成功完成,但手頭上的下一個任務是我在與因爲我是一個新手,當涉及到PHP和JavaScript什麼麻煩。

在我的單擊事件處理程序我定義一個變量「WTYPE」這是我設置爲選擇選項的值:

wtype = $("select[name='wtype'] :selected").val() || 0; 

我希望做後導入相應的字段的一行匹配'wtype'並將它們設置爲它們自己的變量,即。 'was','wcc','wbdmin',&'wbdmax'。之後,我使用這些值來做一些數學運算等。

在做了一些研究/閱讀之後,我在定義'wtype'變量之後正在嘗試在我的js文件中進行以下操作(即使我沒有線索我在做什麼):

var data = {w : wtype}; 
var url = "get.php"; 
$.post(url, data).done(function(data) { 
    var winfo = $.parseJSON(data); 
    was = winfo[3]; 
    wcc = winfo[4]; 
    wbdmin = winfo[5]; 
    wbdmax = winfo[6]; 
    $("#result").html(winfo); 
}); 

而且在get.php

<?php 
    $host = "****"; 
    $dbname = "****"; 
    $user = "****"; 
    $pass = "****"; 
    try { 
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
    } 
    catch(PDOException $e) { 
    echo $e->getMessage(); 
    } 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $name = $_POST["w"]; 
    $sql = "SELECT wtype, was, wcc, wbdmin, wbdmax FROM items WHERE wtype='".$name."'"; 
    $stmt = $conn->prepare($sql); 
    $stmt->setFetchMode(PDO::FETCH_ASSOC); 
    if ($stmt) { 
    try { 
     $stmt->execute(); 
     while ($row = $stmt->fetch()) { 
     $data[] = $row; 
     } 
     $data = json_encode($data); 
    } 
    catch (PDOException $e) { 
     var_dump($e); 
    } 
    } 
?> 

這顯然不爲我的數學生成NaN /不確定的,而與測試變量前值,它的工作工作。

+0

更新:我相當確定問題在於編碼/解碼JSON並將數組傳遞給JavaScript變量。 – tenub 2013-03-22 18:56:55

回答

0

你的javascript中有一些索引超出範圍的錯誤。 在你的select子句中,你選擇了五列,這些列導致你在javascript中得到的數組的第一個值(這是'wtype'列的內容)處於索引零。所以,你想要做什麼,這是:

var data = {w : wtype}; 
var url = "get.php"; 
$.post(url, data).done(function(data) { 
    var winfo = $.parseJSON(data); 
    was = winfo[1]; 
    wcc = winfo[2]; 
    wbdmin = winfo[3]; 
    wbdmax = winfo[4]; 
    $("#result").html(winfo); 
}); 

另外,如果你沒有使用wtype列,你可以留下你的查詢: $sql = "SELECT was, wcc, wbdmin, wbdmax FROM items WHERE wtype='".$name."'";

小心相應地改變你的索引到你SELECT條款。

我也可以看到你編寫了一個循環來迭代你的結果。如果我正確理解你,每個wtype都是唯一的,只返回一行。如果是這樣,你想改變這一點:

$stmt->execute(); 
while ($row = $stmt->fetch()) { 
    $data[] = $row; 
} 
$data = json_encode($data); 

這樣:

$stmt->execute(); 
$row = $stmt->fetch(); 
$data = json_encode($row); 

請讓我知道,如果這有助於你。或者如果我誤解了你的問題。

相關問題