---
title: "Någon som kan hitta felet?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/161119-någon-som-kan-hitta-felet"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Guldstrand"
published: "2007-06-05T07:47:56.000Z"
updated: "2007-06-17T22:50:22.000Z"
replies: 18
views: 775
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/161119-någon-som-kan-hitta-felet"
---

# Någon som kan hitta felet?

## #1 — Guldstrand, 2007-06-05T07:47Z

Jag håller på med ett script till en liten community där alla användare ska kunna ladda upp x antal filmer.
Det fungerar bra att ladda upp och lista filmerna för alla medlemmar, men har lite strul med att radera filmer.

Får bara...

> FEL
> Ogiltigt ID.

Är tacksam ifall någon kunde kolla igenom koden.

```php
<?php 
require "include/config.php";
dbconn(false);
loggedinorreturn();

function bark($msg)
{
  stdhead();
  stdmsg("Fel", $msg);
  stdfoot();
  exit;
}

$id = 0 + $_GET["id"];

if (!is_valid_id($id))
  bark("Ogiltigt ID.");

$r = @mysql_query("SELECT * FROM users WHERE id=$id") or sqlerr();
$user = mysql_fetch_array($r) or bark("Finns ingen medlem med detta ID.");

$delete = $HTTP_GET_VARS["delete"];
if (is_valid_id($delete))
{
 $r = mysql_query("SELECT * FROM filmer WHERE id=$delete") or sqlerr(__FILE__, __LINE__);
 if (mysql_num_rows($r) == 1)
 {
  $a = mysql_fetch_assoc($r);
  if (get_user_class() >= UC_USER)
  {
   mysql_query("DELETE FROM filmer WHERE id=$delete") or sqlerr(__FILE__, __LINE__);
   if (!unlink("/home/var/www/*****/filmer/$user[username]/$a[name]"))
    stderr("Fel", "Kunde inte radera filen (filmen): <b>$a[filename]</b>. Var god kontakta ansvarig.");
  }
 }
}

stdhead("$user[username]´s Filmer");

$res = mysql_query("SELECT count(*) FROM filmer WHERE owner = $user[id]") or die(mysql_error());
$row = mysql_fetch_array($res);
$count = $row[0];
$perpage = 15;
list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, $_SERVER["PHP_SELF"] . "?out=" . $_GET["out"] . "&" );

print("<h1>$user[username]´s Filmer</h1>\n");

echo $pagertop;

$res = mysql_query("SELECT added, id, owner, name, kommentar FROM filmer WHERE owner = $user[id] ORDER BY added DESC $limit") or sqlerr(__FILE__, __LINE__);
if (mysql_num_rows($res) == 0)
print("<b>$user[username] har inte laddat upp några filmer, än.</b>\n");
else
{
$mod = get_user_class() >= UC_USER;

print("<table width=500 border=1 cellspacing=0 cellpadding=5>\n");
print("<tr><td class=colhead align=left>Datum</td><td class=colhead align=left>Tid</td><td class=colhead align=left>Screen</td>" .
($mod ? "<td class=colhead align=left>Åtgärd</td>" : "") . "</tr>\n");

while ($arr = mysql_fetch_assoc($res))
{
 $r2 = mysql_query("SELECT * FROM users WHERE id=$arr[owner]") or sqlerr();
 $a2 = mysql_fetch_assoc($r2);
    $date = substr($arr['added'], 0, strpos($arr['added'], " "));
    $time = substr($arr['added'], strpos($arr['added'], " ") + 1);
 $name = $arr["name"];
 $kommentar = $arr["kommentar"];
 $url = str_replace(" ", "%20", htmlspecialchars("/filmer/$a2[username]/$name"));
 print("<tr bgcolor=$bgcolor><td>$date</td><td>$time</td><td><a href=$url target=_blank><img src=$url border=0 width=150 alt='$kommentar' title='$kommentar'></a></td>" .
 ($mod ? "<td><a href=?delete=$arr[id]>[Radera]</a></td>" : ""). "</tr>\n");
}
print("</table>");
}

echo $pagerbottom;

end_main_frame();

stdfoot();

?>
```

Permalänk: https://www.webforum.nu/p/161119

## #2 — joser, 2007-06-05T08:33Z

Är fortfarande inget bra på php, kan inte avgöra om felet anges av php eller ditt skript. 
Tycker det saknas {} på ett par if .

Permalänk: https://www.webforum.nu/p/1987464

## #3 — @nders, 2007-06-05T08:36Z

