1

我正在使用 PHP 收集的选项填充一个选择标记,以导入 SQL 表中某个字段的所有行。我表中的一行遵循以下格式:

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

我已经成功地完成了这部分,但是手头的下一个任务是我遇到的麻烦,因为我是 PHP 和 Javascript 的新手。

在我的点击事件处理程序中,我定义了一个变量“wtype”,我将其设置为选择选项的值:

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

之后我希望做的是为具有匹配'wtype'的行导入相应的字段并将它们设置为它们自己的变量,即。“是”、“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/undefined,而在使用测试变量值之前它起作用了。

4

1 回答 1

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);

如果这对您有帮助,请告诉我。或者如果我误解了你的问题。

于 2013-03-26T10:40:07.520 回答