当我发送一个表单包含来自没有specialchars的输入的数据时,它会到达PHP文件并轻松地在DB中设置。 选择时,也没有任何问题。
但是,当用户键入下一个键时,事情就不同了:
&#34;或者&#39;或<script>
或提醒(&#39;是&#39;);或\或$等等等等。
我尝试了什么:
使用大量的encodeURI或encodeURIComponent函数或JSON.stringify
或者escapeHTML和我没想过的......
但没有任何作用。
最有问题的是:<script>
或提醒(&#39;是&#39;);
不仅没有被发送到PHP文件,他们卡住了整个页面!
注意:现在我已经注意到即使在stackoveflow中,当我在代码括号中写入<script>
标记时,stackoverflow也不会显示任何内容!
现在,某些字符串,不知何故,最终被传递到php文件, 但是当我试图存储它们时,我也有一个持续的问题: 它们是json编码的,所以我不会对每个对象键执行一些长而耗时的函数,如htmlspecialchars / mysqli_real_escape_string / htmlentities或其他..像这样工作将是非常不舒服....
html / php第一页的一个例子:
<div class="contact-form">
<form ng-submit="processForm()" class="default-form">
<div class="row">
<div class="col-lg-3">
<label for="">* שם פרטי ושם משפחה</label>
<input type="text" required ng-model="formData.full_name" placeholder="* שם פרטי ושם משפחה">
</div>
<div class="col-lg-3">
<label for="">* כתובת דוא׳׳ל</label>
<input type="text" required ng-model="formData.email" placeholder="* כתובת דוא׳׳ל">
</div>
<div class="col-lg-3">
<label for="">* טלפון</label>
<input type="text" required ng-model="formData.phone" placeholder="* טלפון">
</div>
<div class="col-lg-3">
<label for="">* סוג קבלן</label>
<select required ng-model="formData.type">
<option value="">* סוג קבלן</option>
<option value="פרטי" alt="">פרטי</option>
<option value="יזם" alt="">יזם</option>
<option value="בנייה ציבורית" alt="">בנייה ציבורית</option>
</select>
</div>
<div class="col-lg-12">
<label for="">
העלאת קבצים
</label>
<input type="file" ng-file-model="formData.files" name="files" multiple style="margin-top:15px">
</div>
<div class="col-lg-12" style="margin-top:40px">
<input type="checkbox" ng-model="formData.newsletter" id="newsletter" >
<label for="newsletter">קבל מבצעים ועדכונים במייל</label>
</div>
<div class="col-lg-12" style="margin-top:10px">
<button class="thm-btn bg-clr1" style="color:white; font-weight:bold" type="submit">לשליחה לחץ כאן</button>
<h3 class="loader" style="display:none">טוען ומעלה קבצים...</h3>
</div>
</div>
</form>
如你所见,只是另一种基于角度的形式。
现在是JS文件:
$scope.formData = {
full_name: "raz",
phone: "0509921014",
email: "razwebs@gmail.com",
type: "בנייה ציבורית",
newsletter: true,
files: "",
};
$scope.processForm = function() {
$(".bg-clr1").hide();
$(".loader").show();
var data = new FormData();
if ($scope.formData.files.length>0)
{
var files = $scope.formData.files;
for (var k=0; k<files.length; k++)
data.append("file-"+k, files[k]);
}
var formData = JSON.stringify($scope.formData);
formData = encodeURIComponent(formData);
$.ajax({
type: 'POST',
url: 'send_quote.php?formData=' + formData,
cache: false,
contentType: false,
processData: false,
data: data,
success: function(response) {
console.log(response);
$(".bg-clr1").show();
$(".loader").hide();
//window.location = "thanks.php";
}
});
};
请注意,在这个js文件中,我还发送post和get,哪个帖子是FormData对象包含的文件,而get包含常规字符串。
最后是php页面:
$array = $_FILES;
$files = [];
for ($i=0; $i<count($array); $i++)
{
$file = $_FILES["file-" . $i];
$name = $file["name"];
$fileType = $file["type"];
$tmp_name = $file["tmp_name"];
$ext = pathinfo($name, PATHINFO_EXTENSION);
$ext = strtolower($ext);
$fileId = rand(1,10000000);
$dir = "admin/uploads/";
$randName = $dir . $fileId . "." . $ext;
move_uploaded_file($tmp_name, $randName);
array_push($files, $randName);
}
$formData = urldecode($_GET['formData']);
$fd = json_decode($formData, true);
$fd["files"] = $files;
$fd = json_encode($fd, JSON_UNESCAPED_UNICODE);
$theDate = time();
mysqli_query($con, "INSERT INTO quotes
(
`quote`,
`status`,
`date`
)
VALUES
(
'$fd',
0,
'$theDate'
)
");
希望看起来很清楚,我真的花了很多时间来解决这个问题, 没有用,它真的很沮丧,我确信其他人也面临同样的问题......
如果有人可以提供帮助,那就太棒了,对中级英语抱歉。
谢谢!