filename niet weergegeven in DB en count telt terug na refresh

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Katusha maladets

katusha maladets

14/04/2015 14:23:20
Quote Anchor link
Ik gebruik een downloadcounter script op basis van een DB.
Wat gaat er fout: de filename wordt niet weergegeven in de DB.
De DB telt na iedere download wel 1 erbij.
Wat gaat er precies fout?

connect.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$db_host
        = 'localhost';
$db_user        = 'miscellaneous';
$db_pass        = 'passw';
$db_database    = 'miscellaneous';

$link = @mysqli_connect($db_host, $db_user, $db_pass, $db_database) or die ("Error " . mysqli_error($link));
mysql_set_charset('utf8');

$directory='files';
?>


download.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
require('connect.php');

if(!$_GET['file']) error('Parameter ontrbeekt!');
if($_GET['file']{0}=='.') error('Verkeerd bestand!');

if(file_exists($directory.'/'.$_GET['file']))
{

    /* Als bezoeker geen zoekmachine is, tel de downloads: */
    if(!is_bot()) // functie staat onderaan maar heb ik hier weggelaten
    mysqli_query($link,"    INSERT INTO download_manager SET filename='".mysqli_real_escape_string($_GET['file'])."'
                    ON DUPLICATE KEY UPDATE downloads=downloads+1"
);
    
    header("Location: ".$directory."/".$_GET['file']);
    exit;
}

else error("Bestand bestaat niet!");
?>


demo.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
include 'connect.php';

$files_array = array();

/* Open de "files" folder waar alle download bestanden staan: */
$dir_handle = @opendir($directory) or die("Kan folder <b>files</b> niet vinden");

while ($file = readdir($dir_handle))
{

    $files_array[]=$file;
}


/* Sorteer bestanden alfabetisch */
sort($files_array,SORT_STRING);

$file_downloads=array();

$query = "SELECT * FROM download_manager" or die("Error in the consult.." . mysqli_error($link));
$result = mysqli_query($link, $query);

if(mysqli_num_rows($result))
while($row=mysqli_fetch_assoc($result))
{

    
    /*De key van de $file_downloads array is de naam van het bestand en bevat het aantal downloads*/
    $file_downloads[$row['filename']]=$row['downloads'];
}


?>

De output, verderop in demo.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
// in array de bestanden die getoond moeten worden
    $downloadlist = array('file-a.zip', 'file-d.zip', 'file-g.zip');
        foreach($files_array as $key=>$val)
        {

        if(in_array($val, $downloadlist)) {
            echo '<li><a href="download.php?file='.urlencode($val).'">'.$val.'
                    <span class="download-count" title="Aantal Downloads">'
.(int)$file_downloads[$val].'</span> <span class="download-label">Download</span></a>
                    </li>'
;
        }  
        }

?>

En als laatstegebruik ik nog js voor de directe telling:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
$(document).ready(function(){
    /* uitvoeren nadat DOM ready */
        $('ul.manager a').click(function(){
        
        var countSpan = $('.download-count',this);
        countSpan.text( parseInt(countSpan.text())+1);
    });
});


Er staat nu 1 rij in de database zonder naam, maar wel met het aantal downloads; die worden correct bijgeteld. Het zou als volgt moeten zijn: 3 rijen met de filename en ieder zijn eigen downloads, te weten: file-a.zip, file-d.zip en file-g.zip

Misschien ten overvloede, maar dit is de sql guery:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
CREATE TABLE `download_manager` (
  `id` int(6) unsigned NOT NULL auto_increment,
  `filename` varchar(128) collate utf8_unicode_ci NOT NULL default '',
  `downloads` int(10) unsigned NOT NULL default '1',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `filename` (`filename`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Gewijzigd op 14/04/2015 14:40:16 door Katusha maladets
 
PHP hulp

PHP hulp

02/03/2024 06:49:49
 
- wes  -

- wes -

14/04/2015 15:20:11
Quote Anchor link
var_dump in je download.php eens je hele GET, wat staat er in GETfile?
 
Katusha maladets

katusha maladets

14/04/2015 16:19:02
Quote Anchor link
var_dump($_GET['file']); geeft NULL
Hmmm... er ontbreekt dus een parameter
Gewijzigd op 14/04/2015 16:24:08 door katusha maladets
 
- Ariën  -
Beheerder

- Ariën -

14/04/2015 16:22:26
Quote Anchor link
dan is deze niet in de URL meegegeven?
 
Katusha maladets

katusha maladets

14/04/2015 16:32:46
Quote Anchor link
Als ik hover over "file-a.zip" zie ik : /download.php?file=file-a.zip





Toevoeging op 14/04/2015 19:36:16:

vlg mij klopt de syntaxes niet van de mysqli_guery:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
mysqli_query($link, "INSERT INTO download_manager (SET filename='".mysqli_real_escape_string($_GET['file'])."'),
                    ON DUPLICATE KEY UPDATE downloads=downloads+1");


Toevoeging op 15/04/2015 14:21:06:

OPGELOST:

Dit werkt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$filename
= mysqli_real_escape_string($link,$_GET['file']);
// in combinatie met...
mysqli_query($link, "INSERT INTO download_manager (filename,downloads)
                             VALUES ('$filename',1) ON DUPLICATE KEY UPDATE downloads = downloads+ 1;"
);
?>

Dank voor meedenken
Gewijzigd op 15/04/2015 14:21:49 door katusha maladets
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.