1

Beginner in PHP

Below is my code for retrieving files from a folder, but it is showing me the error

Undefined variable: files 

Why i am getting this error.

It is an image gallery. Gallery folder does not have any image till now.

<?php
    if($theRugz<>''){
        /* settings */
        $image_dir = 'gallery/'.$theRugz.'/';
        $per_column = 5;
        $count = 0;

        if($theRugz=='11'){$rugType='Tufted';}else
        if($theRugz=='12'){$rugType='Loom Knotted';}else
        if($theRugz=='13'){$rugType='Indo Nepali';}else
        if($theRugz=='14'){$rugType='Shaggy Carpets';}else
        if($theRugz=='15'){$rugType='Cotton Kellims';}else
        if($theRugz=='16'){$rugType='Hemp and Soumak';}else
        if($theRugz=='17'){$rugType='Kellims Dhurries';}else
        if($theRugz=='18'){$rugType='Cotton Rugs';}else
        if($theRugz=='19'){$rugType='Bathmats';}else
        if($theRugz=='21'){$rugType='Chindi Rugs';}else
        if($theRugz=='22'){$rugType='Hand Knotted';}        

        if($_SESSION['SESS_CLIENT']==1){
            /* Files for all */
            /* step one:  read directory, make array of files */
            if ($handle = opendir($image_dir)) {
                while (false !== ($file = readdir($handle))) 
                {
                    if ($file != '.' && $file != '..') 
                    {
                        if(strstr($file,'-thumb') or strstr($file,'-tuhmb'))
                        {
                            $files[] = $file;
                        }
                    }
                }
                closedir($handle);
            }
            /* Step One End */
            /* step two: loop through, format gallery */
            if(count($files))
            {
                echo '<p class="head1">Range of '.$rugType.' (click on thumbnail to enlarge)</p>';
                foreach($files as $file)
                {
                    $count++;
                    if(strstr($file,'-tuhmb')){
                    echo '<a class="photo-link" rel="one-big-group" href="',$image_dir,str_replace('-tuhmb','',$file),'"><img src="',$image_dir,$file,'" width="183" height="130" alt="'.str_replace('-tuhmb.jpg','',$file).'" title="'.str_replace('-tuhmb.jpg','',$file).'" class="img-thumb" /></a>'.PHP_EOL;
                    }else{
                    echo '<a class="photo-link" rel="one-big-group" href="',$image_dir,str_replace('-thumb','',$file),'"><img src="',$image_dir,$file,'" width="183" height="130" alt="'.str_replace('-thumb.jpg','',$file).'" title="'.str_replace('-thumb.jpg','',$file).'" class="img-thumb" /></a>'.PHP_EOL;
                    }
                    if($count % $per_column == 0) { echo '<div class="clear"></div>'; }
                }
            }
            else
            {
                echo '<p>There are no images in this gallery.</p>';
            }
            /* Step two End */
        }else{
            /* Files for all */
            /* step one:  read directory, make array of files */
            if ($handle = opendir($image_dir)) {
                while (false !== ($file = readdir($handle))) 
                {
                    if ($file != '.' && $file != '..') 
                    {
                        if(strstr($file,'-thumb'))
                        {
                            $files[] = $file;
                        }
                    }
                }
                closedir($handle);
            }
            /* Step One End */
            /* step two: loop through, format gallery */
            if(count($files))
            {
                echo '<p class="head1">Range of '.$rugType.' (click on thumbnail to enlarge)</p>';
                foreach($files as $file)
                {
                    $count++;
                    echo '<a class="photo-link" rel="one-big-group" href="',$image_dir,str_replace('-thumb','',$file),'"><img src="',$image_dir,$file,'" width="183" height="130" alt="'.str_replace('-thumb.jpg','',$file).'" title="'.str_replace('-thumb.jpg','',$file).'" class="img-thumb" /></a>'.PHP_EOL;
                    if($count % $per_column == 0) { echo '<div class="clear"></div>'; }
                }
            }
            else
            {
                echo '<p>There are no images in this gallery.</p>';
            }
            /* Step two End */
        }
    }

    ?>
4
  • if this is full code then you have not defined $theRugz variable Commented Apr 17, 2015 at 8:36
  • just on the top of the code add $files = array(); Commented Apr 17, 2015 at 8:37
  • 1
    What is the line number where the error is occurring? Define $files with $files=array() Commented Apr 17, 2015 at 8:38
  • The error means at some point your $files does not exist. It would help to know the line. You can use the code supplied above but it will probably not solve your issue. The problem could be related to using the wrong path to the folder or using a folder that is empty. Commented Apr 17, 2015 at 8:41

2 Answers 2

1

$files is undefined means that you use a variable that you didn't defined (obviously).

By looking briefly at your code I can see that the variable files is being used inside a loop $files[] = $file;. You should ask yourself, why is this variable is undefined?

The answer is pretty much simple - the loop or the condition never runs. In order for the mentioned above line to get executed your code should fulfill 4 conditions (3 if and a while loop).

if ($handle = opendir($image_dir)) {
                while (false !== ($file = readdir($handle))) 
                {
                    if ($file != '.' && $file != '..') 
                    {
                        if(strstr($file,'-thumb') or strstr($file,'-tuhmb'))
                        {

Track your code and locate the condition that returns false and preventing your code from getting into the $files[] = ... line.

Anyway, declaring that variable at the beginning of the code will prevent that error from appearing. Since you're using it as an array:

$files = array();
Sign up to request clarification or add additional context in comments.

Comments

0

This will not solve the issue but will make your code easier to maintain.

Create an array for those rugtypes

$rugtType = '';
$rugTypes = array(
        '11' => 'Tufted',
        '12' => 'Loom Knotted',
        '13' => 'Indo Nepali', 
        '14' => 'Shaggy Carpets', 
        '15' => 'Cotton Kellims',
        '16' => 'Hemp and Soumak',
        '17' => 'Kellims Dhurries',
        '18' => 'Cotton Rugs',
        '19' => 'Bathmats',
        '21' => 'Chindi Rugs',
        '22' => 'Hand Knotted');

 $rugType = $rugTypes[$theRugz];

Comments

Your Answer

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