filename niet weergegeven in DB en count telt terug na refresh
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)
1
2
3
4
5
6
7
8
9
10
11
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';
?>
$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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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!");
?>
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)
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
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'];
}
?>
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)
1
2
3
4
5
6
7
8
9
10
11
12
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>';
}
}
?>
// 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)
1
2
3
4
5
6
7
8
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);
});
});
/* 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)
1
2
3
4
5
6
7
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;
`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
var_dump in je download.php eens je hele GET, wat staat er in GETfile?
Hmmm... er ontbreekt dus een parameter
Gewijzigd op 14/04/2015 16:24:08 door katusha maladets
dan is deze niet in de URL meegegeven?
Toevoeging op 14/04/2015 19:36:16:
vlg mij klopt de syntaxes niet van de mysqli_guery:
Code (php)
1
2
2
mysqli_query($link, "INSERT INTO download_manager (SET filename='".mysqli_real_escape_string($_GET['file'])."'),
ON DUPLICATE KEY UPDATE downloads=downloads+1");
ON DUPLICATE KEY UPDATE downloads=downloads+1");
Toevoeging op 15/04/2015 14:21:06:
OPGELOST:
Dit werkt:
Code (php)
1
2
3
4
5
6
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;");
?>
$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