> Tycker det saknas {} på ett par if .

Man behöver inte använda måsvingar om det som ska utföras bara är en rad / ett statement.

Permalänk: https://www.webforum.nu/p/1987467

## #4 — silfver, 2007-06-05T08:39Z

> **@nders skrev:**
>
> > Tycker det saknas {} på ett par if .
>
> Man behöver inte använda måsvingar om det som ska utföras bara är en rad / ett statement.

Den regeln trodde jag bara gällde i .net. :) Man lär sig nåt nytt... :OO

Permalänk: https://www.webforum.nu/p/1987470

## #5 — neox83, 2007-06-05T08:39Z

Hur ser is_valid_id-funktionen ut?

Permalänk: https://www.webforum.nu/p/1987471

## #6 — drew, 2007-06-05T08:42Z

innehåller $\_GET\["id"\] något värde? Det borde isf synas i adressfältet.

Hur ser funktionerna loggedinorreturn() och is_valid_id() ut?

/D

Permalänk: https://www.webforum.nu/p/1987473

## #7 — Koplik, 2007-06-05T08:43Z

Jag är inte hemma på PHP, men för att påpeka det självklara så verkar det vara detta den gnäller på:

```

$id = 0 + $_GET["id"];

if (!is_valid_id($id))
  bark("Ogiltigt ID.");
```

Testa att skriv ut $id och is_valid_id($id) och om det returnerar false, ta bort 0:an eller något?
Jag vet inte hur is_valid_id funktionen ser ut.

Permalänk: https://www.webforum.nu/p/1987474

## #8 — drew, 2007-06-05T08:43Z

> **silfver skrev:**
>
> Den regeln trodde jag bara gällde i .net. :) Man lär sig nåt nytt... :OO

Den regeln gäller dom flesta programmerings- och skriptspråk.

/D

Permalänk: https://www.webforum.nu/p/1987475

## #9 — joser, 2007-06-05T09:03Z

> **@nders skrev:**
>
> > Tycker det saknas {} på ett par if .
>
> Man behöver inte använda måsvingar om det som ska utföras bara är en rad / ett statement.

Jag lär mig lite mer varje dag.  :)

Permalänk: https://www.webforum.nu/p/1987485

## #10 — Guldstrand, 2007-06-05T16:02Z

> **drew skrev:**
>
> innehåller $\_GET\["id"\] något värde? Det borde isf synas i adressfältet.
> 
> Hur ser funktionerna loggedinorreturn() och is_valid_id() ut?
> 
> /D

Ja, $\_GET\[""id\] får rätt värde (tror jag).. länken blir <https://www.mindoman.se/minafilmer.php?delete=3> när jag försöker radera en film.

```php
function loggedinorreturn() {
    global $CURUSER;
    if (!$CURUSER) {
        header("Location: $BASEURL/login.php?returnto=" . urlencode($_SERVER["REQUEST_URI"]));
        exit();
    }
}
```

```php
function is_valid_user_class($class)
{
  return is_numeric($class) && floor($class) == $class && $class >= UC_USER && $class <= UC_SYSOP;
}

function is_valid_id($id)
{
  return is_numeric($id) && ($id > 0) && (floor($id) == $id);
}
```

..har begränsad kunskap/erfarenhet av php/mysql.   :r

Permalänk: https://www.webforum.nu/p/1987634

## #11 — drew, 2007-06-05T16:27Z

Börja med att ändra

```php
$id = 0 + $_GET["id"];
```

till

```php
$id = 0 + $_GET["delete"];
```

Variabeln du skickar med heter inte id utan delete.

Eller om id ska kunna innehålla andra värden så bör du ändra i forumläret så den sickar id=3 istället för delete=3

/D

Permalänk: https://www.webforum.nu/p/1987644

## #12 — Guldstrand, 2007-06-05T16:31Z

> **drew skrev:**
>
> Börja med att ändra
>
> ```php
> $id = 0 + $_GET["id"];
> ```
>
> till
>
> ```php
> $id = 0 + $_GET["delete"];
> ```
>
> Variabeln du skickar med heter inte id utan delete.
> 
> Eller om id ska kunna innehålla andra värden så bör du ändra i forumläret så den sickar id=3 istället för delete=3
> 
> /D

Tror inte jag kan göra det...

```php
$id = 0 + $_GET["id"];
```

..används till att känna igen RÄTT användare.

Permalänk: https://www.webforum.nu/p/1987645

## #13 — drew, 2007-06-05T16:50Z

