Avatar billede impulze Nybegynder
06. december 2005 - 20:30 Der er 29 kommentarer og
1 løsning

link-counter

Vil høre om i kan se fejlen jeg har lavet siden den ikke vil hente den fil plus counteren virker?

Har to php sider, hvor den ene er til at udskrive de link man kan hente, hvor den sender videre til selve download scriptet. Hvor den også updater counteren for den link man klikker på.


download.php:
<?
if (!isset($_GET[dl])) {
include ("config.php");
mysql_connect ($host,$user,$password);
mysql_select_db($bdd);
}
else {
}
?>

<b>Download</b><br /><br />

<form method="post" action="?id=download" enctype="multipart/form-data">
<?
        $query = mysql_query("SELECT * FROM macs_link_counter ORDER BY id");
        while($row = mysql_fetch_array($query)) {


    echo "<a target=\"_blank\" href=\"?id=download_go&dl=$row[id]\">$row[navn]</a>";
}
?>
</form>



download_go.php:

<?
include ("config.php");
$link = mysql_connect ($host,$user,$password);
mysql_select_db($bdd, $link);
if (isset($_GET[dl])) {
    $query = mysql_query("SELECT * FROM macs_link_counter WHERE id='$id'");
    $row = mysql_fetch_object($query);
    $number = mysql_num_rows($query);
    if (!isset($clic[$id]) && $number) {
        SetCookie("clic[".$id."]","1",time()+3600*24);
        mysql_query("UPDATE macs_link_counter SET counter= counter + 1 WHERE id='$id'");
    }
    mysql_free_result($query);
    header("Location: ".$row->url);
}
?>
Avatar billede jakobdo Ekspert
06. december 2005 - 20:52 #1
Prøv at tilføj:
) or die(mysql_error()); på dine 2 mysql_query'er!
Avatar billede nielle Nybegynder
06. december 2005 - 20:56 #2
Der er et par ting ved din kode som virker lidt mystisk ;^)

1) I toppen har du en:

...
}
else {
}

Hvorfor det? Hvis der ikke skal ske noget i else-grenen er der ingen grund til at have den.

2) Jeg gætter på at der *skal* være noget i den; Du kommer jo kun ind i den hvis isset($_GET[dl]) er sand - altså hvis dl har en værdi. Der skal vel gøres et eller andet når dette er tilfældet?

3) Du har en form på download.php siden. Denne bliver bare ikke brugt til noget som helst eftersom at det er links man klikker på - der submittes ikke. Formen kan altså fjernes helt uden at det gør nogen forskel.

4) Der er ikke noget sted hvor din download_go.php bliver kaldt. Dermed bliver din counter heller ikke talt op.
Avatar billede jakobdo Ekspert
06. december 2005 - 21:05 #3
Godt spottet!
Han linker til egen side.
Måske hvis link blev lavet til:
echo "<a target=\"_blank\" href=\"download_go&dl=$row[id]\">$row[navn]</a>";
Avatar billede nielle Nybegynder
06. december 2005 - 21:22 #4
I givet fald skal der nok lige en php-extension på, samt en rettelse af '&' til '?':

echo "<a target=\"_blank\" href=\"download_go.php?dl=$row[id]\">$row[navn]</a>";
Avatar billede impulze Nybegynder
07. december 2005 - 00:08 #5
hmm har taget det til mig og kigget på det. Nu ser de to filer sådan ud:

Hvor man kan se de link til filen:
<b>Download</b><br /><br />
<?    include ("config1.php");
        $query = mysql_query("SELECT * FROM macs_link_counter ORDER BY id");
        while($row = mysql_fetch_array($query)) {
echo "<a target=\"_blank\" href=\"http://impulze.dk/macs/v2/docs/downloadgo.php?=$row[id]\">$row[navn]</a>";
}
?>


Her skulle den gerne update databasen og sende videre til filen:
<?
include ("config1.php");
if (isset($id)) {
    $query = mysql_query("SELECT * FROM macs_link_counter WHERE id='$id'");
    $row = mysql_fetch_object($query);
    $number = mysql_num_rows($query);
    if (!isset($clic[$id]) && $number) {
        SetCookie("clic[".$id."]","1",time()+3600*24);
        mysql_query("UPDATE counter SET macs_link_counter= counter + 1 WHERE id='$id'");
    }
    mysql_free_result($qyery);
    header("Location: .$row->url");
}   
else { echo "Virker ikke, kan ikke hente filen"; }
?>

