私のコードでは、ファイルをアップロードするかどうかを選択できますが、コードを終了するだけでファイルをアップロードして適切なパックname(作成したデータベース名)で、コードを実行してファイルディレクトリに送信すると仮定します。しかし、私の問題は、ファイルが「エラーなし」空かないと、それは内部のコードを実行する場合、このコード行でPHPが複数のファイルのアップロードが空であるかどうかを確認する
if($_FILES['packFiles']['error'] == UPLOAD_ERR_OK){
それがチェックするということですが、私はこの
のような「複数ファイルのアップロード」を持っているので、<input type="file" name="packFiles[]" multiple>
それをスキップしてコードを終了します。私は複数の部分を取り除いたときにそれが完全に機能することに気付いた。ですから、私の質問は、ユーザーが複数のファイルをアップロードできるようにしながら空でないかどうかをチェックする方法があるかどうかです。ここに私のコードです。
PHP
<?php
session_start();
if(empty($_FILES) && empty($_POST) && isset($_SERVER['REQUEST_METHOD']) && strtolower($_SERVER['REQUEST_METHOD']) == 'post'){ //catch file overload error...
$postMax = ini_get('post_max_size'); //grab the size limits...
echo "<p style=\"color: #F00;\">\nPlease note files larger than {$postMax} will result in this error!</p>"; // echo out error and solutions...
return $postMax;
}
if(isset($_COOKIE['id'])){
if($_SESSION['came_from_upload'] != true){
setcookie("id", "", time() - 60*60);
$_COOKIE['id'] = "";
header("Location: developerLogin.php");
exit;
}
echo "<h1> UPDATE PACK FILES INFORMATION</h1>";
try{
// new php data object
$handler = new PDO('mysql:host=127.0.0.1;dbname=magicserver', 'root', '');
//ATTR_ERRMODE set to exception
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
die("There was an error connecting to the database");
}
$userid = $_SESSION['id'];
$stmt = $handler->prepare("SELECT * FROM pack_profile WHERE pack_developer_id = :userid");
$stmt->bindParam(':userid', $userid, PDO::PARAM_INT);
$stmt->execute();
echo "<h2> Please select the pack name you want to update!</h2>";
if($_SERVER['REQUEST_METHOD'] =="POST"){
$token = $_SESSION['token'];
if(!empty($_POST['packNameSelection'])){
$price = addslashes(trim((int)$_POST['price']));
$description = addslashes(trim($_POST['description']));
$packname = addslashes(trim($_POST['pack_name']));
$packNameSelection = $_POST['packNameSelection'];
if(!empty($packname)){
$stmtPacknameCheck = $handler->prepare("SELECT * FROM pack_profile WHERE pack_name = :packname");
$stmtPacknameCheck->bindParam(':packname', $packname, PDO::PARAM_STR);
$stmtPacknameCheck->execute();
if($stmtPacknameCheck->fetch()){
echo "Packname entered is already in use... Please try again";
exit;
}
$stmtPackname = $handler->prepare("UPDATE pack_profile SET pack_name = :packname WHERE pack_name = :packNameSelection");
$stmtPackname->bindParam(':packname', $packname, PDO::PARAM_STR);
$stmtPackname->bindParam(':packNameSelection', $packNameSelection, PDO::PARAM_STR);
$stmtPackname->execute();
}
if(!empty($price)){
if(!ctype_digit($price)){
echo "PRICE ENTERED IS NOT AN INTEGER... PLEASE TRY AGAIN!";
exit;
}
$stmtPrice = $handler->prepare("UPDATE pack_profile SET pack_price = :price WHERE pack_name = :packNameSelection");
$stmtPrice->bindParam(':price', $price, PDO::PARAM_INT);
$stmtPrice->bindParam(':packNameSelection', $packNameSelection, PDO::PARAM_STR);
$stmtPrice->execute();
}
if(!empty($description)){
if(strlen($description) < 10){
echo "Description field MUST to be GREATER than 10 characters!";
exit;
}
$stmtDescription = $handler->prepare("UPDATE pack_profile SET pack_description = :description WHERE pack_name = :packNameSelection");
$stmtDescription->bindParam(':description', $description, PDO::PARAM_STR);
$stmtDescription->bindParam(':packNameSelection', $packNameSelection, PDO::PARAM_STR);
$stmtDescription->execute();
}
if(!empty($_FILES['packFiles']['tmp_name'])){
$stmtPackCheck = $handler->prepare("SELECT * FROM pack_profile WHERE pack_name = :packNameSelection");
$stmtPackCheck->bindParam(':packNameSelection', $packNameSelection, PDO::PARAM_STR);
$stmtPackCheck->execute();
$resultPack = $stmtPackCheck->fetch();
$file_name = "";
$packid = $resultPack['pack_id'];
foreach($_FILES['packFiles']['tmp_name'] as $key => $error){
if ($error != UPLOAD_ERR_OK) {
$errors[] = $_FILES['packFiles']['name'][$key] . ' was not uploaded.';
continue;
}
$pack_tmp = file_get_contents($_FILES['packFiles']['tmp_name'][$key]);
$pack_filename = preg_replace("/[^a-z0-9\.]/", "_", strtolower($_FILES['packFiles']['name'][$key]));
$pack_filename = strtotime("now")."_".$pack_filename;
$file_name .= $_FILES['packFiles']['name'][$key].",";
//Insert into file directory
$dir = "devPacks/" .$userid."/".$packid;
if(is_dir($dir)==false){
mkdir($dir, 0777, true);
}
if(!move_uploaded_file($_FILES['packFiles']['tmp_name'][$key],$dir.'/'.$pack_filename)){
die("an error occurred sending this file... Pleas try again later!");
}
}
}
die("ok");
}else{
echo "Please select valid value from dropdown list";
exit;
}
}
}
?>
<form method="post" enctype="multipart/form-data" autocomplete="off">
<select name="packNameSelection">
<option value="" disabled selected>Select Your Pack Name</option>
<?php
while($result = $stmt->fetch()){
echo "<option value=\"" . $result['pack_name'] . "\">" . $result['pack_name'] ."</option>";
}
?>
</select>
<br>
Pack Name: <input type="text" name="pack_name" placeholder="Your pack name">
<input type="hidden" name="post_id">
<br></br>
Price: <input type="text" name="price" placeholder="If FREE enter 0">
<br></br>
Descripion: <textarea rows="4" cols="50" name="description" placeholder="Description..."></textarea>
<br></br>
Select Pack Files: <input type="file" name="packFiles[]" multiple>
<br></br>
<!--Select Pack Screenshots/Video: <input type="file" name="file[]" multiple> -->
<br></br>
<input type="submit" name="submit">
</form>
をチェック'' ['error'] == UPLOAD_ERR_OK) '' foreach($ _ FILES ['packFiles']を$ fileUploadとして実行する必要があります){' – cmorrissey
待っていますが、ユーザーがデータを送信しない場合はどうなりますか?私はエラーが発生する原因ファイルはありません? – Jagr