Då innehåller inte $\_GET\["id"\] någonting. Prova ett echo $\_GET\["id"\];

/D

Permalänk: https://www.webforum.nu/p/1987649

## #14 — aasah, 2007-06-05T16:54Z

> **Guldstrand skrev:**
>
> Tror inte jag kan göra det...
>
>
> ```php
> $id = 0 + $_GET["id"];
> ```
>
> 
> ..används till att känna igen RÄTT användare.

Jo, men... om URL:n är  <https://www.mindoman.se/minafilmer.php?delete=3>  så är ju $\_GET\["id"\] inte satt!
 
Antingen ligger problemet i din action i formen som borde skicka dig till sidan:

```php
echo '<form name="..." action="www.mindoman.se/minafilmer.php?id='.$_GET["id"].' ....';
```

Eller så vill du inte hämta användarens id via formen utan från $\_COOKIE eller $\_SESSION gissningsvis...

Permalänk: https://www.webforum.nu/p/1987650

## #15 — Guldstrand, 2007-06-05T17:08Z

Har inget form element, utan bara följande...

```php
$delete = $HTTP_GET_VARS["delete"];
if (is_valid_id($delete))
{
 $r = mysql_query("SELECT * FROM filmer WHERE id=$delete") or sqlerr(__FILE__, __LINE__);
 if (mysql_num_rows($r) == 1)
 {
  $a = mysql_fetch_assoc($r);
  if (get_user_class() >= UC_USER)
  {
   mysql_query("DELETE FROM filmer WHERE id=$delete") or sqlerr(__FILE__, __LINE__);
   if (!unlink("/home/var/www/*****/filmer/$user[username]/$a[name]"))
    stderr("Fel", "Kunde inte radera filen (filmen): <b>$a[filename]</b>. Var god kontakta ansvarig.");
  }
 }
}
```

Sedan länken för att radera en film:
\<a href=?delete=$arr\[id\]\>\[Radera\]\</a\>

Permalänk: https://www.webforum.nu/p/1987653

## #16 — aasah, 2007-06-05T17:22Z

**Guldstrand** hur du än komponerar länken innehåller den inget **id** efter frågetecknet! Det enda index du kan hämta ut från $\_GET är **delete**.

\<a href=?delete=$arr\[id\]\>\[Radera\]\</a\>

Permalänk: https://www.webforum.nu/p/1987657

## #17 — Guldstrand, 2007-06-05T18:29Z

> **aasah skrev:**
>
> **Guldstrand** hur du än komponerar länken innehåller den inget **id** efter frågetecknet! Det enda index du kan hämta ut från $\_GET är **delete**.
> 
> \<a href=?delete=$arr\[id\]\>\[Radera\]\</a\>

Hmm, ok...   :q 
Hur löser jag detta då?

Börjar snurra till riktigt i skallen nu.

Permalänk: https://www.webforum.nu/p/1987673

## #18 — aasah, 2007-06-05T22:45Z

> **Guldstrand skrev:**
>
> Hmm, ok...   :q 
> Hur löser jag detta då?
> 
> Börjar snurra till riktigt i skallen nu.

Fundera över vad du **vill** få ut av länken. Om du vill att delete ska ha värdet av den fil som ska bort och id ska ha värdet av vem som vill ta bort det, får du konstruera länkar efter följande modell:

```php
echo "<a href=\"www.mindoman.se/minafilmer.php?delete=<filmid>&id=<personid>\">ta bort filmnamn</a>";
```

Men då återstår frågan var du från början hittar värdet på vem som använder skriptet? Hur kommer du till sidan från början? Har du en inloggning innan man kan ta bort? Var lagras personid:t i så fall?

Permalänk: https://www.webforum.nu/p/1987785

## #19 — Guldstrand, 2007-06-17T22:50Z

Man kommer till användarens filmer genom att gå till **minafilmer.php?id=\*id:et på användaren\***

Denna kod kontrollerar så att man är inne på rätt användares filmer.

```php
$id = 0 + $_GET["id"];

if (!is_valid_id($id))
  bark("Ogiltigt ID.");

$r = @mysql_query("SELECT * FROM users WHERE id=$id") or sqlerr();
$user = mysql_fetch_array($r) or bark("Finns ingen medlem med detta ID.");
```

Det ska bara vara användaren själv som ska kunna radera sina filmer på den sidan.

Tacksam för all hjälp.

Permalänk: https://www.webforum.nu/p/1994008

---

Tråden på webben: https://www.webforum.nu/amne/php/161119-någon-som-kan-hitta-felet
