【发布时间】:2018-06-19 15:02:15
【问题描述】:
我尝试了解如何在 PDO 中使用多个上传。
所以我有我的 post.php:
$database = new Database();
$db = $database->getConnection();
$media = new Media($db);
if($_POST){
$image = !empty($_FILES["image"]["name"]) ? sha1_file($_FILES['image']['tmp_name']) . "-" . time() . "-" . basename($_FILES["image"]["name"]) : "";
$media->image = $image;
if ($media->create()) {
echo $media->uploadPhoto();
$_POST=array();
}
}
<input name="image[]" type="file" />
我的 media.php 带有 pdo 查询和一些上传验证:
public $image;
public $created;
public function create(){
//write query
$query = "INSERT INTO " . $this->table_name . "
SET image=:image,
created=:created";
$stmt = $this->conn->prepare($query);
$this->image=htmlspecialchars(strip_tags($this->image));
$stmt->bindParam(":image", $this->image);
if($stmt->execute()){
return true;
}
print_r($stmt->errorInfo());
return false;
}
function uploadPhoto(){
$result_message="";
if(!empty($_FILES["image"]["tmp_name"])){
$target_directory = "../uploads/";
$target_file = $target_directory . $this->image;
$file_type = pathinfo($target_file, PATHINFO_EXTENSION);
$file_upload_error_messages="";
$check = getimagesize($_FILES["image"]["tmp_name"]);
if($check!==false){
}else{
$file_upload_error_messages.="<div></div>";
}
$allowed_file_types=array("jpg", "JPG", "jpeg", "JPEG", "png", "PNG", "gif", "GIF");
if(!in_array($file_type, $allowed_file_types)){
$file_upload_error_messages.="<div></div>";
}
if(file_exists($target_file)){
}
if($_FILES['image']['size'] > (10485760)){
$file_upload_error_messages.="<div></div>";
}
if(!is_dir($target_directory)){
mkdir($target_directory, 0777, true);
}
if(empty($file_upload_error_messages)){
if(move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)){
}else{
$result_message.="<div></div>";
}
}
else{
$result_message.="{$file_upload_error_messages}";
}
}
return $result_message;
}
所以我需要将值存储在不同的mysql记录中,并将它们全部上传到服务器。
执行此操作的最佳方法是什么以及将 foreach 放置在哪里? 我在 foreach 的正确位置上挣扎...
$x=0;
foreach ( $_FILES['image']['name'] AS $key => $value ){
// ...
$x++;
}
【问题讨论】:
-
请正确格式化您的问题并添加所有相关代码。您还应该告诉我们实际问题是什么。你到底卡在哪里了?示例:您正在调用
$media->create()来执行一些数据库操作,但由于您没有发布完整的方法,因此我们看不到什么。你也没有向那个函数传递任何东西。 -
你在你的
create函数中缺少一个"(也许只是在这里,但你应该更好地格式化代码) -
我添加了相关代码。我不清楚如何使用函数 uploadPhoto() 插入多个(而不仅仅是一个)图像。
-
当您已经拥有 PDO 时,您的第一个错误是制作数据库包装器。仅仅因为你使用它,这并不意味着你的代码神奇地面向对象。