如何使用AJAX调用更改SELECT查询

时间:2017-03-18 15:11:52

标签: php jquery mysql ajax

我对php和SQL非常陌生,所以如果这非常简单,我真的很抱歉。 我的网站有多个div,里面有表名。 HTML的格式为:<p class="listname">(table name)</p>
我正在尝试编写一个函数,以便当用户单击div时,该函数使用innerHTML获取文本,并显示该特定表的内容。 我写的jquery函数是:

$(document).ready(function(){
$(".listname").click(function(){
var x=($(this).html()).toLowerCase(); //this assigns the text in the class listname to the variable x
console.log(x);

$.ajax({
     url: 'http://localhost/fullcalendar/events.php',
     data: {name:x},
     type: "GET",
     success: function(json) {

     }
});
});

});

我的PHP代码是:

<?php

include 'ChromePhp.php';
ChromePhp::log('php running');

$json = array();
if($_POST['name']!=null)//check if any value is passed else use default value
{
    $table=$_GET['name'];

    ChromePhp::log($table);
}
else
{

    $table= 'event';

    ChromePhp::log($table);
}
$requete = "SELECT * FROM `$table` ORDER BY id";
try {
$bdd = new PDO('mysql:host=localhost;dbname=fullcalendar', 'root', 'root');
} catch(Exception $e) {
exit('Unable to connect to database.');
}
// Execute the query
$resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));

// sending the encoded result to success page
echo json_encode($resultat->fetchAll(PDO::FETCH_ASSOC));

?>

首次加载网站时,查询中使用$ table的默认值,并检索数据。但是,当我尝试单击div时,正确的值将传递给php并分配给$ table(我在控制台中检查)但显示的数据是默认表格,即&#39; event&#39;表。
我怎样才能解决这个问题?
PS:我的所有表都在同一个数据库中。

1 个答案:

答案 0 :(得分:0)

您正在检查POST数据:

if($_POST['name']!=null)

但是使用GET数据:

type: "GET"

因此$_POST数组将始终为空,并且if条件始终为false。您可能想检查GET数据:

if($_GET['name']!=null)

此代码中还有一些其他问题:

  1. 你的success回调是空的,所以这个AJAX调用实际上不会在客户端执行任何操作。无论您想要对返回的数据做什么,都需要在success函数中完成。
  2. 此代码全开 SQL注入。它是动态使用这样的表名非常不正统的。这可能表明设计是错误的。但是,如果您必须从用户输入中获取架构对象名称,那么您至少应采用白名单方法来验证用户输入是否是预期值之一。 绝不盲目地将用户输入作为代码执行。