Php 在Url中使用斜杠时使Ajax请求崩溃
我有一个简单的项目,用于在重写Url时测试Ajax请求,如下所示:Php 在Url中使用斜杠时使Ajax请求崩溃,php,jquery,ajax,.htaccess,Php,Jquery,Ajax,.htaccess,我有一个简单的项目,用于在重写Url时测试Ajax请求,如下所示: http://localhost/ajax/aaaa/ htaccess: Options +FollowSymLinks RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.*)$ index.php?param=$1 index.php: <
http://localhost/ajax/aaaa/
htaccess:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ index.php?param=$1
index.php:
<?php
if (!isset($_GET['param'])){
include('home.php');
}
if (isset($_GET['param'])){
include('tick.php');
}
?>
request.php:
<?php
require("config.inc.php");
require("Database.singleton.php");
$k_name=$_POST['k_name'];
$data = array();
//Connect To DB
$db= new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
$db->connect();
$sql = "SELECT id, name FROM table1 WHERE name=$k_name ";
$rows = $db->fetch_array($sql);
foreach($rows as $record){
$data[] = array('id' => $record['id'], 'name' => $record['name']);
}
echo json_encode(array_values($data));
?>
注意:我的文件夹项目名称是Ajax
Ajax请求工作正常,但在Url中使用斜杠时,如下所示:
http://localhost/ajax/aaaa/
Ajax请求崩溃了,我现在必须使用框架来测试请求调度,但我不明白为什么会出现这个问题。您没有破坏Ajax。您的代码中存在漏洞,并且缺少任何形式的错误处理: 您直接将AJAX值插入到查询中:
$sql = "SELECT id, name FROM table1 WHERE name=$k_name ";
^^^^^^^
这会导致如下查询:
SELECT ... WHERE name=foo
除非表中有一个名为foo的字段,否则这将导致语法错误并终止查询。但是,由于您没有任何错误处理,因此只需假设查询永远不会失败,并继续处理错误数据
您可能已经收到了关于在输出的非对象上调用方法的PHP警告。由于调用JS的代码期望JSON作为响应返回,因此该错误将导致JSON解析错误,诸如此类
简言之,如果您不愿意进行最基本的错误处理,这是可以避免的:
if (query failed) {
output json error message
} else {
process query results
}
永远不要假设成功。总是假设失败,把成功当作惊喜。查询成功的方法只有一种,而失败的方法几乎是无限的。拉斯维加斯赌场欢迎您,因为您将无限大的机会中的一个视为成功的保证。什么意思?你得到了什么错误?我的意思是当url是:ajax请求返回json数据,但在url中添加斜杠如下:不返回任何数据我的zip文件中的项目:name=$k_name是一个示例,在实际项目中,我使用escape和其他算法进行验证,但我的问题是url中的斜杠
SELECT ... WHERE name=foo
if (query failed) {
output json error message
} else {
process query results
}