Avatar billede Nojsa Juniormester
21. januar 2020 - 22:19 Der er 33 kommentarer

Redirect i en foreach løkke

Hej derude!

Prøver at få et script til at fungere hvor jeg først skal have en en løkke kørt igennem hvor en if skal registrere om en af de udskrivninger passer hvor den derefter skal tage stilling til om den skal sende mig et andet sted hen. Det skal bruges til noget gruppe indstillinger på mit website. Det jeg har lavet ser sådan ud indtil videre:

public function get_group_details($groups)
        {
            $this->db->where('parentGroup', $groups);
            $query = $this->db->get('groupDetail');
            foreach($query->result_array() as $get_group_detail)
            {
                if($get_group_detail['access'] != 1)
                {
                    redirect('dashboard');
                }
            }
        }

Jeg ved at løkken fungerer men har på fornemmelsen at den redirecter før den har taget stilling til om det er et af kravene passer? Kan det ikke passe. Hvis så håber jeg at der er en kvik derude som kan fortælle mig hvad det er jeg gør forkert? :D
Avatar billede michael_stim Ekspert
22. januar 2020 - 10:51 #1
Kör en debug på den:

  if($get_group_detail['access'] != 1)
                {
                    echo "Value from access:".  $get_group_detail['access'] ."<br>";
                    //redirect('dashboard');
                }
Avatar billede Nojsa Juniormester
22. januar 2020 - 11:55 #2
Den skriver 2. Tænker det er fordi at løkken stadigvæk kører efter at den havde fundet nummer et. Er det fordi at jeg skal "dræbe" løkken når den har fundet en sand værdi? Hvad så hvis de var omvendt i tabellen. Nummer 2 kommer først, så aktiverer if'en så og smider mig væk. Men det er jo ikke tanken da nummer 1 så kommer bagefter?

Håber det jeg skriver giver mening?
Avatar billede michael_stim Ekspert
22. januar 2020 - 11:59 #3
#2
Nä, giver ikke så meget mening? Den gör jo hvad du har sagt den skal. 1 skal jo ikke ind i loopen. Ved ikke rigtigt hvad du vil opnå.
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:02 #4
Jeg forstår godt hvad du mener og kan også se problemet (nu altså) men det er bare fordi at jeg har flere rækker i en tabel hvor der kan være 10 forskellige tal i, alt efter hvad den enkelte bruger må få adgang til. Men hvis den finder en værdi som er 1 så skal stoppe løkken og ikke gøre mere... Men hvis der kommer 9 andre først så skal den fortsætte løkken indtil den måske finder en værdi som er 1. Hvis det ikke kan lade sig gøre og løkken er færdig så skal den redirecte... Giver det mening?
Avatar billede michael_stim Ekspert
22. januar 2020 - 12:03 #5
Kan väre jeg har fattet lidt alligevel nu når jeg har läst det igen. Men forstår ikke din databaseopbygning. Du har en tabel der sätter gruppedetaljer og den tabel kan indeholde mere end en värdi? Det er nok der du skal kigge.
Avatar billede ejvindh Ekspert
22. januar 2020 - 12:05 #6
Hvis den skriver "2", er det jo rigtigt af den, at gå ind i if'en => den redirecter.

Hvis du vil finde ud af, om der har været andre værdier inden redirecten, kan du jo prøve at tilføje en debug udenfor if'en:

foreach($query->result_array() as $get_group_detail)
            {
                echo "Value from access - no redirect:".  $get_group_detail['access'] ."<br>";
                if($get_group_detail['access'] != 1)
                {
                    echo "Value from access - redirect:".  $get_group_detail['access'] ."<br>";
                    //redirect('dashboard');
                }
            }
Avatar billede michael_stim Ekspert
22. januar 2020 - 12:07 #7
#4
Så kan du vel bare köre en ORDER BY... på dit udträk, så vil den altid tage det i räkkefölge.
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:07 #8
Jeg har to tabeller i min db. En der hedder groupList som kun har to kolonner, en id og et navn.

Så har jeg en groupDetail som har tre kolonner, id en parentGroup som skal være det samme som id'et i groupList og så en access som som giver adgang til dele af websited.

ParentGroup ligger i en session og virker også efter hensigten. I mit tilfælde har jeg en parentGroup som er 6. Den har adgang til både 1 og 2 som står i access kolonnen.
Avatar billede ejvindh Ekspert
22. januar 2020 - 12:07 #9
Sorry, mit indlæg er skrevet som svar til #2 -- havde ikke set, at der i mellemtiden var kommet andre indlæg.
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:08 #10
Men hvad så hvis det ikke er i orden. Kan være at man tilføjer lidt her og der efter noget tid???
Avatar billede michael_stim Ekspert
22. januar 2020 - 12:08 #11
If 1
Gör noget
break;
else
redirect

