Gå til innhold

loope gjennom POST på en smart måte


Anbefalte innlegg

God dag folkens.

 

Jeg jobber med å lage et innlogginsscript med visse permissions level hver bruker kan legge til/fjerne for å utføre ting på siden.

Disse er satt opp slik

function permissions(){
return array(){
'user_add' => 'Add user',
'user_edit' => 'Edit user'
}
}

Også videre også videre.

 

For hvert tilatelse dem har. Velger jeg å legge en rad i en tabell som kalles user_perm.

Så for å sjekke om bruker har en permission kjører jeg bare en SQL spørring feks slik.

if(mysql_num_rows("SELECT id FROM user_perm WHERE userid='$id' AND perm='$perm'")){
return true;
}
else {
return false;
}

Idèen var at alle disse skulle være checkboxer i brukerens profil, slik at man kunne enkelt checke eller unchecke om brukeren skulle ha valgt tilatelse.

 

Jeg får sammen med POST også inn brukernavn, eventuelt e-post, fornavn osv.

 

Mitt spørsmål er hvordan jeg enkelt kan foreache meg gjennom POSTen, eller loope meg gjennom på et vis alle disse permission levelene uten å skrive koden statisk?

 

Så for meg noe slikt, men det er jo bare en ide.

Kan noen hjelpe meg litt på vei kanskje, eller har en bedre løsning?

Problemet ligger i å skille ut hva som er permission POST med hva som er brukerdata.


//Hente alle "permissions"
function get_user_perm($userid){
return mysql_fetch_array(mysql_query("SELECT id FROM user_perm WHERE userid='$userid'"));
}


$perm = permissions(); 

//Hente brukerens sine eksisterende permissions
$user_perm = get_user_perm($userid); //Lagret som array.

foreach($_POST as $key => $value){

//Et eller annet for å sjekke om det er permission, eller brukerdata

*/
//Kjøre en foreach eller noe for å sjekke om det han allerede har valgt, eksisterer i $user_//perm. Om det eksisterer å skal fjernes, kjører vi en SQL spørring og sletter raden. 
//Om den ikke eksisterer, å skal legges til. Legger vi til raden. Om ingen endringer. Ingen //spørring
/*
}
Lenke til kommentar
Videoannonse
Annonse

Hva med å bare gjøre det i en spørring?

 

Se for deg følende tabeller:

 

Users:

id (integer primary key)

name (string)

 

1 - Etse

2 - stian

3 - test

 

user_perm

id (integer primary key)

user_id (integer foreign key)

perm string (kan også være int, men for lebarhet i eksempel er den string)

 

1 - 1 - add

2 - 1 - edit

3 - 1 - delete

4 - 2 - add

5 - 2 - edit

 

Posts:

id (integer primary key)

text (string)

 

1 - test1

2 - test2

3 - test3

 

Man kan da slette et innlegg med følense spørring (her gitt at man er logget inn som {{BRUKER_ID}} og skal slette innlegg med ID {{POST_ID}}

DELETE FROM posts
WHERE posts.id={{POST_ID}}
AND EXISTS (
    SELECT * FROM user_perm
    WHERE user_id = {{USER_ID}}
    AND perm = "delete"
);
Bakdelen med denne er jo selvfølgelig at den ikke gir noen feilmelding om du prøver å slette et innlegg uten permission - innlegget blir bare ikke slettet.
Lenke til kommentar

Ja, det ville være mulig å kjøre det i en spørring. Men problemet er hovedsaklig å skille ut data fra skjemaet jeg får. Dataene jeg får inn, vil være noe ala dette.

 

 

$_POST['navn'];

$_POST['etternavn'];

$_POST['perm_user_add']; // Alt etter perm_ er hentet fra permission arrayet.

$_POST['perm_user_edit'];

osvosv

 

jeg har for enkelthets skyld satt perm_ foran alle permisjonene for å kunne filtrere dem ut.

Jeg ønsker jo ikke at $_POST['navn'] og $_POST['etternavn']; skal være med når jeg skal slette/endre/sette inn tabeller i user_perm tabellen min.

Endret av stianiquniez
Lenke til kommentar

tror litt grunnen til at du får laber respons her er at problemet ikke kommer tydelig ffrem. Kanskje om du forklarer hva du egentlig prøver å lage, så blir det lettere å forstå. Kanskje vi kan komme med forslag til bedre design-valg som gjør det hele enklere og penere å kode i tillegg.

Lenke til kommentar

Okei, jeg skal forsøke å forklare det litt mer grundig.

 

Jeg jobber med en hjemmeside, som skal ha mange funksjoner som blandt annet nyheter, kalender osv.

 

Der skal administratorer kunne logge seg inn for å få tilgang til å endre dette.

Jeg ønsker å spesifisere hvem som skal få lov til å gjøre hva.

 

Jeg lagrer alle såkalte brukernivåer i arrayet vist på toppen av siden.

 

Planen er at via en enkel if(checkPerm('user_add')){ .. Kan jeg godkjenne at brukeren legge til en bruer feks. Jeg har skrevet en enkel funskjon som heter checkPerm som sjekker opp mot en database, om brukeren har tilgang til å gjøre dette. Dette er gjort slik idag.

//Function for checking permission of a user. 
function checkPerm($perm,$id){
        if(empty($id)){
                if(isset($_SESSION['SESS_MEMBER_ID'])){
                        $id = $_SESSION['SESS_MEMBER_ID'];
                } else {
                        return false;
                        exit;
                }
        }
        
        if(mysql_num_rows(mysql_query("SELECT id FROM user_perm WHERE userid='$id' AND perm='$perm'")) == '1'){
                return true;
        } else {
                return false;
        }

        /* Example
        *  if(checkPerm('user_add') { allowed to add user }
        */
}

Denne delen fungerer ganske greit.

Jeg velger å la brukeren administrere rettigheter via checkbokser.

Jeg skriver ut alle checkboksene via et script som er slikt.

function display_perm($i,$userid){

        //list of all permissions
        $perm = permissions();
        
        //list of users permissions. Stored in session array. 
        get_user_perm($userid);

        foreach($perm as $key => $value){

                //The user allready has this permission. The box to be checked! 
                if(array_key_exists($key,$_SESSION[$key])){
                        echo '<input type="checkbox" name="'.$key.'" value="1" checked="checked">'.$value.'';
                }

                //The user don't have this permission, box to be unchecked!
                else {
                        echo '<input type="checkbox" name="'.$i.'" value="1">'.$value.'';
                }
        }
        
        //Unset the session to be done.
}

Så langt alt vel.

Nå kommer problemet.

Når jeg skal sende inn alle disse checkboksene, til en php side som behandler disse. Så lurer jeg på hvordan jeg kan behandle dem i en løkke for å ungå å skrive et statisk script?

 

Hele tanken bak å lagre alle brukerrettigheter i et array, var at om jeg fikk behov for flere brukerrettigheter senere skulle jeg kunne gå inn i dette arrayet og bare legge til en, og ikke trenge å endre noe mer kode. Slik og bruke den nye rettigheten med en gang i en kode. Håper det kom klart fram nå hva jeg ønsker, å hva som er problemet.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...