1

PHPを使用してSQLテーブルの特定のフィールドのすべての行をインポートすることによって収集されたオプションをselectタグに入力しています。私のテーブルの行は次の形式に従います。

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/undefinedになるので、これは明らかに機能しませんが、以前はテスト変数値で機能していました。

4

1 に答える 1

0

JavaScript に範囲外のインデックス エラーがあります。select 句で 5 つの列を選択すると、JavaScript で受け取る配列の最初の値 (「wtype」列の内容) がインデックス 0 になります。だからあなたがしたいことはこれです:

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 は一意であり、1 行しか返されません。もしそうなら、これを変更したい:

$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 に答える