---
title: "if , else"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/192820-if-else"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "MHZ"
published: "2015-11-22T12:29:34.000Z"
updated: "2015-11-24T07:50:39.000Z"
replies: 3
views: 980
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/192820-if-else"
---

# if , else

## #1 — MHZ, 2015-11-22T12:29Z

Efter massa pill ändrar jag frågan och undrar om detta ser bra ut? Verkar fungera eller om det kan göras bättre.

Skapat kakor

```
setcookie('userKaka', $userName, false);
setcookie('passKaka', $userPass, false);
setcookie('nivaKaka', $nivaKaka, false);
```

Som skydd på min sida har jag nu

```
$user = $row['user'];
$pass = $row['pass'];

if (intval($nivaKaka > 1) AND ($userKaka = $user) AND ($passKaka = $pass)) 
{
}
else 
{
header("Location: index.php");
}
```

Jag vill kolla både namn/pass samt vilken nivå man loggar in på.

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

## #2 — metalboy, 2015-11-23T07:38Z

1\. När du anropar setcookie så sätter du expire till false. Detta värde ska vara ett heltal, vilket gör att PHP gör om false till dess motsvarande heltal, vilket är 0. 0 är dessutom default-värdet för setcookies expire-parameter, det gör att du kan skippa att skicka med ett värde där och på så sätt få ner din filstorlek, om än ytterst lite  :)

2\. Vad innehåller $userPass? Jag hoppas att det är en hash av lösenordet, så att du inte lagrar lösenordet i klartext i kakan (samma sak gäller för databasen).

3\. Eftersom du sätter expire till 0 så kommer kakan att försvinna när webbläsaren stängs. Varför använder du då kakor istället för sessioner?

4\. Slutparentesen för anropet till intval() sitter fel i din if-sats. Ändra till **intval($nivaKaka) \> 1**.

5\. Vid omdirigering med header("Location") bör du lägga in exit() efter header-anropet, detta eftersom scriptet annars fortsätter exekveras

```php
header("Location: index.php");
exit();
```

6\. I koden du visar här så är if-satsen tom, är det så på din sida också? I så fall är det bättre att ändra logiken i if-satsen så att du kan skippa else.
Antingen kan du negera hela din befintliga logik

```php
if (!(intval($nivaKaka) > 1 && $userKaka = $user && $passKaka = $pass)) {
    header("Location: index.php");
    exit();
}
```

eller så kan du "vända" på logiken

```php
if (intval($nivaKaka) <= 1 || $userKaka != $user || $passKaka != $pass) {
    header("Location: index.php");
    exit();
}
```

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

## #3 — MHZ, 2015-11-23T15:43Z

Man kan välja 'false' eller '60 dagar' med kryssruta vid inlogg så därför använder jag kakor och det är en hash på lösenordet.

När det gäller skyddet för sidor verkar detta vara det jag söker

```
if (!(intval($niva) < 2 && $userKaka = $user && $passKaka = $pass)) {
header("Location: index.php");
exit;
}
```

I klartext fungerar det att alla under nivå 2 kan se sidan och de med nivå 2 skickas till inloggningen på index.php.

Ska även de på nivå 2 kunna se sidan bilr det

```
if (!(intval($niva) < 3 && $userKaka = $user && $passKaka = $pass)) {
header("Location: index.php");
exit;
```

Har jag förstått detta rätt nu?

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

## #4 — metalboy, 2015-11-24T07:50Z

Ja det är korrekt förstått tror jag. Dock ser jag ett fel som jag missade tidigare. Ett likhetstecken är tilldelning, du vill göra en jämförelse och då är det dubbla likhetstecken som ska användas.

```php
if (!(intval($niva) < 2 && $userKaka == $user && $passKaka == $pass)) {
```

Personligen hade jag föredragit att använda den andra varianten jag skrev:

```php
if (intval($niva) > 1 || $userKaka != $user || $passKaka != $pass) {
```

då jag tycker att det är lättare att förstå den när man snabbt ögnar igenom koden, men som sagt, det är bara min personliga preferens.

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

---

Tråden på webben: https://www.webforum.nu/amne/php/192820-if-else
