2017-05-29 92 views
1

我在關於實施了jQuery AJAX方法看着幾個堆棧溢出線程:jQuery的AJAX:澄清如何通過可變進AJAX GET請求

How to pass parameters in GET requests with jQuery

雖然這個線程提供了一些真的好消息,我正在尋求澄清這是否會實際做我認爲會做的事。

我有一個jQuery的點擊功能中的AJAX GET請求:

//click an image 
$(".img_div").click(function() { 

    //get integer stored in element attribute and put it in variable 
    var altCheck = $(this).find('.modal_img').attr('alt'); 

    //get MySQL data 
    $.ajax({ 
     url: "get.php", 
     type: "get" 
     data: { 
     ajaxid: altCheck //variable from above - is this correct? 
     } 
     .... 
     .... 
    }); 

get.php,我想這樣來使用這個變量:從本質上講

$sql = "SELECT * FROM table WHERE screeningId = $ajaxid"; 

,我我想通過將一個變量傳遞給AJAX請求來修改我的SQL語句,但我不確定這是如何完成的。

+1

不關OP的實際問題。在傳遞價值之前。你必須清理你的變量。在alt屬性中查找任何潛在的eval語句或腳本,然後傳遞數據。你的代碼在這一點上是開放的sql注入 – karthick

+0

我認爲,因爲SQL語句是在get.php中,它會是安全的嗎? – rpivovar

+0

當前實施會發生什麼 – RohitS

回答

2

在JavaScript中使用這個

$.ajax({ url: 'get.php', 
     data: {'ajaxid':altCheck}, 
     type: 'post', 
     dataType:'json' 
     }); 

,並在您get.php使用

$ajaxid = $_POST['ajaxid']; 
$sql = "SELECT * FROM table WHERE screeningId = $ajaxid"; 
+0

啊,我明白了。感謝您的澄清。當我允許時,我會接受它。 – rpivovar

1

就像我剛纔在註釋中。該代碼在這一點上是不安全的。回答你原來的問題。是的,您可以在ajax調用中使用數據屬性傳遞值。

報價:arkash anjum的答案

$.ajax({ url: 'get.php', 
     data: {'ajaxid':altCheck}, 
     type: 'post', 
     dataType:'json' 
     }); 

,並得到這樣

$ajaxid = $_POST['ajaxid']; 
$sql = "SELECT * FROM table WHERE screeningId = $ajaxid"; 

在get.php價值但這意味着你打開你的應用程序注入攻擊

的一種方式解決的方法是消毒js屬性。但是,這仍然不是一個傻瓜證明的解決方案。你必須使用的是SQL查詢中的準備語句,並使用它來分配ajax值,然後執行語句。這將是明智的,同時使用消毒劑和事先準備好的聲明,以避免XSS攻擊,SQL注入攻擊

<?php 
$stmt = $dbh->prepare("SELECT * FROM table WHERE screeningId = ?"); 
if ($stmt->execute(array($_POST['ajaxid']))) { 
    while ($row = $stmt->fetch()) { 
    print_r($row); 
    } 
} 
?> 

注:我不知道PHP的,所以我可能是錯的一些語法。

參考準備語句 http://php.net/manual/en/pdo.prepared-statements.php

+0

感謝您的信息,我一定會看看這個 – rpivovar

1

在URL通給予斜線如下,

url: "get.php/" + altCheck; 

,併爲$ _GET [ 'altCheck']

記得在get.php文件訪問GET方法,我們需要在URL中傳遞數據。

快樂編碼!

1

這是一些樣板..(我用你的代碼爲例。)

注意:散裝的Ajax請求發送數據時,你應該使用POST方法,但正如你所說,你要發佈與get數據我已經使用Get否則你可以改變類型Post

快速鏈接的:阿賈克斯http://api.jquery.com/jquery.ajax/

使用PDOS https://www.w3schools.com/php/php_mysql_prepared_statements.asp

在JS:

$(".img_div").click(function(){  

    //get integer stored in element attribute and put it in variable 
    var altCheck = $(this).find('.modal_img').attr('alt'); 

    // lets send data. 
    $.ajax({ 
     url: "get.php", 
     type: "get", 
     datatype : "json", 
     data:{ ajaxid: altCheck } //this is valid to use as you already have variable of name altCheck in case of string it should be in double quotes. 
     }, 
    success : function(data) // this will be called if ajax succeeds and data will hold the ref to your returned data if any. 
    { 
      // do whatever with data. 
    }, error : function(data) // error handler if any error occurs (failed ajax) 
    { 
     // do handle error here. 
    } 
}); 
在PHP

$value = filter_var($_REQUEST["ajaxid"], FILTER_SANITIZE_STRING); // used REQUEST So get/post request wont matter. 
$value = mysqli_real_escape_string($value); 

$stmt = $conn->prepare("select from table where id = ?"); 
$stmt->bind_param("s",$value); 
+0

什麼是「s」在'$ stmt-> bind_param(「s」,$ value)中做什麼;'? – rpivovar

+0

啊,我認爲這回答我的問題:https://stackoverflow.com/questions/18426172/what-does-bind-param-accomplish – rpivovar

+0

以及你已經選擇了一個答案..對於您查詢請遵循這個http:///php.net/manual/en/mysqli-stmt.bind-param.php鏈接 – RohitS