3

AJAX を使用して PHP に値を送信し、PHP から値を取得しています。問題は、PHP から取得した値が AJAX で未定義として表示されることです。この問題を解決するのを手伝ってください。

AJAX コード:

var channel;

function overall() {
    $(".one").show();
    $(".two").hide();
    $(".three").hide();
    $(".four").hide();
    window['channel'] = "OVERALL";
    $.ajax({
        type: "GET",
        url: "dash2.php",
        data: ({channel: channel}),
        success: function (data) {
            console.log(data.a);
            console.log(data.b);
            console.log(data.c);
        }
    });
}

PHP コード:

<?php

$channel=$_GET['channel'];
$host="192.168.0.29";
$username="root";
$password="root";
$dbname="realcl";

mysql_connect($host,$username,$password) OR DIE ('Unable to connect to database! Please try again later.');
mysql_select_db($dbname);

$query = 'select * from '.$channel;
$masterresult = mysql_query($query);

while($row1 = mysql_fetch_array($masterresult))
{
    $success=$row1[1];
    $timeout=$row1[2];
    $fail=$row1[3]; 
}
echo json_encode(array("a"=>"$success","b"=>"$timeout","c"=>"$fail"));

?>
4

5 に答える 5

3

誰もまだカバーしていないポイント: ここでは二重引用符または連結を使用する必要があります:

'select * from $channel'; // no
"select * from $channel"; // yes
'select * from '.$channel; // yes

変数は一重引用符内では解決されないため、文字通り と呼ばれるテーブルから選択しようとしています$channel

$channelまた、SQL インジェクション攻撃に対して非常に脆弱であるため、何らかの検証を使用してください。

于 2013-03-27T12:09:19.787 に答える
0

また!!!とにかく説明させてください...

まず、ajax の get メソッドでチャネルを送信しています...

data:({channel:channel}),  //here which is just a vairable global variable 
                           //and not assigned any value in your given code... 

したがって、この送信チャネルは空です...したがって、クエリは機能しません..

$query = "select * from '' "; <-- here you have a singe quote `'` which also gives error

第二に..ajaxにはメソッドではなく型のプロパティがあります..

 type:"GET" //here type is get not method

あなたのphpとクエリを見る.. $channelはtbalenameのように見えます。それがOVERALLの場合は、文字列をajaxに渡すことができます。そうでない場合は、ajaxのチャネルにテーブル名を割り当てる必要があります

 type:"GET" //here type is get not method
 data:{channel:"OVERALL"}, //note you don't need an extra bracket here `()`
于 2013-03-27T12:05:44.707 に答える
0

データをjsonでエンコードしているためです。

dataType:"json"ajax を追加してみてください。ajax にはメソッドがないため、データtypeへの変更は次のようにする必要があります。type{}

$.ajax({
   type:"GET",
   url:"dash2.php",
   dataType: 'json',
   data:{channel:channel},
   success:function(data){
      console.log(data.a);
      console.log(data.b);
      console.log(data.c);
   }
 });

この行を入れてみてください:

$channel=$_GET['channel'];

データベース選択後:

mysql_select_db($dbname);
于 2013-03-27T12:06:04.467 に答える
0

dataTypeパラメータを として設定しますjson

$.ajax({
   type:"GET",
   url:"dash2.php",
   dataType: 'json',
   data:{channel:channel},
   success:function(data){
   }
 });

jQuery.ajaxドキュメントの引用

dataType は、サーバーから返されると予想されるデータのタイプを定義します。何も指定されていない場合、jQuery は応答の MIME タイプに基づいて推測しようとします。

あなたのコードからの観察はほとんどありません。
1) 上記の投稿のいくつかで説明されているように、コードは に対して脆弱ですSQL injection attacks
2)mysql_*関数は廃止されており、拡張機能は将来削除される予定です。それらに頼らないでください。要点を強調するために大文字を使用しました。

上記の両方の点について、PDOまたはMySQLiのいずれかを使用してみてください。PDO または MySQLi のいずれかを使用して、SQL インジェクション攻撃からコードを保護できます。

これは、SQLインジェクション攻撃からコードを保護するコードを作成する方法に関する投稿です。

3) DB 構成の詳細を別のものにシフトして、すべてのファイルに同じコードを入れる必要がないようにします。クエリconfig.phpを入れたいと思います。SQL

于 2013-03-27T12:23:42.980 に答える
0

これを試してください。1. 出力バッファリングを使用して、json データのみが ajax 応答で受信されるようにします 2. ajax で json データ型を提供します

<script type='text/javascript'>
    overall();
    function overall() {
        var channel = 1;
        $.ajax({
            method: "GET",
            url: "http://localhost",
            data: ({channel: channel}),
            dataType: 'json',
            success: function(data) {
                console.log(data.a);
                console.log(data.b);
                console.log(data.c);
            }
        });
    }
</script>

Phpコード

   //empty the current contents of the output buffer
    ob_end_clean();

    // Turns on output buffering
    ob_start();

    // print output
    echo json_encode(array("a" => "success", "b" => "timeout", "c" => "fail"));

    // Turn off buffering and print the contents
    ob_end_flush(); // Turn off buffering and print the contents
    exit;
于 2013-03-27T12:48:10.533 に答える