动态JavaScript变量通过点击事件处理程序使用PHP/SQL

Dynamic JavaScript Variables Via Click Event Handler Using PHP/SQL

本文关键字:程序 PHP SQL 事件处理 变量 JavaScript 动态      更新时间:2023-09-26

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

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

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

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

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

之后我想做的是为行导入相应的字段,并将其设置为自己的变量,即:'was', 'wcc', 'wbdmin', &"wbdmax"。然后我用这些值做一些数学运算,等等。

在做了一些研究/阅读之后,我目前正在尝试在我的js文件中定义'wtype'变量后(即使我真的不知道我在做什么):

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,而之前与测试变量值它工作。

您的javascript中有一些索引超出范围的错误。在你的选择子句中,你选择五列,这导致你在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);

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