2011-03-20 15 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

次の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を返し、チェックをパスしなかった場合はメッセージを返します。だから私は===を使ってチェックします。

関連する問題