验证后提交表格

时间:2011-03-20 07:48:35

标签: php validation

这里希望这将是一个简单的问题。

我正在尝试在单独的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 个答案:

答案 0 :(得分:2)

您有两种可能性:

  1. 制作表单提交的验证部分,即不进行重定向(当然,您仍然可以将逻辑保存在单独的文件中)。
  2. 使用sessions在请求之间保留POST数据。

答案 1 :(得分: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,如果没有通过检查,则返回消息。这就是我使用===检查的原因。