【问题标题】:File uploader script not working properly文件上传器脚本无法正常工作
【发布时间】:2011-03-26 16:40:45
【问题描述】:

我正在尝试使用 PHP 和 MySql 创建文件上传脚本。但是这个 sript 向我展示了 err.php 页面(当有任何输入验证错误时应该执行)。我试过调整它但没有机会。以下是我的 php 脚本

    <?php

    //Start session

    session_start();



    //Include database connection details

    require_once('default.php');



    //Connect to mysql server

    $link = mysql_connect(DB_HOST, DB_USER, DB_PSWD);

    if(!$link) {

        die('Failed to connect to server: ' . mysql_error());

    }



    //Select database

    $db = mysql_select_db(DB_NAME);

    if(!$db) {

        die("Unable to select database");

    }



    function clean($str) {

        $str = @trim($str);

        if(get_magic_quotes_gpc()) {

            $str = stripslashes($str);

        }

        return mysql_real_escape_string($str);

    }





    //Function to sanitize values received from the form. Prevents SQL injection



    $name = clean($_POST['Name']);

    $toupld = ($_POST['file']);

    $source = clean($_POST['type']);

    $Desc = clean($_POST['Desc']);

    $By = clean($_POST['By']);

    $For = clean($_POST['For']);





    if($name == '') {

        $errmsg_arr[] = 'Name missing';

        $errflag = true;

    }

    if($toupld == '') {

        $errmsg_arr[] = 'Path missing';

        $errflag = true;

    }

    if($source == '') {

        $errmsg_arr[] = 'Type missing';

        $errflag = true;

    }



    if($Desc == '') {

        $errmsg_arr[] = 'Description missing';

        $errflag = true;

    }

    if($By == '') {

        $errmsg_arr[] = 'By missing';

        $errflag = true;

    }

    if($For == '') {

        $errmsg_arr[] = 'For missing';

        $errflag = true;

    }





    function findexts ($fname) { 

        $fname = strtolower($fname) ; 

        $extensions = split("[/\\.]", $fname) ; 

        $n = count($extensions)-1; 

        $extensions = $extensions[$n]; 

    }



    $target_path="../notice/";





    if($errflag) {

        $_SESSION['ERRMSG_ARR'] = $errmsg_arr;

        session_write_close();

        header("location: ../err.php");

        exit();

    }

if($_FILES['file']['error']==0){



    if(($_FILES['file']['size']<1000000)&&($_FILES['file']['type']=="application/msword")||($_FILES['file']['type']=="application/pdf")){



        $ext=findtext($_FILES['file']['name']);

        $random=rand(0,5);

        $random2=$random.".";

        $target=$target.$random2.$ext;

        if(move_uploaded_file($_FILES['file']['tmp_name'],$target)){



            $qry="INSERT INTO PALMSIS.Notice(NoticeID,Name,Date,Timestamp,Type,Descr,By,For) VALUES('$random','$name',NOW(),NOW(),'$source','$Desc','$By','$For')";

            $result=@mysql_query($qry);

            if($result){

                header("location:./noticeupld.php");

                exit();

                }

                else{



                    die("query Failed");



                    }



            }

            else{



                header("location:./success.php");

                }

        }

        else{



            header("location:./noproper.php");



            }



    }

    else{



        header("location:./error.php");



        }?>

【问题讨论】:

  • 除非您在其他地方配置了错误报告设置(例如 php.ini),否则您似乎没有启用错误报告。但这当然对于做一些像样的编程是必不可少的。将错误报告设置为在屏幕上(在您的开发服务器上)显示最大错误级别 (E_ALL | E_STRICT ) 的错误将为您提供各种可能出现问题的线索。
  • Same script as posted 4 hours ago - 两个答案,没有反馈。
  • 这需要基本调试。

标签: php database file-upload


【解决方案1】:

我会先上传一个文件,看看它是否有效......然后添加你的其他部分,看看问题是从哪里开始的。此代码假定您有一个表单,其中包含一个名为“file_name”的文本字段,您可以在其中指定文件移动到服务器时要调用的内容,以及一个文件字段,即您的文件。不要忘记您的表单必须是多部分的。这是人们经常忘记的事情,也是造成很多麻烦的原因。

$fileName = $_REQUEST[ 'file_name' ];
$folder = "./";


if ( move_uploaded_file( $_FILES[ 'file' ][ 'tmp_name' ], $folder . $fileName ) ) {
        echo "SUCCESS:" . $folder.$fileName . " has been saved";

} 
else{
     echo "FAIL:";

}

【讨论】:

    【解决方案2】:

    我能想到的只是这上面的文件必须小于 1mb,这很容易让带有图形的 .pdf 文件超过...我将从一些基本的故障排除技术开始。

    例如:

    if($_FILES['file']['error']==0){
        $flag = $flag+1;
        echo 'No errors reported on file upload<br>';
        }
    if($_FILES['file']['size']<1000000){
        $flag = $flag+1;
        echo 'Size is confirmed under 1mb<br>';
        }
    if(($_FILES['file']['type']=="application/msword")||($_FILES['file']['type']=="application/pdf")){
        $flag = $flag+1;
        echo 'Correct Filetype confirmed<br>';
        }
    

    这样您就知道哪些通过了检查。

    祝你好运!

    【讨论】:

      【解决方案3】:

      您可能不必这样做,但最好将 $errflag 初始化为 false 并将 $errmsg_arr 初始化为空数组。

      【讨论】:

        猜你喜欢
        • 2016-03-04
        • 1970-01-01
        • 1970-01-01
        • 2015-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-09
        • 1970-01-01
        相关资源
        最近更新 更多