0

Can anybody help me to display the error messages next to the input field? I tried by echoing as below but it doesn't work... All I get next to the input is the word Array. Any help is appreciated.

<?php
$out['error'][]=''; //this is what I added
function uploadFile ($file_field = null, $check_image = false, $random_name = false) {

//Config Section    
//Set file upload path
$path = 'productpic/'; //with trailing slash
//Set max file size in bytes
$max_size = 2097152;
//Set default file extension whitelist
$whitelist_ext = array('jpg','png','gif');
//Set default file type whitelist
$whitelist_type = array('image/jpeg', 'image/png','image/gif');

//The Validation
// Create an array to hold any output
$out = array('error'=>null);

if (!$file_field) {
$out['error'][] = "Please specify a valid form field name";           
}

if (!$path) {
$out['error'][] = "Please specify a valid upload path";               
}

if (count($out['error'])>0) {
return $out;
}

//Make sure that there is a file
if((!empty($_FILES[$file_field])) && ($_FILES[$file_field]['error'] == 0)) {

// Get filename
$file_info = pathinfo($_FILES[$file_field]['name']);
$name = $file_info['filename'];
$ext = $file_info['extension'];

//Check file has the right extension           
if (!in_array($ext, $whitelist_ext)) {
$out['error'][] = "Invalid file Extension";
}

//Check that the file is of the right type
if (!in_array($_FILES[$file_field]["type"], $whitelist_type)) {
$out['error'][] = "Invalid file Type";
}

//Check that the file is not too big
if ($_FILES[$file_field]["size"] > $max_size) {
$out['error'][] = "We are sorry, the image must be less than 2MB";
}

//If $check image is set as true
if ($check_image) {
if (!getimagesize($_FILES[$file_field]['tmp_name'])) {
$out['error'][] = "The file you trying to upload is not an Image, we only accept images";
}
}

//Create full filename including path
 if ($random_name) {

// Generate random filename
$tmp = str_replace(array('.',' '), array('',''), microtime());

if (!$tmp || $tmp == '') {
$out['error'][] = "File must have a name";
}     
$newname = $tmp.'.'.$ext;                                
} else {
$newname = $name.'.'.$ext;
}

//Check if file already exists on server
if (file_exists($path.$newname)) {
$out['error'][] = "The image you trying to upload already exists, please upload only once";
}

if (count($out['error'])>0) {
//The file has not correctly validated
return $out;
} 

if (move_uploaded_file($_FILES[$file_field]['tmp_name'], $path.$newname)) {
//Success

$out['filepath'] = $path;
$out['filename'] = $newname;
return $out;
} else {
$out['error'][] = "Server Error!";
}

} else {
$out['error'][] = "Please select a photo";
return $out;
}      
}
?>

<?php

if (isset($_POST['submit'])) {

$file = uploadFile('file', true, false);
if (is_array($file['error'])) {
$message = '';
foreach ($file['error'] as $msg) {
$message .= '<p>'.$msg.'</p>';    
}
} else {
$message = "File uploaded successfully";
$sub=1;
}
echo $message;
}
?>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<?php
ini_set( "display_errors", 0);
if($sub==0)
{
?>
<input name="file" type="file" size="20" /><span><?php echo $out['error'] ;?></span> //It displays here just the word Array
<input name="submit" type="submit" value="Upload" />
<?php
}
?>
</form>
0

3 Answers 3

2

Use

foreach ($out['error'] as $e) {
    echo $e;
}

instead of echo $out['error'].

You might also want to either cast it as an array, or make sure that $out is not empty before doing a foreach on it.

Sign up to request clarification or add additional context in comments.

1 Comment

Tried as you said but it still doesn't display the errors next to the input.
0

$sub never be equals to 0:

$sub=0;
if (is_array($file['error'])) {
    $message = '';
    foreach ($file['error'] as $msg) {
        $message .= '<p>'.$msg.'</p>';    
    }
} else {
    $message = "File uploaded successfully";
    $sub=1;
}

Comments

0

I solved my problem by moving the second line of php code next to input field and it works fine.. I did as below..

<input name="file" type="file" size="40" /><span><?php

if (isset($_POST['submit'])) {

$file = uploadFile('file', true, false);
if (is_array($file['error'])) {
$message = '';
foreach ($file['error'] as $msg) {
  $message .= '<span>'.$msg.'</span>';    
}
} else {
$message = "File uploaded successfully";
$sub=1;
}
echo $message;
}
?></span>

<input name="submit" type="submit" value="Upload" />

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.