Avatar billede bounce2002 Nybegynder
08. april 2002 - 14:21 Der er 36 kommentarer og
1 løsning

Hjælp til download statistik med mysql

Hey.
Nu har jeg så endelig fået lavet en mellem stor download sektion på min side, men problemet er, at hitsene bliver talt via utallige txt filer.
Hvad skal jeg skrive sådan nogenlunde for at få det over i en mysql database?

Direkte link til de sider det drejer sig om:
www.brideonline.dk/d_php01.php
Avatar billede bounce2002 Nybegynder
08. april 2002 - 14:22 #1
+ hastigheden er også langsom når der bruges txt filer...
Avatar billede bounce2002 Nybegynder
08. april 2002 - 14:27 #2
Hvis i har spm, så skal jeg da prøve at svare på dem :)
Avatar billede tipsen Nybegynder
08. april 2002 - 14:34 #3
Et udkast til hvordan det kunne fungere:

For hver eneste program skal du have følgende i din database:

unikt id
programnavn
programsti
antal hits

Så er ideen at du laver et link som hedder noget i retning af

download?id=$id for hver enkelt program - når man så klikker, skal der ligge følgende i download.php:

mysql_pconnect($hostname, $username, $password) or die("Unable to connect to SQL server");
mysql_select_db($database) or die("Unable to select database");

$result = mysql_query("SELECT * FROM tabel where ID = $ID;") or die("Failed to find program!");

//Lav $URL så den indeholder stien til filen - det bruger i header nedenfor!

mysql_query("UPDATE tabel SET totalhits = totalhits + 1 WHERE ID = $ID;") or die("Failed to increment downloadhits!");

header("Location: $URL");
exit;
Avatar billede bounce2002 Nybegynder
08. april 2002 - 14:38 #4
ok det prøver jeg lige. Kommer dog først med point/kommentar senere i aften, da jeg ikke har adgang til nettet ret meget længere nu.
Håber i forstår...
Avatar billede delwin Nybegynder
08. april 2002 - 14:38 #5
for at gøre det meget simpelt kunne du have en tabel der ser ca således ud

id | Program navn | filnavn | antaldownloads

så på din side linker du til filerne med <a href="hentfil.php?fid=FILENS ID">program navn</a>

og i hentfil.php skriver du noget i stil med

<?
$conn = mysql_connect("server","username","password");
mysql_select_db("database",$conn);

mysql_query("UPDATE downloads SET antaldownloads=antaldownloads+1 WHERE id=".$fid."");

$fil = mysql_fetch_row(mysql_query("SELECT filnavn WHERE id=".$fid.""));

mysql_close($conn);

header("Location: ".$row[0]);

?>
Avatar billede delwin Nybegynder
08. april 2002 - 14:39 #6
undskyld tipsen.. dit var ikke kommet frem da jeg skrev.. ;-)
Avatar billede tipsen Nybegynder
08. april 2002 - 14:40 #7
Hvis du kan bruge noget af det jeg har skrevet, er det maks 30 point værd!
Avatar billede bounce2002 Nybegynder
08. april 2002 - 14:43 #8
hvordan skal tabellerne så indstilles?
Altså om det skal være auto, varchar osv.
Avatar billede bounce2002 Nybegynder
08. april 2002 - 14:49 #9
nej jeg prøver mig sgu frem så.. Men takker for hjælpen!
Tester lige
Avatar billede tipsen Nybegynder
08. april 2002 - 15:04 #10
noget i retning af dette:

CREATE TABLE progs (
  ID int(3) unsigned DEFAULT '0' NOT NULL auto_increment,
  url varchar(100) NOT NULL,
  progname varchar(100) NOT NULL,
  progdescription varchar(255) NOT NULL,
  hits int(4) unsigned DEFAULT '0' NOT NULL,
  PRIMARY KEY (ID),
  UNIQUE ID (ID)
);
Avatar billede bounce2002 Nybegynder
08. april 2002 - 22:42 #11
lad os bare sige, at det kan jeg ikke finde ud af...
ikke noget af det faktisk..
Avatar billede tipsen Nybegynder
08. april 2002 - 23:29 #12
Prøv at finde en db-tutorial - det er meget der skal forklares... - jeg har læst 2 bøger + manualen om mysql - og der er stadig mange ting jeg ikke helt har fat på...
Avatar billede bounce2002 Nybegynder
08. april 2002 - 23:34 #13
Mon det her kan forklare lidt:

Min database hedder:
brideonlinedk
Tabellen hedder:
phphits
----------------------------------------
Tabeller jeg har oprettet:
id, url, hits
----------------------------------------
Det jeg bruger i headeren:
<?
if ($id=="1"){
$db = mysql_connect("localhost", "root", "");
mysql_select_db("brideonlinedk", $db);
mysql_query("UPDATE phphits SET hits + 1 WHERE ID = $ID;") or die("Failed to increment downloadhits!");
header("location:download/php/01/klogeord.zip");
}
?>
----------------------------------------
Det jeg har skrevet i linket:
<a href="d_php01.php?id=1">Kloge Ord</a>


Der er sikkert en fejl et eller andet sted, men jeg kan ikke se hvor?
Avatar billede bounce2002 Nybegynder
08. april 2002 - 23:36 #14
og den skriver hele tiden "Failed to increment downloadhits!"
Avatar billede tipsen Nybegynder
08. april 2002 - 23:39 #15
kommer den overhovedet ind i if-løkken!?