Noget á la det.
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:09 #12
Ja okay ORDER BY har ikke nogen indvirkning på tabellen, det er rigtig...

Hvad så hvis jeg skal have nummer 7. For eksempel i en anden funktion. Altså ikke nummer 1 hvordan får jeg så løkken til at fortsætte indtil den måske finder en nummer 7?
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:11 #13
Nu kan jeg se at jeg skriver mega meget :D
Avatar billede michael_stim Ekspert
22. januar 2020 - 12:12 #14
Altså hvis du har noget for alle tal ville jeg lave det i samme funktion og så bare med en switch/case:

https://www.php.net/manual/en/control-structures.switch.php
Avatar billede michael_stim Ekspert
22. januar 2020 - 12:14 #15
Men du kan jo ikke have flere funktioner samtidigt? Jeg er forvirret.

Der må jo väre en eller anden form for hieraki?
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:14 #16
Er det ikke også muligt at lægge alle tal i et array og så sammenligne om et af tallene passer?
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:16 #17
Kan godt være at jeg er på lidt dybt vand lige nu. Er ikke så erfaren til programmering :D
Avatar billede michael_stim Ekspert
22. januar 2020 - 12:16 #18
Du har dem allerede i et array. Det er derfor du körer en foreach.
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:18 #19
Det kan også være at jeg tager foreach og if delen ind i mine controllers og finder ud af det der om den enkelte bruger må have adgang til at se det der er i de enkelte controllers/sider... Giver det mening?
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:19 #20
Ja okay :-S Er måske lidt forvirret. Det er bare typisk jeg har det i hovedet men har svært ved at få det ned på papir xD
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:22 #21
Er det egentlig overhovedet nødvendig at køre foreachløkken? Har set et eksempel på hvor man bare har et array i en if?
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:26 #22
Et eksempel jeg fandt på stackoverflow, og modificeret en smule:

$array = array(1, 2, 3, 4);

if (in_array('1', $array)) {
    echo 'Nummer et findes i array og der skal ikke ske mere';
}

Det kan vel lade sig gøre som i mit tilfælde?
Avatar billede michael_stim Ekspert
22. januar 2020 - 12:27 #23
Nä, du kan sagtens köre en in_array eller array_search.
Avatar billede michael_stim Ekspert
22. januar 2020 - 12:28 #24
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:33 #25
Kan du hjælpe mig lidt på vej så og få det array jeg i forvejen har smidt ind i if'en?

soo far ser det sådan ud:

$query = $this->db->get('groupDetail');

            $array = $query->result_array();

            //print_r($array);

            if (in_array(1, $array)) {
                echo 'Dette array indeholder tallet et';
            }
            else
            {
                echo 'Dette array indeholder ikke tallet et';

                //redirect('dashboard');
            }

Men det virker ikke efter hensigten...
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:34 #26
Det er vel også fordi at der er flere resultater i den array som bliver lavet? Det eneste den skal bruge er data fra access kolonnen?
Avatar billede michael_stim Ekspert
22. januar 2020 - 12:38 #27
Hvordan gemmer du dine tal?

in_array("1", $array) måske.
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:39 #28
Hvis jeg laver en print_r af array så udskriver den alle kolonner. Giver det ikke et problem da det kun er access kolonnen som er den relevante?
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:43 #29
Udskrift af array ser sådan her ud:

Array ( [0] => Array ( [groupDetailID] => 16 [parentGroup] => 6 [access] => 1 ) [1] => Array ( [groupDetailID] => 17 [parentGroup] => 6 [access] => 2 ) )

Men igen det er kun access som er den relevante.. Håber det giver mening?
Avatar billede michael_stim Ekspert
22. januar 2020 - 12:45 #30
Det styrer du jo i din query eller bruger denne array:
$get_group_detail['access']

Men kan ikke se nogen anledning til at spörge efter hele tabellen hver gang du laver et check.
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:47 #31
Hvordan ville du så lave det? Måske du har set nogle eksempler nogle steder? Er vidst lidt ud og svømme lige nu :p
Avatar billede michael_stim Ekspert
22. januar 2020 - 12:50 #32
Du har sikkert en "SELECT * FROM table WHERE..." men du behöver jo kun access kolonnen.

"SELECT access FROM table WHERE..."
Avatar billede Nojsa Juniormester
22. januar 2020 - 12:54 #33
Det er selfølgelig rigtig. har jo kun brug for den ene kolonne...
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

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