如果表单已完整提交,此代码可以很好地制作单独的名称并将新名称放入数据库。错误是:
当我提交空表格时:
警告:第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]);
答案 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]);