2013-03-22 59 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); 

请让我知道,如果这有助于你。或者如果我误解了你的问题。

相关问题