2013-02-17 39 views
0

我有一個for循環,並且在其中我上傳了多個圖像。上傳圖片後,我會通過wp_mail()向管理員發送電子郵件通知。PHP:在for循環中只返回一次函數

事情工作正常,併發送電子郵件通知。然而問題是通知電子郵件發送按照圖像計數。意思是如果上傳1張圖片比4張通知電子郵件中的一張通知郵件(因爲它在循環中)。不過,我希望通知只發送一次,無論是一個或10個圖像。

這裏是我的全部代碼:一個變量(下文$ MSG)和修改信息循環的每一次迭代

global $wpdb, $post; 
$upload_path = wp_upload_dir();    
$post_id = $post->ID; 

$upload_dir = $upload_path['basedir'].'/review-media/'.$post_id.'/'.get_current_user_id().'/'; 
$thumbnail_dir = $upload_dir.'thumbnail/'; 
$upload_url = $upload_path['baseurl'].'/review-media/'.$post_id.'/'.get_current_user_id().'/thumbnail/'; 


self::create_path($thumbnail_dir); 


if (isset($_FILES['photo']) === true) { 

    $errors = array();    
    $allowed_ext = array('jpg', 'jpeg', 'png', 'gif'); 

    $files = $_FILES['photo']; 

    for($x = 0; $x < count($files['name']); $x++) { 

     $file_name = $files['name'][$x]; 
     $file_ext = strtolower(end(explode('.', $file_name))); 
     $file_size = $files['size'][$x]; 
     $file_tmp = $files['tmp_name'][$x]; 

     if($file_tmp) 
     list($img_width, $img_height) = getimagesize($file_tmp); 

     $min_img_width = 1; 
     $min_img_height = 1; 
     $max_img_width = 2000; 
     $max_img_height = 2000; 


     if (!$file_tmp) { 
      $errors[] = '<p>Please select the file</p>';  
     } 

     if (($file_tmp) && (($img_width > $max_img_width) || ($img_width < $min_img_width)) && (($img_height > $max_img_height) || ($img_height < $min_img_height))) { 
      $errors[] = '<p>Size of <strong>'.$file_name.'</strong> must be within '. $min_img_width .'px to '. $max_img_width .'px</p>'; 
     } 

     if (($file_tmp) && (in_array($file_ext, $allowed_ext) === false)) {     
      $errors[] = '<p>Extension <strong>'.$file_ext.'</strong> not allowed</p>'; 
      unlink($file_tmp);         
     } 

     if ($file_size > 2097152) {     
      $errors[] = '<p>File <strong>'.$file_name.'</strong> size must be under 2mb</p>'; 
      unlink($file_tmp);     
     } 

     if(empty($errors)) { 

      move_uploaded_file($file_tmp, $upload_dir.$file_name); 

      //crop and resize to images and thumbnails 
      $target_file = $upload_dir.$file_name; // original file 
      $resized_file = $upload_dir.$file_name; // max resized file 
      $med_file = $upload_dir.'medium-'.$file_name; // medium resized fiel 
      $thumbnail = $thumbnail_dir.$file_name; // thumbnail file 
      $large_width = 1024; // upload resize max width 
      $large_height = 1024; // upload resize max height 
      $thumb_width = 150; // thumbnail width 
      $thumb_height = 150; // thumbnail height 
      $med_width = $thumb_width * 1.5; // medium resized image width 
      $med_height = $thumb_height * 1.5; // medium resized image height 

      // resize to maximum width and height 
      self::resize_image($target_file, $resized_file, $large_width, $large_height, $file_ext); 
      // resize with 1.5 multi of thumb width and height to generate thumbnail 
      self::resize_image($target_file, $med_file, $med_width, $med_height, $file_ext);  
      // crop image uisng medium resized image    
      self::crop_thumbnai(file_exists($med_file) ? $med_file : $target_file, $thumbnail, $thumb_width, $thumb_height, $file_ext); 

      // delete medium resized file after thumbnail creation. 
      if (file_exists($med_file)) 
       unlink($med_file); 

      self::insert_image($file_name); 

      //self::get_uploaded_image(); 
      echo '<div class="upload-status-thumb">'; 
      echo '<img src="'.$upload_url.$file_name.'" alt="imge" />'; 
      echo '</div>'; 

      // send notification email to admin on image upload 
      self::email_notification($post_id);     

     } else {     
      foreach ($errors as $error) {      
       echo $error;      
      }     
     } 

    } 

} 
+2

循環*後發送通知*一次,而不是在每個循環迭代。 – deceze 2013-02-17 12:22:47

+0

但比如何檢查表格是否已提交?不過,我試圖放置循環後,但它仍然發送上傳時間圖像的數量。如果你不能介意的話,你可以給予更多的否定票:)只要我學到新東西:) – 2013-02-17 12:24:29

+0

更具體地說,因爲如果沒有錯誤,你正在發電子郵件記錄'$ success = true',你的腳本當前發送一封電子郵件並且在循環之外,詢問「if($ success)」,如果是,則發送電子郵件。 – Popnoodles 2013-02-17 12:24:48

回答

1

存儲您的電子郵件內容。當循環結束時,檢查變量是否已被修改,如果是這樣的話通過電子郵件發送它的內容。

這應該工作:

