2017-06-10 6 views
0

私はそのフィールドから値を抽出するフォームとPHPスクリプトがあります。問題は私が選択したとき、またはアップロードする画像をまだ選択していないときでも、それはまだアップロード中です。私が達成したいのは、画像をアップロードしたり、必要なときにアップロードしたりせずに、一部のフィールドに何かを入力したいかどうかをユーザーが選択できるようにすることです。 マイ形式:(私はブートストラップを使用しています)HTML/PHP - アップロードするイメージを選択してフォームを送信するかどうかを指定します。ユーザーに選択させる

<div class="main col-md-9 col-md-offset-3"> 
    <center><h2>Start New Topic</h2></center> 
    <form accept-charset="UTF-8" action="" method="POST" enctype="multipart/form-data"> 

    <div class="form-group"> 
    <label>Title*</label> 
    <input type='text' class="form-control" id="title" name='title' value='' maxlength="155" required> 
    <h6 class="pull-right" id="count_title"></h6> 
    </div> 

    <div class="form-group"> 
    <label for="sel1">Category</label> 
    <select class="form-control" id="sel1"> 
     <option>none</option> 
     <option>Movies</option> 
     <option>Politics</option> 
     <option>Celebreties</option> 
     <option>Music</option> 
     <option>Books</option> 
     <option>Various</option> 
    </select> 
    </div> 
    <div class="form-group"> 
    <label>Include Description</label> 
    <textarea class="form-control" id="description" name='description' cols='60' rows='10' maxlength="5550"></textarea> 
    <h6 class="pull-right" id="count_description"></h6> 
    </div> 
    <div class="form-group"> 
    <label>Include Images</label> 
    <input type="file" name="files[]" multiple="" /> 
    </div> 

    <div class="form-group pull-right"> 
    <input type='submit' class="btn btn-info btn-md" name='submit' value='Go!'> 
    </div> 
    </form> 

PHPスクリプト:私はここで達成しようとした何

//if form has been submitted process it 
if(isset($_POST['submit'])){ 
    $_POST = array_map('stripslashes', $_POST); 

    //collect form data 
    extract($_POST); 
//basic validation 
if($title ==''){ 
    $error[] = 'Please enter the title.'; 
} 
    if(!isset($error)){ 

     try { 
    $title = htmlspecialchars($title); 
    $description = htmlspecialchars($description); 
    //insert into database 
    $stmt = $db->prepare('INSERT INTO topics (title,description,date_started) VALUES (:title, :seotitle, :description, NOW())'); 
    $stmt->execute(array(
     ':title' => $title, 
     ':seotitle' => $seotitle, 
     ':description' => $description 
    )); 
    $last_id = $db->lastInsertId(); 

    //inserting images 
    if(isset($_FILES['files'])){ 
     $errors= array(); 
     foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 
     $file_name = 'loorha_'.$user_id.'_'.$last_id.'_'.$key.$_FILES['files']['name'][$key]; 
     $file_size =$_FILES['files']['size'][$key]; 
     $file_tmp =$_FILES['files']['tmp_name'][$key]; 
     $file_type=$_FILES['files']['type'][$key]; 
      if($file_size > 2000000){ 
      $errors[]='File size must be less than 2 MB'; 
      } 
      //Storing Images into DB 
      $stmt = $db->prepare('INSERT INTO topics_images (topic_id,user_id,img_name,size,type,time_uploaded) VALUES ("'.$last_id.'","'.$user_id.'","'.$file_name.'", "'.$file_size.'", "'.$file_type.'",NOW())'); 
      $stmt->execute(); 

      $destinationFolder ="uploads/topic/$last_id"; 
      if(empty($errors)==true){ 
       if(is_dir($destinationFolder)==false){ 
        mkdir("$destinationFolder", 0700);  // Create directory if it does not appear in the root folder 
       } 
       if(is_dir("$destinationFolder/".$file_name)==false){ 
      $file_name = $destinationFolder. "/".$file_name; 
        move_uploaded_file($file_tmp, $file_name); 


       }else{ //rename the file if another one exist 
        $new_dir="$destinationFolder/".$file_name.time(); 
        rename($file_tmp,$new_dir) ; 
       } 

      }else{ 
        print_r($errors); 
      } 
     } 
     if(empty($error)){ 
     echo "Images Uploaded Successfully!"; 
     } 
    } 
    //redirect to just created topic 
    header('Location: topic/' . $last_id . '/' . $seotitle); 
    exit; 

     } catch(PDOException $e) { 
      echo $e->getMessage(); 
     } 

    } 

} 

は、ユーザーが実際にファイルを選択されている場合にのみアップロード続行するif(isset($_FILES['files'])){文を作っています。しかし、それはとにかく空のフィールドをアップロードします。私はこれを修正する方法についていくつかの良いアドバイスを得ることを願っています。みんなありがとう!

答えて

0

ゼロより大きいファイルサイズのチェックを追加します。

if(isset($_FILES['files'])){ 
    $errors= array(); 
    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 
     $file_name = 'loorha_'.$user_id.'_'.$last_id.'_'.$key.$_FILES['files']['name'][$key]; 
     $file_size = $_FILES['files']['size'][$key]; 
     $file_tmp = $_FILES['files']['tmp_name'][$key]; 
     $file_type = $_FILES['files']['type'][$key]; 

     // is the file size greater than 0? 
     if(! $file_size > 0){     
      continue; // start the next iteration of the foreach loop 
     } 

     ... 
} 
+0

はどうもありがとうございました!あなたの答えは、それを修正する正しい方法を見つけるのを助けました! –

関連する問題