webForumDet fria alternativet

Varför fel fil?

PHPur PHP

24 svar · 554 visningar · startad av Nina

Medlem sedan feb. 200358 inlägg
Frågan#1

Varför i sjutton laddar den här filen alltid ner samma fil, det är som att den inte fattar att ta ut rätt id

<?php
session_start();
if (!(isset($username) || isset($siteuser)))  // user not login, redirect to login page
{
   header("Location: ../test/members/loggin.php");
   exit;
}
else {
$dbname = 'xxxxx';    
$dbhost = 'localhost';   
$dbusername = 'xxxxx'; 
$dbpassword = 'xxxxx';    

$connection=mysql_connect($dbhost, $dbusername, $dbpassword) or die(mysql_error()); 
$dbase=mysql_select_db($dbname) or die(mysql_error()); 

$q="SELECT * from graphics where graphics_id='$id'"; 
$result= mysql_query($q, $connection) or die 
("Could not execute query : $q." . mysql_error()); 

while ($row = mysql_fetch_array($result)) 
{ 
$id=$row["graphics_id"]; 
$name=$row["graphics_name"]; 
$cat_id=$row["category_id"]; 
$designer=$row["designer"]; 
$email=$row["email"]; 
$date=$row["date"]; 
$image=$row["image"]; 
$dsc = $row["description"]; 
$viewlink=$row["viewlink"]; 
$downloadlink=$row["downloadlink"]; 
$views = $row["views"]; 
$downloads = $row["downloads"]; 

 header('Location:' .$downloadlink); 

$q="update graphics set downloads=downloads+1 where graphics_id='$id'"; 
$result2= mysql_query($q, $connection) or die 
("Could not execute query 2 : $q." . mysql_error());
}

}
?>

Tar jag däremot bort den här bioten så fungerar den utmärkt

