2011-03-20 145 views
0

希望這會是一個簡單的問題。驗證後提交表格

我想在單獨的PHP頁面上處理表單內容之前驗證圖像大小/類型。

驗證工作完美,重定向到頁面並處理表單不是。

$image = $_FILES['files']['name']; 
$ext = strrchr($_FILES['files']['name'], "."); 

if (isset($_POST['submitNews'])) { 
    if ($image != NULL && $_FILES["files"]["size"]<5000) { 
     if ($ext == '.png' || $ext == '.jpg') { 
      $message = "Good file type"; 
     } 
     else { 
      $message = "Bad file type"; 
     } 
    } 
    elseif ($image != NULL && $_FILES["files"]["size"]>5001) { 
     $message = "Too big"; 
    } 
    else { 
     //Process form 
     header("Location: ../includes/manage_news.php"); 
    } 
} 

?> 

標題重定向不是正確的解決方案,因爲表單的數據沒有進入manage_news.php頁面。

回答

2

你有兩種可能性:

  1. 使該表單提交的驗證部分,即不作重定向(當然你仍然可以保持在單獨的文件你的邏輯)。
  2. 使用sessions在請求之間持續POST數據。
0

你應該重構你的代碼。像這樣的東西應該有所幫助

if (isset($_POST['submitNews'])) { 
    if (validateImage() === true) { 
     //image passed validation, process form 
    } 
} 

function validateImage() { 
    $image = $_FILES['files']['name']; 
    if ($image != NULL && $_FILES["files"]["size"]<5000) { 
     if ($ext == '.png' || $ext == '.jpg') { 
      return true; 
     } 
     else { 
      return "Bad file type"; 
     } 
    } 
    elseif ($image != NULL && $_FILES["files"]["size"]>5001) { 
     return "Too big"; 
    } 
    return false; //or true, depends on how you want it 
} 

這只是一個想法,你可以適應它的代碼。如果它通過了所有的測試,我將返回TRUE,如果它沒有通過檢查,則返回消息。這就是爲什麼我使用===進行檢查。