954,587 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Removing Filename Extension

Hi all,

I have a file download counter on my website, here , that I am playing around with.

The files are stored in a folder on my server and their filenames are used to populate a mysql database.

What I would dearly like is for the filename without it's extension to be displayed in the table on my webpage but I can't seem to figure it out.

I have tried a few methods but have not got anywhere.

I can't seem to get anything to work when I replace the $val variable in the href statement.

I would be grateful for any pointers here.

Many thanks..,

K.

<?php

// Error reporting:
error_reporting(E_ALL^E_NOTICE);

// Including the DB connection file:
require 'dlc_connect.php';

$extension='';
$files_array = array();


/* Opening the thumbnail directory and looping through all the thumbs: */

$dir_handle = @opendir($directory) or die("There is an error with your file directory!");

while ($file = readdir($dir_handle)) 
{
	/* Skipping the system files: */
	if($file{0}=='.') continue;
	
	/* end() returns the last element of the array generated by the explode() function: */
	$extension = strtolower(end(explode('.',$file)));
	
	/* Skipping the php files: */
	if($extension == 'php') continue;

	$files_array[]=$file;
}

/* Sorting the files alphabetically */
sort($files_array,SORT_STRING);

$file_downloads=array();

$result = mysql_query("SELECT * FROM download_manager");

if(mysql_num_rows($result))
while($row=mysql_fetch_assoc($result))
{
	/* 	The key of the $file_downloads array will be the name of the file,
		and will contain the number of downloads: */
		
	$file_downloads[$row['filename']]=$row['downloads'];
}

?>

<link rel="stylesheet" type="text/css" href="****.css" />
<script type="text/javascript" src="****.js"></script>
<script type="text/javascript" src="****.js"></script>

<center>
<table>
<tr>
<td>File Name</td>
<td>Downloads</td>
</tr>
 <?php 

        foreach($files_array as $key=>$val)
        {
            echo '
<tr>
<td><a href="dlc_download.php?file='.urlencode($val).'">'.$val.'</a></td> 
<td><span class="download-count">'.(int)$file_downloads[$val].'</span></td>
</tr>';
        }
    
    ?>

</table>
</center>
MadTogger
Junior Poster
113 posts since Feb 2010
Reputation Points: 20
Solved Threads: 0
 

Firstly, where is the $directory variable coming from? As for your original question, take a look at php.net/substr and php.net/strpos

ShawnCplus
Code Monkey
Team Colleague
1,583 posts since Apr 2005
Reputation Points: 526
Solved Threads: 268
 

You need the extension in the table or file handling wont work, you dont need it displayed in the download link

<?php   foreach($files_array as $key=>$val)  {            echo '<tr><td><a href="dlc_download.php?file='.urlencode($val).'">'.substr($val, 0, strlen($val -4)).'</a></td> 
<td><span class="download-count">'.(int)$file_downloads[$val].'</span></td>;
</tr>'; }  ?>
almostbob
Posting Sensei
3,149 posts since Jan 2009
Reputation Points: 571
Solved Threads: 376
 

You need the extension in the table or file handling wont work, you dont need it displayed in the download link

<?php   foreach($files_array as $key=>$val)  {            echo '<tr><td><a href="dlc_download.php?file='.urlencode($val).'">'.substr($val, 0, strlen($val -4)).'</a></td> 
<td><span class="download-count">'.(int)$file_downloads[$val].'</span></td>;
</tr>'; }  ?>

Thanks almostbob, that is exactly what I was after I just couldn't get my head round it.

I have changed it around a little usingstrpos as you can see below, this should work fine as long as I keep '.' out of the filenames.

Thank you so much for your help..,

K

<?php 

        foreach($files_array as $key=>$val)
        {
            echo '
<tr>
<td><a href="http://www.madtogger.co.uk/dlc_download.php?file='.urlencode($val).'">'.substr($val, 0, strpos($val, '.')).'</a></td> 
<td><span class="download-count">'.(int)$file_downloads[$val].'</span></td>
</tr>';
        }
    
    ?>
MadTogger
Junior Poster
113 posts since Feb 2010
Reputation Points: 20
Solved Threads: 0
 
Firstly, where is the $directory variable coming from? As for your original question, take a look at php.net/substr and php.net/strpos

Thanks for replying ShawnCplus, the $directory variable is called from another php file.

Thanks to your help pointing me tostrpos & the help from almostbob, I have it sorted now.

Great stuff..,

K

MadTogger
Junior Poster
113 posts since Feb 2010
Reputation Points: 20
Solved Threads: 0
 

Hi,

it's me back again.

I have found a flaw in my Download Counter, not totally serious but really more cosmetic actually.

When a user clicks the file link to download, the file automatically downloads and the counter increases by 1 as it should. This is done via a js script using the click function and relates to when the user clicks the Table Row, tag.

js script below:-



$(document).ready(function(){
/* This code is executed after the DOM has been completely loaded */

$('tr').click(function(){

var countSpan = $('.download-count',this);
countSpan.text( parseInt(countSpan.text())+1);
});
});



Now that is all fine but the problem is that the counter will also increase by one every time the user clicks oncell2 of the row although the download will not start in this scenario and because of this the counter will return to it's previous state on page refresh.

I thought a way around this was to call the click funtion from the tag, which does work for downloading the file but the counter will not automatically increase until the page is refreshed.

Really what I am trying to do is isolate the download link so only clicking this will increase the counter and make it so no action takes place when the user clicks cell2.

Hope this makes sense.

Regards..,

K

MadTogger
Junior Poster
113 posts since Feb 2010
Reputation Points: 20
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You