if (!(isset($username) || isset($siteuser)))  // user not login, redirect to login page
{
   header("Location: ../test/members/loggin.php");
   exit;
}
else {

:(

Medlem sedan aug. 20002 975 inlägg
#2

Någon skillnad om du gör:

if (!(isset($username) || !isset($siteuser)))  // user not login, redirect to login page
{
   header("Location: ../test/members/loggin.php");
   exit;
}
else {
Medlem sedan feb. 200358 inlägg
#3

Det verkar fungera men det tycks även släppa förbi även icke inloggade...

Medlem sedan okt. 20001 285 inlägg
#4

if (!isset($username) || !isset($siteuser)) {
if (!isset($_POST['username']) || !isset($_POST['siteuser'])) {
if (!isset($_SESSION['username']) || !isset($_SESSION['siteuser'])) {
if (!isset($_GET['username']) || !isset($_GET['siteuser'])) {
if (!isset($_COOKIE['username']) || !isset($_COOKIE['siteuser'])) {

make a pick ... :)

Medlem sedan feb. 200358 inlägg
#5

Tackar skall testa

Medlem sedan feb. 200358 inlägg
#6

Nope tyvärr inget fungera

Medlem sedan okt. 20001 285 inlägg
#7

Är delar av koden bortagen med flit ?

<?php
session_start();
if (!isset($_SESSION['username'])){
   header("Location: ../test/members/loggin.php");
   exit;
} else {
	$dbname = 'kaptenZOOM';    
	$dbhost = 'localhost';   
	$dbusername = 'nina'; 
	$dbpassword = 'terminator';    
	$connection = @mysql_connect($dbhost, $dbusername, $dbpassword) or die("ERROR : ".mysql_error()); 
	$dbase = @mysql_select_db($dbname) or die("ERROR : ".mysql_error()); 
	$sql = "SELECT * from graphics WHERE graphics_id = '$_GET['id']'"; 
	$result = @mysql_query($sql) or die ("ERROR : ".mysql_error()); 
	while ($row = mysql_fetch_array($result))
	{ 
		$downloads = $row['downloads']; 
		$sql2 = "UPDATE graphics SET downloads=$downloads+1 WHERE graphics_id='".$row['graphics_id']."'"; 
		$result2 = @mysql_query($sql2) or die ("ERROR 2 : ".mysql_error());
	}
        header("Location: somwhere");
}
?>
Medlem sedan feb. 200358 inlägg
#8

Nä alltså det här är hela koden, kommer till den här koden efter att jag klickat på download som vidare tar mig till zip filen om jag är inloggad

<?php
session_start();
if (!(isset($username) || isset($siteuser)))  // user not login, redirect to login page
{
   header("Location: ../test/members/loggin.php");
   exit;
}
else {
$dbname = 'xxxxx';    
$dbhost = 'localhost';   
$dbusername = 'xxxxx'; 
$dbpassword = 'xxxxx';    

$connection=mysql_connect($dbhost, $dbusername, $dbpassword) or die(mysql_error()); 
$dbase=mysql_select_db($dbname) or die(mysql_error()); 

$q="SELECT * from graphics where graphics_id='$id'"; 
$result= mysql_query($q, $connection) or die 
("Could not execute query : $q." . mysql_error()); 

while ($row = mysql_fetch_array($result)) 
{ 
$id=$row["graphics_id"]; 
$name=$row["graphics_name"]; 
$cat_id=$row["category_id"]; 
$designer=$row["designer"]; 
$email=$row["email"]; 
$date=$row["date"]; 
$image=$row["image"]; 
$dsc = $row["description"]; 
$viewlink=$row["viewlink"]; 
$downloadlink=$row["downloadlink"]; 
$views = $row["views"]; 
$downloads = $row["downloads"]; 

 header('Location:' .$downloadlink); 

$q="update graphics set downloads=downloads+1 where graphics_id='$id'"; 
$result2= mysql_query($q, $connection) or die 
("Could not execute query 2 : $q." . mysql_error());
}

}
?>
Medlem sedan feb. 200358 inlägg
#9

Problemet är att den vill inte fatta vilken fil det är jag vill ladda hem utan den tar hela tiden sista filen på varje sida, om jag tar bort

if ( !isset($_SESSION['username']) ) // user not login, redirect to login page
{
   header("Location: /members/loggin.php");
   exit;
}

Då fattar den id rätt men lägger jag till den så fattar den inte det :(

Medlem sedan aug. 20002 975 inlägg
#10

Men den koden ska inte kunna påverka det.

Vad den gör är att den kollar om sessionsvariabeln finns.

Finns den inte skyfflas man iväg till /members/loggin.php, annars körs koden i skriptet.

Medlem sedan feb. 200358 inlägg
#11

Det är därför jag blir så konfunderad, eftersom koden man kommer ifrån fungerar korrekt om jag plockar bort den där delen, så fort jag lägger dit den så tar kden här koden enbart en och samma zip fil oavset vilken jag valt, tycks vara något som stör så att det blir rätt fil

Medlem sedan aug. 20002 975 inlägg
#12

För att testa lite.

Ändra

$q="SELECT * from graphics where graphics_id='$id'"; 
$result= mysql_query($q, $connection) or die 
("Could not execute query : $q." . mysql_error());

till

$q="SELECT * from graphics where graphics_id='$id'"; 
echo "SQL-frågan: <br> $q <br>";
$result= mysql_query($q, $connection) or die 
("Could not execute query : $q." . mysql_error());

Testa både med din isset och utan den.
Får du då någon skillnad i utskriften, och hur ser den ut ?

Medlem sedan feb. 200358 inlägg
#13

Får det här fel meddelandet på båda

SQL-frågan:
SELECT * from graphics where graphics_id='18'

Warning: Cannot modify header information - headers already sent by (output started at /home/mystif/public_html/graphics/download.php:13) in /home/mystif/public_html/graphics/download.php on line 33

Det visar även att graphics_id är fel, skulle ha ner id 17 och den tar id 18

Medlem sedan sep. 2001788 inlägg
#14
$q="SELECT * from graphics where graphics_id='$id'";

Var får frågan $id ifrån?
Såvitt jag förstår så blir detta värde i $id fel? I koden så ser vi inte varifrån du får detta värde.

Medlem sedan feb. 200358 inlägg
#15

Kommer från en annan sida via länken
<?php echo "<a href=\"download.php?id=$id\">Download </a>

Där allt är listade

Medlem sedan aug. 20002 975 inlägg
#16

Och vad står det för värde på $id i den länken?
Det ser i statusfältet när du för musen över, eller när du tittar i den genererade HTML-koden.

Medlem sedan feb. 200358 inlägg
#17

Det står rätt fil, alltså tex download.php?id=17 men så laddar den hem id 18 istället.
Lustiga sak

Medlem sedan aug. 20002 975 inlägg
#18

Det innebär att den byter värde av någon anledning.

När du körde koden stod det då .../download.php?id=17 i adressfältet ?

Testa med att ändra från

$q="SELECT * from graphics where graphics_id='$id'";

till

$q="SELECT * from graphics where graphics_id='{$_GET['id']}'";

och kör koden inklusive sin felsökning.
Vad får du då ?

Medlem sedan feb. 200358 inlägg
#19

Ok, ska testa. Jo det är det som är så lustigt att den byter värden så fort jag lägger in

if (!(isset($username) || !isset($siteuser))) // user not login, redirect to login page
{
header("Location: ../test/members/loggin.php");
exit;
}
else {

Medlem sedan aug. 20002 975 inlägg
#20

Vad det gäller den if-satsen så är den felaktig. Det var jag som missade en parentes i den.

Om jag minns rätt från tidigare frågor av dig, så var $username en sessionsvariabel och $siteuser en cookie.

Då skulle jag skrivit så här:

if (!isset($_SESSION['username']) || !isset($_COOKIE['siteuser']))  // user not login, redirect to login page
{
   header("Location: ../test/members/loggin.php");
   exit;
}
else {

Annars kunde någon enkelt gått förbi din inloggning genom att skriva download.php?username=vad_som_helst&siteuser=vad_som_helst

Men detta ska inte ha något som helst med dina problem att göra. Väntar med spänning på vad du får fram.

142 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)