Jeg tror, at $id = 1 og ikke $id = "1" !!!

brug evt:

if (!empty($id)) {
Avatar billede tipsen Nybegynder
08. april 2002 - 23:40 #16
og - den sidste så jeg ikke...
Avatar billede tipsen Nybegynder
08. april 2002 - 23:41 #17
Prøv følgende opsplitning:

$sql = "UPDATE phphits SET hits + 1 WHERE id = $id";
echo $sql . "<br>";
mysql_query($sql) or die("Failed to increment downloadhits!");

Og vær opmærksom på at store og små bogstaver selvfølgelig skal være korrekte!
Avatar billede bounce2002 Nybegynder
08. april 2002 - 23:42 #18
ok. prøver lige
Avatar billede bounce2002 Nybegynder
08. april 2002 - 23:45 #19
Så skriver den:

UPDATE phphits SET hits + 1 WHERE id = 1
Failed to increment downloadhits!
Avatar billede bounce2002 Nybegynder
08. april 2002 - 23:53 #20
Men er den her linje korrekt:
UPDATE phphits SET hits + 1 WHERE id = $id

For det du skrev stod der:
UPDATE downloads SET antaldownloads=antaldownloads+1 WHERE id=".$fid."");
Avatar billede bounce2002 Nybegynder
08. april 2002 - 23:59 #21
ok. nu kom der et hit ind i databasen!
Men nu skriver den noget om en header?

UPDATE phphits SET hits=hits+1 WHERE id=1

Warning: Cannot add header information - headers already sent by (output started at c:\phpdev2\www\d_php01.php:6) in c:\phpdev2\www\d_php01.php on line 8
Avatar billede bounce2002 Nybegynder
09. april 2002 - 00:04 #22
sådan så virker det!
Hvis du gider at skrive hvordan jeg så får vist de hits som id'en har fået, så acceptere jeg dit svar :))
Avatar billede tipsen Nybegynder
09. april 2002 - 00:06 #23
ok - så skal du bare fjerne echo, tomme linier osv - der må ikke komme noget som helst output til browseren inden du bruger header()!
Avatar billede bounce2002 Nybegynder
09. april 2002 - 00:11 #24
det virker fint nu. Men jeg skal ha' vist de hits der er i tabellen på en måde.
Avatar billede bounce2002 Nybegynder
09. april 2002 - 00:18 #25
hjææælp
Avatar billede tipsen Nybegynder
09. april 2002 - 00:26 #26
du kan ikke både udskrive og derefter redirecte i samme åndedrag... - hvor vil du udskrive til!? - i det vindue som er på vej til en anden webside!?
Avatar billede tipsen Nybegynder
09. april 2002 - 00:27 #27
der hvor du har fil-listen laver du noget i retning af:

select * from phphits;
Avatar billede bounce2002 Nybegynder
09. april 2002 - 00:29 #28
Nej der hvor der står hits...
Avatar billede bounce2002 Nybegynder
09. april 2002 - 00:32 #29
select * from phphits; - Er det det eneste? Hvis nu id er 1, hvad skal der så stå sådan cirka?
Avatar billede tipsen Nybegynder
09. april 2002 - 00:34 #30
hvis du nu har lavet det pænt, har du lagt filnavn, beskrivelse, sti og antal hits i databasen og så er det nemt at lave fillisten udfra db'en!
Avatar billede bounce2002 Nybegynder
09. april 2002 - 00:36 #31
ja men det er lige hvad jeg skal skrive for at hente det ud, for det aner jeg ikke noget om
Avatar billede tipsen Nybegynder
09. april 2002 - 00:41 #32
ser din tabel ud som jeg har skrevet?
Avatar billede bounce2002 Nybegynder
09. april 2002 - 04:43 #33
Nej jeg har kun lavet en med id og hits. Alt det andet laver jeg bare i selve php filen
Avatar billede bounce2002 Nybegynder
09. april 2002 - 04:44 #34
- så det eneste den skal vise, er et tal. Altså hvor mange hits et link har fået. Nøjagtig det samme som jeg bruger nu på siden.
Avatar billede bounce2002 Nybegynder
09. april 2002 - 08:32 #35
?
Avatar billede tipsen Nybegynder
09. april 2002 - 11:18 #36
ok - så er det lidt mere besværligt... (Hvornår sover du egentlig!?)

men hver gang du skal udskrive antal hits gør du:

Lav 4 variable som indeholder hostname, username, password og database - de bruges nedenfor - gem dem evt. af vejen i en .php fil som inkluderes der hvor du skal bruge den!

Dette gøres én gang:
mysql_connect($hostname, $username, $password) or die("Unable to connect to SQL server");
mysql_select_db($database) or die("Unable to select database");

Mens dette gøres hver gang du skal udskrive et antal hits:
$result = mysql_query("SELECT hits FROM tabel where id=1") or die("Failed to select link!");
$hits = mysql_result($result, 0); 
echo hits;

og så er det bare at rette id til ved hver eneste udskrift...

Med denne opbygning har du på nuværende tidspunkt bare en masse ekstraarbejde - når du smider de resterende oplysninger ind i databasen, vil du kunne se det smarte - så kan du nøjes med 5-10 liniers kode, for at lave hele fillisten!
Avatar billede bounce2002 Nybegynder
09. april 2002 - 11:46 #37
Ok. Det prøver jeg lige at kigge på så..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester