Avatar billede michaeltryl Seniormester
15. november 2008 - 21:25 Der er 9 kommentarer og
1 løsning

problem med !in_array

jeg har dette i toppen af en side
echo $admin_gruppe[0];
if($_SESSION['logget_ind'] != 1 || !in_array ("admin", $admin_gruppe) || !in_array("chat", $admin_gruppe))
{
echo"<br>test";
    $_SESSION['ikke_log'] = "ja";
    header("Location: $side");
}

denne udskriver:
admin
f

hvilket betyder at ordet "admin" er i arrya "$admin_gruppe"
men alligevel følger den header("Location: $side");

Den går fint for bi hvis jeg fjerner
|| !in_array("chat", $admin_gruppe), men den skal gå forbil hvis ordet "admin" eller ordet "chat" er i arrayet $admin_gruppe.
er her en dom kan fortælle hvad jeg gør galt?
Avatar billede erikjacobsen Ekspert
15. november 2008 - 22:06 #1
I hvilke tilfælde skal den udføre header("Location: $side");, og i hvilke tilfælde ikke?
Avatar billede michaeltryl Seniormester
16. november 2008 - 00:09 #2
hvis $_SESSION['logget_ind'] ikke = 1 eller
"admin" ikke er i array eller
"chat" ikke er i array
skal den udføre
  header("Location: $side");

men
hvis $_SESSION['logget_ind'] = 1 eller
"admin" er i array eller
"chat" er i array
skal den IKKE udføre
  header("Location: $side");
Avatar billede tjens Nybegynder
16. november 2008 - 00:15 #3
Det må jo betyde at "chat" ikke er i $admin_gruppe:
Når du bruger "or not" vil du kun komme forbi, når $admin_gruppe indeholder BÅDE "chat" OG "admin" samtidig.
Avatar billede tjens Nybegynder
16. november 2008 - 00:19 #4
Havde ikke set 09:13.

Jeg vil tro den sidste OR skal være AND så:

if( $_SESSION['logget_ind'] != 1 || (!in_array ("admin", $admin_gruppe) && !in_array("chat", $admin_gruppe)) )
Avatar billede erikjacobsen Ekspert
16. november 2008 - 00:24 #5
Næh, tjens. Det er nu meget simpelt, når det først bliver forklaret. Selv om forklaringen som michaeltryl giver er korrekt. Den første forklaring passer ikke til den sidste. Det her programmering kræver en klar og præcis tankegang. Har man ikke det, så må man blive grøftegraver, eller sådan noget....

Altså, det er OK hvis $_SESSION['logget_ind'] = 1 - ingen grund til redirect
Det er også OK hvis "admin" er i array, ingen redirect
Det er også OK hvis "chat" er i array, ingen redirect

Det er alle OK situationer, og een eller flere af disse kan være opfyldt, så er det OK.

Derfor så lad os skrive det som den sidste fra spørgeren:

if($_SESSION['logget_ind'] == 1 || in_array ("admin", $admin_gruppe) || in_array("chat", $admin_gruppe)) {
// ok - no redirect
} else {
  echo"<br>test";
    $_SESSION['ikke_log'] = "ja";
    header("Location: $side");
}

Og så kan man læse mere om logik på http://www.finddetselv/search?q=%22de+morgans+law%22
Avatar billede michaeltryl Seniormester
16. november 2008 - 00:59 #6
ja det virker fint.
er det fordi in_array ikke virker rigtigt med ! foran.

Tak for hjælpen
hvis du vil have point erikjacobsen så læg et svar.
Avatar billede erikjacobsen Ekspert
16. november 2008 - 08:25 #7
in_array virker fint med ! foran - men koden du skriver er noget vrøvl. I hvert fald, som tjens er inde på, er det ikke korrekt kun at anvende ||-ere. Men i stedet for at forsøge at formulere hvad der skal til for fejlsituationen, kan det være nemmere at formulere den situation, hvor alt er korrekt. Og nogle gange kan det omvendte være nemmere.
Avatar billede michaeltryl Seniormester
16. november 2008 - 12:29 #8
ok og igen tak for hjælpen.
vi du have point?
Avatar billede erikjacobsen Ekspert
16. november 2008 - 13:08 #9
Nej tak ;)
Avatar billede michaeltryl Seniormester
16. november 2008 - 13:26 #10
ok så lukker jeg her
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