Hvis man klikker på den såkaldte link og der kommer et nyt vindue op, så skriver den "Virker ikke, kan ikke hente filen". Så den sender ikke videre til filen med location.

Håber det er bedre lavet nu :o)
Avatar billede jakobdo Ekspert
07. december 2005 - 09:01 #6
Hvad laver . i din header?
header("Location: .$row->url");
Skal det ikke være:
header("Location: $row->url");
eller
header("Location: ".$row->url);
Avatar billede nielle Nybegynder
07. december 2005 - 11:31 #7
Du skal også rette:

echo "<a target=\"_blank\" href=\"http://impulze.dk/macs/v2/docs/downloadgo.php?=$row[id]\">$row[navn]</a>";

- til:

echo "<a target=\"_blank\" href=\"http://impulze.dk/macs/v2/docs/downloadgo.php?id=$row[id]\">$row[navn]</a>";

Samt:

if (isset($id)) {

- til:

if (isset($_GET["id"])) {
Avatar billede impulze Nybegynder
11. december 2005 - 01:26 #8
Den skriver "Forbidden, You don't have permission to access /macs/v2/docs/ on this server."
Avatar billede nielle Nybegynder
11. december 2005 - 09:26 #9
Hvad er det der skulle ligge i /macs/v2/docs/ ? Det fremgår ikke af koden, at den forsøger at bruge noget derfra. Har det noget at gøre med den tabel du ønsker at opdatere: macs_link_counter ?
Avatar billede impulze Nybegynder
12. december 2005 - 18:51 #10
i databasen er der en link, som den henter ned da den passer sammen med id.
Sådan ser den ud:
CREATE TABLE `macs_link_counter` (
  `id` int(11) NOT NULL auto_increment,
  `counter` int(11) NOT NULL default '0',
  `url` varchar(150) NOT NULL default '',
  `navn` tinytext NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

Og linken som står inde i "url":
http://impulze.dk/macs/v2/docs/dl/macs-slapper-4.0-alfa-edition.rar
Avatar billede nielle Nybegynder
12. december 2005 - 21:32 #11
Hvis jeg indtaster adressen:

http://impulze.dk/macs/v2/docs/

- i min browsers adresselinje, så får jeg netop den angivne fejlbesked. Så mon ikke at problemet på en eller anden måde ligger i hvordan:

header("Location: $row->url");

- virker?

Prøv lige at rette denne linje til noget i stil med:

echo "Location: $row->url";

- og så fortæl hvad der vises i stedet for fejlbeskeden.
Avatar billede impulze Nybegynder
13. december 2005 - 00:06 #12
Den kommer op med fejlen:

Parse error: parse error, unexpected '\"' in /usr/home/customers/impulze.dk/wwwroot/www/macs/v2/docs/downloadgo.php on line 13
Avatar billede nielle Nybegynder
13. december 2005 - 06:54 #13
Det må da vist være en helt anden linje den brokker sig over. Hvordn ser din nuværende kode ud?
Avatar billede impulze Nybegynder
13. december 2005 - 07:23 #14
<?
include ("config1.php");
if (isset($_GET["id"])) {
    $query = mysql_query("SELECT * FROM macs_link_counter WHERE id='$id'");
    $row = mysql_fetch_object($query);
    $number = mysql_num_rows($query);
    if (!isset($clic[$id]) && $number) {
        SetCookie("clic[".$id."]","1",time()+3600*24);
        mysql_query("UPDATE counter SET macs_link_counter= counter + 1 WHERE id='$id'");
    }
    mysql_free_result($query);
    header "Location: $row->url";
}   
else { echo "Virker ikke, kan ikke hente filen"; }
?>
Avatar billede nielle Nybegynder
13. december 2005 - 18:36 #15
Prøv at rette:

header "Location: $row->url";

- til:

echo "Location: $row->url";
Avatar billede impulze Nybegynder
14. december 2005 - 12:52 #16
Der kommer bare til at stå "Location:"

Men er det nu rigtigt at bruge $row->url ? er det ikke på en anden måde det skal tages ned fra db?
Avatar billede nielle Nybegynder
14. december 2005 - 14:31 #17
Prøv så at ændre til:

echo "Location: " . $row->url;

Mht. dit spørgsmål: Jeg bruger ikke selv notationen "$row->url" så jeg er faktisk ikke helt klar over om den virker i dette tilfælde. Men du kan jo prøve med $row["url"] i stedet - det burde virke. :^)
Avatar billede impulze Nybegynder
15. december 2005 - 19:41 #18
Hey..

fandt ud af hvorfor den ikke gad og lavede det. Dog ja så virker selve update af counteren hehe...

Siden ser sådan ud nu:
<?
include ("config1.php");
if (isset($_GET["id"])) {
    $query = mysql_query("SELECT * FROM macs_link_counter WHERE id=$_GET[id]");
    $row = mysql_fetch_object($query);
    $number = mysql_num_rows($query);
    if (!isset($clic[$id]) && $number) {
        SetCookie("clic[".$id."]","1",time()+3600*24);
        mysql_query("UPDATE macs_link_counter SET macs_link_counter= counter + 1 WHERE id=$_GET[id]");
    }
    mysql_free_result($query);
    header("Location: $row->url");
}
else { echo "Virker ikke, kan ikke hente filen"; }
?>
Avatar billede impulze Nybegynder
20. december 2005 - 09:36 #19
Nogle der har en ide hvorfor den ikke gider at opdater et hit når man klikker på linket?
Avatar billede flim Nybegynder
20. december 2005 - 09:38 #20
mysql_query("UPDATE macs_link_counter SET macs_link_counter= counter + 1 WHERE id=$_GET[id]");

burde det ikke være:

mysql_query("UPDATE macs_link_counter SET macs_link_counter= macs_link_counter + 1 WHERE id=$_GET[id]");
Avatar billede impulze Nybegynder
20. december 2005 - 10:01 #21
Den opdater faktisk nu med denne kode:

<?
include ("config1.php");
if (isset($_GET["id"])) {
    $query = mysql_query("SELECT * FROM macs_link_counter WHERE id=$_GET[id]");
    $row = mysql_fetch_object($query);
    $counter = mysql_num_rows($query);
    if (!isset($clic[$id]) && $counter) {
        SetCookie("clic[".$id."]","1",time()+3600*24);
        mysql_query("UPDATE macs_link_counter SET counter = counter + 1 WHERE id=$_GET[id]");
    }
    mysql_free_result($query);
    header("Location: $row->url");
}
else { echo "Virker ikke, kan ikke hente filen"; }
?>

Men den sætter ikke en cookie så den ikke bliver ved med, at tælle hver gang de klikker...
Avatar billede impulze Nybegynder
20. december 2005 - 10:19 #22
Vil gætte på det er:
    if (!isset($clic[$id]) && $counter) {
        SetCookie("clic[".$id."]","1",time()+3600*24);

Da "clic" skal være counter og $id skal passe til "id=$_GET[id]"

Eller tager jeg helt fejl?
Avatar billede nielle Nybegynder
20. december 2005 - 18:20 #23
Prøv dett her:

<?
include ("config1.php");
if (isset($_GET["id"]))
{
    $id = $_GET["id"];

    $cookieName = "click_" . $id;

    $query = mysql_query("SELECT * FROM macs_link_counter WHERE id=" . $id);
    $row = mysql_fetch_object($query);
    $counter = mysql_num_rows($query);

    if (!isset($_COOKIE[$cookieName]))
    {
        setcookie($cookieName, "visited", time()+3600*24);
        mysql_query("UPDATE macs_link_counter SET counter = counter+1 WHERE id=" . $id);
    }
    mysql_free_result($query);
    header("Location: $row->url");
}
else
{
    echo "Virker ikke, kan ikke hente filen";
}
?>
Avatar billede nielle Nybegynder
02. januar 2006 - 20:58 #24
Har du fået kigget på det?
Avatar billede nielle Nybegynder
08. januar 2006 - 12:46 #25
??
Avatar billede impulze Nybegynder
27. september 2006 - 17:42 #26
Så er jeg tilbage igen, undskyld den lange ventetid..

Skriver du et svar? :)
Avatar billede nielle Nybegynder
27. september 2006 - 20:21 #27
Betyder det at du har fået det til at fungere?
Avatar billede nielle Nybegynder
07. oktober 2006 - 10:39 #28
??
Avatar billede impulze Nybegynder
12. december 2008 - 08:05 #29
nielle..
Faldt lige forbi denne tråd og kunne se du havde skrevet.. Hvis du stadig vil vide det, så var svaret ja ;)
Avatar billede nielle Nybegynder
15. december 2008 - 18:21 #30
Takker :)
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