我正在创建一个网站,我有一个表单来添加新帖子。我正在使用iFrame而不是ajax来获得对IE的全面支持(好吧,我知道IE是最讨厌的,也是最糟糕的浏览器之一,但有些noobs正在使用它)。基本上,当我提交表单时,它会给我一个内部错误(500)。 这是我的表格:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionic/1.3.2/css/ionic.min.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<form enctype="multipart/form-data" class="form" id="form" action="./addPost.php" method="POST">
<div class="list">
<label class="item item-input">
<input type="text" placeholder="Title" class="AddPosttitle" name="title">
</label>
<label class="item item-input">
<input class="description" type="text" placeholder="Simple Description (max 60 caracters)" maxlength="60" name="description">
</label>
<label class="item item-input">
<div>
<span id='button_upload'>Image : </span>
<input type='file' class="img" name="img">
</div>
</label>
<label class="item item-input">
<textarea placeholder="Full description" class="full" name="full"></textarea>
</label>
<div class="padding">
<button class="button button-block button-positive submit-btn" type="submit">
Submit
</button>
</div>
</div>
</form>
<style type="text/css">
.form {
background: #FFF;
}
</style>
<?php
if (!empty($_GET['error'])){
?>
<script type="text/javascript">
function findGetParameter(parameterName) {
var result = null,
tmp = [];
var items = location.search.substr(1).split("&");
for (var index = 0; index < items.length; index++) {
tmp = items[index].split("=");
if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
}
return result;
}
alert(findGetParameter("error"));
</script><?php
}
?>
我正在使用Ionic库,因为我喜欢一些组件,但无论如何,这是我的addPost.php
文件:
<?php
try
{
$db = new PDO('mysql:host=something;dbname=someDB;charset=utf8', 'ID', 'LOL');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$post = $_POST;
$img = base64_encode(file_get_contents($_FILES['img']['tmp_name']));
$title = addslashes($post['title']);
$description = addslashes($post['description']);
$fullDesc = addslashes($post['full']);
// if (!empty($title) & !empty($description) & !empty($fullDesc) & !empty($img)) {
// }
// else {
// // header("Location: form.php?error=Fill the form!");
// }
$sql = "INSERT INTO posts (title, description, img, fullDesc, likes) VALUES ('$title', '$description', hextoraw('$img')', '$fullDesc', 0)";
$db->exec($sql);
// header("Access-Control-Allow-Origin: *");
header("Location: form.php?error=$sql");
我不知道为什么会有错误。我认为它来自图像,但我不确定。我还在尝试最终的解决方案,如果我发现了什么,我会编辑我的问题(只是为了让你知道!)
答案 0 :(得分:0)
如果显示的500错误是通用错误页面(没有任何堆栈跟踪或详细错误消息),请查找网络服务器错误日志文件的最后几行,并在此处发布。我们需要有关您所遇到的错误的更多信息。可能是文件访问错误?数据库错误?
此外,如果您使用HEXTORAW Oracle函数将十六进制字符串转换为二进制数据,您必须知道HEXTORAW使用hexstring,而不是base 64编码的字符串。 您应该使用http://php.net/manual/en/function.bin2hex.php而不是base64_encode。
答案 1 :(得分:0)
你在sql字符串中有错误打印: HEXTORAW( '$ IMG')的 强>
删除最后一句话
答案 2 :(得分:0)
您确实应该使用prepared statements来保证安全:
$stmt = $db->prepare("INSERT INTO posts (title, description, img, fullDesc, likes) VALUES (:title, :description, :img, :fullDesc, :likes)");
$stmt->bindParam(':title', $title);
$stmt->bindParam(':description', $description);
$stmt->bindParam(':img', hextoraw($img));
$stmt->bindParam(':fullDesc', $fullDesc);
$stmt->bindParam(':likes', 0);
$stmt->execute();
这也可以通过轻松重复使用语句来帮助您(参见链接)。