【发布时间】:2018-10-17 15:41:46
【问题描述】:
我是 PHP 新手,遇到了一个让我发疯的问题。也许这里有人可以让我知道我做错了什么。
我有一个用户填写的信息。以下脚本使用输入到 mysql 数据库的日期来生成 json 数据:
<?php
include("../includes.php");
$sq = new SQL();
$TableName = "permissions";
$Fields = $_POST["Fields"];
$FieldsSTR = "`" . str_replace("*;*","`,`", $Fields) . "`";
$Join = "AND";
$Start = 0;
$Limit = $_POST["Limit"];
if($Limit == "")$Limit = 1000;
$Where = $_POST["Where"];
$WhereSTR = "";
if($Where !== "")$WhereSTR = str_replace("*;*"," $Join ", $Where);
$q = "SELECT $FieldsSTR FROM `$TableName` $WhereSTR";
$data = $sq->sqlQuery($q);
if(sizeof($data)>0)array_shift($data);
header("Content-Type: application/json");
echo "[";
foreach($data as $k=>$line){
echo "[";
echo "\"" . str_replace("*;*","\",\"",$line) . "\"";
echo "]";
if($k < sizeof($data) - 1)echo ",";
}
echo "]";
exit;
?>
我遇到的问题是它已停止工作。一天还好,第二天就不行了。我在想这个问题的原因可能是疯狂的用户数据已输入数据库。在我的 foreach 语句中,我尝试替换“;”带有“
”标签,但这不起作用。
以前有人遇到过这个问题吗?也许有人可以为我指明正确的方向!
谢谢
杰森
【问题讨论】:
-
您会在上面进行编辑以将提交到
$_POST的 HTML 表单发布吗?这看起来像是直接从表单 POST 构建 SQL,这非常危险并且容易被篡改。我还看到似乎是使用字符串操作手动构建 JSON。真的,您应该使用json_encode(),这将为您省去正确格式化和循环的所有麻烦。从您的 SQL 输出中生成有效的 JSON 真的可能像echo json_encode($data);一样简单。 -
这不是您问题的答案,但您正在做的事情看起来 very insecure。我不确定您是否使用
SQL对象包装 PDO 或 MySQLi,但您可能需要查看 prepared statements 以稍微强化您的代码。 -
"...generate json data" -- 创建所需的数据结构并使用
json_encode()生成 JSON。 -
这就是您在那里编写的 SQL 注入。 stackoverflow.com/questions/60174/…
-
“它停止了”对我们毫无帮助。你需要做更多的调试。同样,
foreach循环也是错误的。正如其他人在您想要的结构上提到的json_encode()。