eevan79 Posted October 24, 2010 Share Posted October 24, 2010 I am getting following notice in code: Notice: Undefined offset: 2 in ... Notice: Undefined offset: 3 in etc.. I want to get all files from directory with pagination system. It is working, but how to remove this notice (when error_reportings is enabled). Here is code: $exts = array('w3g'); $per_page = 10; // How many files per page $files = array(); $dir = opendir($replayLocation); while( ($file = readdir($dir)) != false ) { if( !is_dir($file) && !in_array($file,array('.','..')) && in_array(substr($file,strrpos($file,'.')+1),$exts) ) { $files[] = array( 'path' => $file, 'filename' => pathinfo($file,PATHINFO_BASENAME), 'name' => pathinfo($file,PATHINFO_FILENAME) ); } } closedir($dir); $file_count = count($files); $page_count = ceil( $file_count / $per_page ); $page = ( isset($_GET['page']) && is_numeric($_GET['page']) ) ? (int) $_GET['page'] : 1; if( $page > $page_count ) { $page = $page_count; } if( $page < 1 ) { $page = 1; } $offset = ( ( $page - 1 ) * $per_page ); for( $i = $offset; $i < ( $offset + $per_page ); $i++ ) { //$files[$i]['path']; //$files[$i]['filename']; if (file_exists($replayLocation."/".$files[$i]['filename'])) { $current_file = $files[$i]['filename']; echo "<a href='./$replayLocation/$current_file'>$current_file</a><br>"; } } echo '<br><table><tr><td style="padding-right:24px;" align="right" class="pagination">'; if( $page > 1 ) { echo ' <a href="./file.php?page=1"><<</a> <a href="./file.php?page=',( $page - 1 ),'"><</a> '; } $range = 5; for( $x = ($page - $range); $x < ( ($page + $range) + 1); $x++ ) { if( $x > 0 && $x <= $page_count ) { if( $x == $page ) { echo ' [ ',$x,' ] '; } else { echo ' <a href="./file.php?page=',$x,'">',$x,'</a> '; } } } if( $page != $page_count ) { echo ' <a href="./file.php?page=',( $page + 1 ),'">></a> <a href="./file.php?page=',$page_count,'">>></a> '; } echo '</td></tr></table>'; Link to comment https://forums.phpfreaks.com/topic/216712-file-list-pagination-undefined-offset/ Share on other sites More sharing options...
BlueSkyIS Posted October 24, 2010 Share Posted October 24, 2010 I am getting following notice in code: Notice: Undefined offset: 2 in ... Notice: Undefined offset: 3 in etc.. Undefined offset: 2 in... where? You cut off the most important part of the notice, telling us where the problem occurred. Link to comment https://forums.phpfreaks.com/topic/216712-file-list-pagination-undefined-offset/#findComment-1125956 Share on other sites More sharing options...
eevan79 Posted October 24, 2010 Author Share Posted October 24, 2010 I'm sorry, but I thought it was obvious that it is in loop. It shows that it is in line 50 and 52 which is: if (file_exists($replayLocation."/".$files[$i]['filename'])) { $current_file = $files[$i]['filename']; Complete code: $exts = array('w3g'); $per_page = 10; // How many files per page $files = array(); $dir = opendir($replayLocation); while( ($file = readdir($dir)) != false ) { if( !is_dir($file) && !in_array($file,array('.','..')) && in_array(substr($file,strrpos($file,'.')+1),$exts) ) { $files[] = array( 'path' => $file, 'filename' => pathinfo($file,PATHINFO_BASENAME), 'name' => pathinfo($file,PATHINFO_FILENAME) ); } } closedir($dir); $file_count = count($files); $page_count = ceil( $file_count / $per_page ); $page = ( isset($_GET['page']) && is_numeric($_GET['page']) ) ? (int) $_GET['page'] : 1; if( $page > $page_count ) { $page = $page_count; } if( $page < 1 ) { $page = 1; } $offset = ( ( $page - 1 ) * $per_page ); for( $i = $offset; $i < ( $offset + $per_page ); $i++ ) { //$files[$i]['path']; //$files[$i]['filename']; if (file_exists($replayLocation."/".$files[$i]['filename'])) { $current_file = $files[$i]['filename']; echo "<a href='./$replayLocation/$current_file'>$current_file</a><br>"; } } echo '<br><table><tr><td style="padding-right:24px;" align="right" class="pagination">'; if( $page > 1 ) { echo ' <a href="./file.php?page=1"><<</a> <a href="./file.php?page=',( $page - 1 ),'"><</a> '; } $range = 5; for( $x = ($page - $range); $x < ( ($page + $range) + 1); $x++ ) { if( $x > 0 && $x <= $page_count ) { if( $x == $page ) { echo ' [ ',$x,' ] '; } else { echo ' <a href="./file.php?page=',$x,'">',$x,'</a> '; } } } if( $page != $page_count ) { echo ' <a href="./file.php?page=',( $page + 1 ),'">></a> <a href="./file.php?page=',$page_count,'">>></a> '; } echo '</td></tr></table>'; Errors highlighted in red. Also, I understand why this throws an error. Error occurs when there is more definition in the array, and these files donot exist (for example, when I go to the last page where it displays 3/ 10 results per page - the other 7 files were undefined). How to fix it? Link to comment https://forums.phpfreaks.com/topic/216712-file-list-pagination-undefined-offset/#findComment-1125971 Share on other sites More sharing options...
tastro Posted October 24, 2010 Share Posted October 24, 2010 i guess that when there is not enought files to fill a page you get the error. also in simple mode: if there is less then 10 files to display per page you get the error. for example if there are only 5 files insted of 10 in your database. so you have to add an if statement... if(count($files)<10){$per_page=count($files);} Link to comment https://forums.phpfreaks.com/topic/216712-file-list-pagination-undefined-offset/#findComment-1125977 Share on other sites More sharing options...
eevan79 Posted October 25, 2010 Author Share Posted October 25, 2010 I already try that, but count($files) is total files in folder. This will also create undefined offset for last page. Link to comment https://forums.phpfreaks.com/topic/216712-file-list-pagination-undefined-offset/#findComment-1126035 Share on other sites More sharing options...
eevan79 Posted October 25, 2010 Author Share Posted October 25, 2010 Ok, I solve it. First I must find records per page. And limit it if there is less than total files per page. $total_on_page = $per_page-(($page*$per_page) - $file_count); if ($total_on_page<$per_page) {$per_page = $total_on_page;} Link to comment https://forums.phpfreaks.com/topic/216712-file-list-pagination-undefined-offset/#findComment-1126038 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.