我有一个图像上传脚本,用于将文件保存到目录以及mySql链接的副本。
如果我将用户ID设置为“123”,则会在数据库中保存一个新条目。但是,如果我将用户ID设置为$ _SESSION ['unique_user_id'];它不会在数据库中添加新条目,而是继续保存文件。
我在PHP页面上都包含了session_start();
,但没有附加的javascript文件。
JS:
function doodleSave() {
var canvas = document.getElementById("doodle-canvas");
var canvasData = canvas.toDataURL("image/png");
$.post('test.php', {data: canvasData}, function (response) {
var data = JSON.parse(response);
if (data.filename !== false) {
alert (data.filename);
} else {
alert('unable to upload');
}
});
}
PHP:
<?php
session_start();
$unique_user_id = $_SESSION['unique_user_id'];
$randomFolder = md5(uniqid(rand(), true));
$upload_dir = "images/external/doodles/".$randomFolder."/";
if (!file_exists($upload_dir)) {
mkdir($upload_dir, 0755, true);
}
$url = md5(uniqid(rand(), true));
$unique_user_id = $_POST['userid'];
$unique_post_id = md5(uniqid(rand(), true));
$timestamp = time();
$nature = "doodle";
$imageUrl = $upload_dir.$url.'.png';
$img = $_POST['data'];
$img = substr($img,strpos($img,",")+1);
$data = base64_decode($img);
$file = $upload_dir . $url . ".png";
$success = file_put_contents($file, $data);
if(!$success) {
echo json_encode(['filename' => false]);
exit(); // Prints success and exit the script
} else {
require_once 'php/connect.php';
try
{
$stmt = $pdo->prepare("INSERT INTO posts (unique_user_id, unique_post_id, nature, image_url, timestamp) VALUE (:unique_user_id, :unique_post_id, :nature, :image_url, :timestamp)");
$stmt->bindParam(":unique_user_id",$unique_user_id);
$stmt->bindParam(":unique_post_id",$unique_post_id);
$stmt->bindParam(":nature",$nature);
$stmt->bindParam(":image_url",$imageUrl);
$stmt->bindParam(":timestamp",$timestamp);
if($stmt->execute())
{
echo json_encode(['filename' => "in database"]);
}
else
{
echo json_encode(['filename' => "not in database"]);
}
}
catch(PDOException $e)
{
$return_data = $e->getMessage();
}
exit();
}
?>
答案 0 :(得分:1)
正如我在评论中所述;你覆盖$unique_user_id
。
你开始宣布:
$unique_user_id = $_SESSION['unique_user_id'];
然后用:
覆盖它$unique_user_id = $_POST['userid'];
您也可以将POST数组分配给会话数组,并检查它是否设置为空。此条件检查应在每个页面中完成。