代码之家  ›  专栏  ›  技术社区  ›  Ibrahim Azhar Armar

帮助我重新格式化PHP验证代码

php
  •  0
  • Ibrahim Azhar Armar  · 技术社区  · 15 年前

    在将值上载或插入数据库之前,我要确保

    b) 这三个图像应该具有不同的固定维度值(我从getimagesize()获取维度值,并对其进行验证)

    c) 并检查目录中是否存在文件名的重复项(我正在通过file\u exists()检查该目录)

    我已经为它定义了代码,但是我的代码的问题是,如果最后一个条件返回false,那么上面的条件将执行代码并执行一些操作,比如move\u uploaded\u file,这是我不想发生的,请看一下代码

    请检查最后4如果条件,因为我想重新格式化。

    $w_title = 685;
        $h_title = 50;
        $w_brief = 685;
        $h_brief = 177;
        $w_detail = 685;
    
            if(empty($_POST['ns_title']) || empty($_FILES["ns_pic_title"]["name"]) || empty($_FILES["ns_pic_brief"]["name"]) || empty($_FILES["ns_pic_detail"]["name"])) {
               echo "<script type=\"text/javascript\">" . "alert(\"Please Fill All the Required Fields\");" . "</script>"; 
               echo "<meta http-equiv=\"refresh\" content=\"0;post-news.php\"/>";
               die();
            }
            else {
                $ns_title = htmlspecialchars(strip_tags(mysql_real_escape_string($_POST['ns_title'])));
                if($_FILES["ns_pic_title"]["type"] == "image/jpeg" && $_FILES["ns_pic_brief"]["type"] == "image/jpeg" && $_FILES["ns_pic_detail"]["type"] == "image/jpeg") {
    
                    $ns_pic_title_loc= $_FILES["ns_pic_title"]["tmp_name"];
                    $ns_pic_title_name = $_FILES["ns_pic_title"]["name"];
                    list($width_title, $height_title) = getimagesize($ns_pic_title_loc);
    
                    $ns_pic_brief_loc = $_FILES["ns_pic_brief"]["tmp_name"];
                    $ns_pic_brief_name = $_FILES["ns_pic_brief"]["name"];
                    list($width_brief, $height_brief) = getimagesize($ns_pic_brief_loc);
    
                    $ns_pic_detail_loc = $_FILES["ns_pic_detail"]["tmp_name"];
                    $ns_pic_detail_name = $_FILES["ns_pic_detail"]["name"];
                    list($width_detail, $height_detail) = getimagesize($ns_pic_detail_loc);
    
                    if(file_exists($ns_target.$ns_pic_title_name)) {
                        echo "<script type=\"text/javascript\">" . "alert(\"File Already Exists, Please Choose a Different Name for the File\");" . "</script>";
                        echo "<meta http-equiv=\"refresh\" content=\"0;post-news.php\"/>";
                        die();
                    }
    
                    if(!$width_title == $w_title && !$height_title == $h_title) {
                        echo "<script type=\"text/javascript\">" . "alert(\"Incorrect File Dimension for Title News, please make sure it is (685 X 50)\");" . "</script>";
                        echo "<meta http-equiv=\"refresh\" content=\"0;post-news.php\"/>";
                        die();
                    }
                    else {
                        move_uploaded_file($ns_pic_title_loc, $ns_target.$ns_pic_title_name);
                    }
    
                    if(!$width_brief == $w_brief && !$height_brief == $h_brief) {
                        echo "<script type=\"text/javascript\">" . "alert(\"Incorrect File Dimension for Brief News, please make sure it is (685 X 177)\");" . "</script>";
                        echo "<meta http-equiv=\"refresh\" content=\"0;post-news.php\"/>";
                        die();
                    }
                    else {
                        move_uploaded_file($ns_pic_brief_loc, $ns_target.$ns_pic_brief_name);
                    }
                    if(!$width_detail == $w_detail) {
                        echo "<script type=\"text/javascript\">" . "alert(\"Incorrect File Dimension for Detail News, please make sure it is (685 in width)\");" . "</script>";
                        echo "<meta http-equiv=\"refresh\" content=\"0;post-news.php\"/>";
                        die();
                    }
                    else {
                        move_uploaded_file($ns_pic_brief_loc, $ns_target.$ns_pic_brief_name);
                    }
    

    如何重新格式化代码以便

    a) 它应该检查所有这三种情况

    谢谢您

    2 回复  |  直到 15 年前
        1
  •  2
  •   Brandon Horsley    15 年前

    我建议您将逻辑移到函数中以减少重复。

    注意

    function fail($error)
    {
      echo '<script type="text/javascript">alert("' . $error . '");</script>';
      echo '<meta http-equiv="refresh" content="0;post-news.php"/>';
    }
    
    function valid_image($image, $width, $height = 0)
    {
      if ($image['type'] != 'image/jpeg')
      {
        fail('File must be of type image/jpeg');
        return false;
      }
    
      if(file_exists($ns_target . $image['name']))
      {
        fail('File Already Exists, Please Choose a Different Name for the File');
        return false;
      }
    
      list($image_width, $image_height) = getimagesize($image['tmp_name']);
      if ($image_width != $width || ($image_height && $image_height != $height))
      {
        fail('Incorrect File Dimension for ' . $image['name'] .
          ', please make sure it is (' . $width .
          ($height ? ' X ' . $height  : ' in width'). ')');
        return false;
      }
      return true;
    }
    
    if(empty($_POST['ns_title']) ||
      empty($_FILES["ns_pic_title"]["name"]) ||
      empty($_FILES["ns_pic_brief"]["name"]) ||
      empty($_FILES["ns_pic_detail"]["name"]))
    {
      fail('Please Fill All the Required Fields');
      die();
    }
    
    if (valid_image($_FILES['ns_pic_title'], 685, 50) &&
      valid_image($_FILES['ns_pic_brief'], 685, 177) &&
      valid_image($_FILES['ns_pic_detail'], 685))
    {
      move_uploaded_file($_FILES['ns_pic_title']['tmp_name'],
        $ns_target . $_FILES['ns_pic_title']['name']);
    
      move_uploaded_file($_FILES['ns_pic_brief']['tmp_name'],
        $ns_target . $_FILES['ns_pic_brief']['name']);
    
      move_uploaded_file($_FILES['ns_pic_detail']['tmp_name'],
        $ns_target . $_FILES['ns_pic_detail']['name']);
    }
    
        2
  •  1
  •   Majid Fouladpour    15 年前

    我可以提供一些建议:

    不需要 if ... else
    您可以通过减少嵌套来简化代码。

    这是

    if(cond) {
      do this;
      die();
    } else {
      do other things
    }
    

    将以上更改为:

    if(cond) {
      do this;
      die();
    }
    do other things
    

    if(cond) die('text to output');
    do other things
    

    检查是否存在异常,而不是一致性
    而不是

    if($_FILES["ns_pic_title"]["type"] == "image/jpeg" && ...) {
      do stuff
      ...
    

    使用

    if($_FILES["ns_pic_title"]["type"] !== "image/jpeg" || ...) exit;
    do stuff
    ...
    

    使用注释

    推荐文章