将新文件名和输入分隔到数据库

时间:2018-03-11 03:41:39

标签: php html mysql sql

如果表单已完整提交,此代码可以很好地制作单独的名称并将新名称放入数据库。错误是:

当我提交空表格时:

  

警告:第38行的C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

     

警告:第38行的C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

当我提交哪个只是输入文件1有照片时(照片1移动到上传文件夹中):

  

警告:第38行的C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

     

警告:第42行C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

     

注意:未定义的偏移量:第45行的C:\ xampp \ htdocs \ cobas \ create.php中的1

     

注意:未定义的偏移量:第47行的C:\ xampp \ htdocs \ cobas \ create.php中的1

     

注意:未定义的索引:在第47行的C:\ xampp \ htdocs \ cobas \ create.php中

     

警告:第38行的C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

当我提交刚刚输入的文件2中有照片时(照片2没有移动到上传文件夹中):

  

警告:第38行的C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

     

警告:第38行的C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

     

警告:第42行C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

     

注意:未定义的偏移量:第45行的C:\ xampp \ htdocs \ cobas \ create.php中的1

     

警告:move_uploaded_file():copy()函数的第二个参数不能是第47行的C:\ xampp \ htdocs \ cobas \ create.php中的目录

     

警告:move_uploaded_file():无法移动' C:\ xampp \ tmp \ phpE539.tmp'上传/'在第47行的C:\ xampp \ htdocs \ cobas \ create.php

当我提交提交2照片时,两者都被移入上传文件夹但仍有错误:

  

警告:第38行的C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

     

警告:第42行C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

     

注意:未定义的偏移量:第45行的C:\ xampp \ htdocs \ cobas \ create.php中的1

     

注意:未定义的偏移量:第47行的C:\ xampp \ htdocs \ cobas \ create.php中的1

     

注意:未定义的索引:在第47行的C:\ xampp \ htdocs \ cobas \ create.php中

     

警告:第38行的C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

     

警告:第42行C:\ xampp \ htdocs \ cobas \ create.php中的非法偏移类型

这是我的代码:

define( 'MAX_ALLOWED_FILE_SIZE', 5 * 1024 * 1024 ); // 5Mb
define( 'UPLOAD_PATH', 'upload' );

function is_allowed_file_ext( $filename = null )
{
    $allowed_ext = array("jpg", "jpeg", "gif", "png");
    $_parts = explode( '.', $filename );
    $_ext = end( $_parts );
    $_ext = strtolower( $_ext );
    if( in_array( $_ext , $allowed_ext ) ){
        return $_ext;
    }
    return false;
}

if( !empty( $_FILES['photo'] ) ){
    foreach ($_FILES['photo']['name'] as $key[] => $filename ) {
        if( $_FILES['photo']['error'][$key] == UPLOAD_ERR_OK ){

            if( $file_ext = is_allowed_file_ext( $filename ) ){
                $new_filename[] = sprintf( '%d-%s.%s', round(microtime(true)), uniqid(), $file_ext );
                if( $_FILES['photo']['size'][$key] <= MAX_ALLOWED_FILE_SIZE ){
                    // Everything is okay now, save the file                   
                    $dest_path[0] = sprintf( '%s/%s', rtrim(UPLOAD_PATH,'/'), $new_filename[0] );
                    $dest_path[1] = sprintf( '%s/%s', rtrim(UPLOAD_PATH,'/'), $new_filename[1] );                    
                    move_uploaded_file( $_FILES['photo']['tmp_name'][$key[0]], $dest_path[0] );
                    move_uploaded_file( $_FILES['photo']['tmp_name'][$key[1]], $dest_path[1] );

                }else{
                    $photo_errors[] = 'Error: File size is larger than the allowed limit.';
                }
            }else{
                $photo_errors[] = $filename . ' is not a valid image';
            }
        }else{
            switch ( $_FILES['photo']['error'][$key] ) {
                case UPLOAD_ERR_NO_FILE:
                    $photo_errors[] = 'No file sent';
                    break;
                case UPLOAD_ERR_INI_SIZE:
                case UPLOAD_ERR_FORM_SIZE:
                    $photo_errors[] = 'Max file size exceeded!';
                    break;
                default:
                    $photo_errors[] = 'Unknown errors';
                    break;
            }
        }
    }
}else{
    $photo_errors[] = 'No photos selected';
}

$sql = "INSERT INTO employees (name, address, salary, code, photo, photo2) VALUES (?, ?, ?, ? , ?, ?)";
mysqli_stmt_bind_param($stmt, "ssssss", $param_name, $param_address, $param_salary, $asd, $new_filename[0] , $new_filename[1]);

1 个答案:

答案 0 :(得分:0)

试试这个:

foreach ($_FILES['photo']['name'] as $key => $filename ) { // keep the $key ( not $key[] )

然后:

if( $file_ext = is_allowed_file_ext( $filename ) ){
    $new_filename[$key] = sprintf( '%d-%s.%s', round(microtime(true)), uniqid(), $file_ext );
    if( $_FILES['photo']['size'][$key] <= MAX_ALLOWED_FILE_SIZE ){
    // Everything is okay now, save the file                   
    $dest_path[$key] = sprintf( '%s/%s', rtrim(UPLOAD_PATH,'/'), $new_filename[$key] );

    move_uploaded_file( $_FILES['photo']['tmp_name'][$key], $dest_path[$key] );

}

然后:

mysqli_stmt_bind_param($stmt, "ssssss", $param_name, $param_address, $param_salary, $asd, $new_filename[0], $new_filename[1]);