Skicka id-numret med länken.
I skriptet gör du sedan en uppräkning av räknaren, hämtar 'plats' samt skickar vidare till 'plats' med en header("Location: ").
19 svar · 830 visningar · startad av Dwarfen
Sitter här och fick för mig att få igång lite php så här på kvällskvisten.
Tänkte göra ett väldigt simpelt "system".
Tänkte lägga ut några filer på min hemsida, och vill gärna se hur många gånger varje fil har blivit nerladdad.
Jag har tänkt som såhär, varje fil läggs in i en databas (sökvägen till filen samt namnet), id skapas direkt, samt en manuel räknare.
I Databasen är alltså: Id, namn, plats samt räknaren.
OCh länken som leder till filen är:
echo ('<BR><a href="admin/ung?id=' . $array['plats'] . '" TARGET=_BLANK>a</a><BR>');
Nu är bara problemet hur jag ska göra på sidan som den hänvisas till.
Hur ska jag göra? För nu skickas ju information om vilken "fil" det är som är klickad på, hur gör jag för att addera i "räknaren"?
Skicka id-numret med länken.
I skriptet gör du sedan en uppräkning av räknaren, hämtar 'plats' samt skickar vidare till 'plats' med en header("Location: ").
Nu följer id med länken i form av:
echo ('<a href="ung.php?id=' . $array['id'] . '" TARGET=_BLANK>Filen</a> <HR>');
Hur ska jag sedan gå tillväga, det ska ju vara en addering som ska skötas själv, så INSERT INTO kan jag väl inte använda mig av?
Något i stil med:
$sql = "UPDATE tabell SET raknare = raknare + 1 WHERE Id = ".intval($_GET['id']);
mysql_query($sql);
if (mysql_affected_rows() == 0) {
echo "Filen fanns inte!";
exit;
}
$sql = "SELECT plats FROM tabell WHERE Id = ".intval($_GET['id']);
$result = mysql_query($sql);
$location = mysql_result($result, 0, 'plats');
header("Location: $location");
exit;
Vad gör: header("Location: $location");
igentligen?
Den skickar webbläsaren vidare till filen.
Innan kunde jag se sidan som tog imot id, nu blir det: sidan kan en visas.
Provade med din kod och då blev allt kaj
<?php
session_start();?>
<?php
//Ställ in användarnamn och lösenord för databasen
$username = '';
$password = '';
$dbName = '';
mysql_connect('localhost', $username, $password) or die (mysql_error());
mysql_select_db($dbName) or die (schyse());
$sql = "UPDATE filnamn SET visitor = visitor + 1 WHERE Id = ".intval($_GET['id']);
mysql_query($sql);
if (mysql_affected_rows() == 0) {
echo "Filen fanns inte!";
exit;
}
$sql = "SELECT plats FROM filnamn WHERE Id = ".intval($_GET['id']);
$result = mysql_query($sql);
$location = mysql_result($result, 0, 'plats');
header("Location: $location");
exit;
?>
Vad har du lagrat i kolumnen `plats` ?
Hur stämmer sökvägarna från detta skript till filen som ska hämtas ?
I plats har jag lagrat: d:\filnamn.
Sökvägarna ska stämma, iallafall vad jag kan se.
Problemet är nu att jag inte kan öppna "mål filen", alltså sidan med den koden som är ovan.
Inte ligger väl din fil på diskroten ?
Hur ligger filen i förhållande till skriptet ?
Ligger den överhuvudtaget så det går att nå den från webben direkt, utan att gå över detta skript ?
Den ligger inte i diskroten, skrev bara in den vägen pga slöheten...
Den ligger så den går att nå utan att gå genom scriptet.
Får du en 404 så betyder det att dina sökvägar är fel utifrån skriptet.
Det är det som är så mysko, för sökvägen är korrekt, sidan som den hänvisas till finns. Men inte när jag följer länken.
Manuel inskrivning funkar fint.
Vad står det i adressfältet på webbläsaren när du får 'sidan kan inte visas' ?
Som vanligt är den bästa lösningen - FELSÖK. print() och print_r() är till för att användas.
Vad får du ut om du ändrar detta i ditt skript? Du lägger alltså till raden med PRINT mellan 5:e och 3:e raden nerifrån i skriptet du skrev senast. Sedan kommenterar du bort 3:e raden nerifrån med //. Då skriver du ut $location, och kan alltså se vad som har gått fel.
$location = mysql_result($result, 0, 'plats');
print $location;
//header("Location: $location");
exit;
?>
Matte: http://localhost/ung.php?id=2
Så länkningen stämmr, sidan ung.php finns.
mmmMange: Provade att lägga till print $location och // header...
Detta fick sidan att vissas och fungera som det var tänkt. Mysko?
Edit:
Tillochmed räknaren fungerar som det är tänkt. Men varför blir det på detta viset för?
Det var tänkt att den skulle visa/hämta en fil, och det gör den väl inte om du avmarkerar headern ?
Vad gav din utskrift av $location ?
Hur fungerar det om du istället för header() har en länk, och klickar på denna länk:
// header("Location: $location");
echo "<a href='$location'>Till fil</a>";
Vad står det då i webbläsarens adressfält ?
Utskriften av $location gav inget mer än hänvisning till filens plats. d:\fil.exe, funkade med andra ord som jag ville.
Och gör jag som du föreslog blir det:
http://dwarfen.myftp.org/default12.php
Och d:\file kommer fortfarande inte att fungera.
Vad jag menade var, vad står det i webbläsarens fönster när du klickat på länken som genererades ? Med din beskrivning skulle det stå http://dwarfen.myftp.org/d:\fil.exe
Vad står det för länken i den genererade HTML-koden ?
Istället för att bara antyda och skriva om kan du väl visa exakt det du får fram, och vad du har.
Är omöjligt att hjälpa dig annars.
Nej, det står: http://83.248.186.146/ung.php?id=4 nu.
Och som jag skrev ovan så funkar funktionen som det var tänkt, men tack för all din hjälp.