global $wpdb, $post; 
    $upload_path = wp_upload_dir();    
    $post_id = $post->ID; 
    $msg = false; 

    $upload_dir = $upload_path['basedir'].'/review-media/'.$post_id.'/'.get_current_user_id().'/'; 
    $thumbnail_dir = $upload_dir.'thumbnail/'; 
    $upload_url = $upload_path['baseurl'].'/review-media/'.$post_id.'/'.get_current_user_id().'/thumbnail/'; 


    self::create_path($thumbnail_dir); 


    if (isset($_FILES['photo']) === true) { 

     $errors = array();    
     $allowed_ext = array('jpg', 'jpeg', 'png', 'gif'); 

     $files = $_FILES['photo']; 

     for($x = 0; $x < count($files['name']); $x++) { 

      $file_name = $files['name'][$x]; 
      $file_ext = strtolower(end(explode('.', $file_name))); 
      $file_size = $files['size'][$x]; 
      $file_tmp = $files['tmp_name'][$x]; 

      if($file_tmp) 
      list($img_width, $img_height) = getimagesize($file_tmp); 

      $min_img_width = 1; 
      $min_img_height = 1; 
      $max_img_width = 2000; 
      $max_img_height = 2000; 


      if (!$file_tmp) { 
       $errors[] = '<p>Please select the file</p>';  
      } 

      if (($file_tmp) && (($img_width > $max_img_width) || ($img_width < $min_img_width)) && (($img_height > $max_img_height) || ($img_height < $min_img_height))) { 
       $errors[] = '<p>Size of <strong>'.$file_name.'</strong> must be within '. $min_img_width .'px to '. $max_img_width .'px</p>'; 
      } 

      if (($file_tmp) && (in_array($file_ext, $allowed_ext) === false)) {     
       $errors[] = '<p>Extension <strong>'.$file_ext.'</strong> not allowed</p>'; 
       unlink($file_tmp);         
      } 

      if ($file_size > 2097152) {     
       $errors[] = '<p>File <strong>'.$file_name.'</strong> size must be under 2mb</p>'; 
       unlink($file_tmp);     
      } 

      if(empty($errors)) { 

       move_uploaded_file($file_tmp, $upload_dir.$file_name); 

       //crop and resize to images and thumbnails 
       $target_file = $upload_dir.$file_name; // original file 
       $resized_file = $upload_dir.$file_name; // max resized file 
       $med_file = $upload_dir.'medium-'.$file_name; // medium resized fiel 
       $thumbnail = $thumbnail_dir.$file_name; // thumbnail file 
       $large_width = 1024; // upload resize max width 
       $large_height = 1024; // upload resize max height 
       $thumb_width = 150; // thumbnail width 
       $thumb_height = 150; // thumbnail height 
       $med_width = $thumb_width * 1.5; // medium resized image width 
       $med_height = $thumb_height * 1.5; // medium resized image height 

       // resize to maximum width and height 
       self::resize_image($target_file, $resized_file, $large_width, $large_height, $file_ext); 
       // resize with 1.5 multi of thumb width and height to generate thumbnail 
       self::resize_image($target_file, $med_file, $med_width, $med_height, $file_ext);  
       // crop image uisng medium resized image    
       self::crop_thumbnai(file_exists($med_file) ? $med_file : $target_file, $thumbnail, $thumb_width, $thumb_height, $file_ext); 

       // delete medium resized file after thumbnail creation. 
       if (file_exists($med_file)) 
        unlink($med_file); 

       self::insert_image($file_name); 

       //self::get_uploaded_image(); 
       echo '<div class="upload-status-thumb">'; 
       echo '<img src="'.$upload_url.$file_name.'" alt="imge" />'; 
       echo '</div>'; 

       // add to message var 
       $msg .= 'image added: '.$post_id."\n";     

      } else {     
       foreach ($errors as $error) {      
        echo $error;      
       }     
      } 

     } 

    if($msg){ // if msg is no longer false email it to admin 
     self::email_notification($msg); 
    } 

    } 
+0

'$ msg = false;'和'$ msg。='...''PHP是否將bool轉換爲沒有警告的字符串? – Popnoodles 2013-02-17 12:26:35

+0

沒有完全發送電子郵件通知的功能沒有問題,但只有它在for循環中發送圖像上傳的次數。意思是如果用戶選擇3張圖片上傳,比上傳電子郵件還要多發3次 – 2013-02-17 12:28:18

+0

不能說全部,但是5.3呢,yup – 2013-02-17 12:29:57

0

收集後的ID被通知到一個數組,然後後for循環調用email_notification ID的數組傳遞給它。修改email_notification函數以接受一個I​​D數組而不是一個ID,並將所有ID包含在電子郵件中(例如,使用foreach循環迭代ID數組)。

+0

我很抱歉混淆,但這只是一個職位。圖片上傳表單在單個帖子 – 2013-02-17 12:26:55

-1

在循環中使用布爾變量。首先將其設置爲true,然後將其與單個圖像上傳的成功進行比較。

然後,循環完成執行後,您可以檢查該變量併發送電子郵件通知。

即。

if ({success}) { 
    $boolVar = $boolVar && true; 
} else { 
    $boolVar = $boolVar && false; 
} 

如果您仍然希望在電子郵件的ID,你需要在循環過程中收集它們。

+0

哦,從未使用過這個。需要幫助以瞭解在哪裏放置以及如何使用 – 2013-02-17 12:29:37

1

容易的工作:

$message = "" ; 
for($x = 0; $x < count($files['name']); $x++) { 
    if(empty($errors)) { 
     move_uploaded_file($file_tmp, $upload_dir.$file_name); 
     $message .= "$file_name successfuly uploaded in ". Date("H:i:s") ." ".$post->ID." \n\r" ; 
     # something else ... 
    } 
    # something else ... 
} 
if($message!='') 
    self::email_notification($message); 
+0

您的答案也可以。..非常感謝 – 2013-02-17 12:43:52