我是 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(我在控制台中检查过)但显示的数据是默认表,即“事件”表。
我怎样才能解决这个问题?
PS:我所有的表都在同一个数据库中。
最佳答案
您正在检查 POST 数据:
if($_POST['name']!=null)
但是使用 GET 数据:
type: "GET"
因此 $_POST
数组将始终为空,并且您的 if
条件将始终为 false
。您可能打算检查 GET 数据:
if($_GET['name']!=null)
还要注意这段代码中的其他几个问题:
- 您的
success
回调是空的,所以这个AJAX 调用实际上不会在客户端执行任何操作。无论您想对返回的数据做什么,都需要在success
函数中完成。 - 此代码对SQL 注入(inject)完全开放。像这样动态使用表名是...非常不正统。这可能表明设计有误。但是,如果您必须从用户输入中获取架构对象名称,那么您至少应该采用白名单方法来验证用户输入是否恰好是预期值之一。 切勿盲目地将用户输入作为代码执行。
关于php - 如何使用 AJAX 调用更改 SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42876048/