繁体   English   中英

验证后提交表格

[英]Submit Form AFTER 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页面。

你有两种可能性:

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

你应该重构你的代码。 这样的事情应该有所帮助

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM