Zit id in array

  • Hallo


    Ik ben momenteel bezig met een nieuw projectje en stuit op een probleem.
    Ik wil controleren of een gebruiker toegang heeft tot bepaalde informatie uit mijn database. Daardoor worden de userid's opgeslagen zoals voorbeeld: 1,2,3,4,5,6,7,8,9,11, etc
    Wat ik dus wil doen is controleren of een gebruikersid toegang heeft en ofdat het zich in die string (sql-value) bevindt. Ik heb al gebprobeert met
    LIKE in mijn query te gebruiken maar dan krijgt hij met userid 1 ook de rechten van id 11.


    Kan iemand mij helpen dat dit enkel id 1 met rechten id 1 geeft en niet 11?


    Alvast bedankt!

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Ik zal het iets anders proberen uitleggen...


    Ik heb een tabel met:


    id - titel - deelnemers
    1 - test #1 - 1,2
    2 - test#2 - 11,15


    Dus dmv de query mag enkel gebruiker 1 en 2 toegang krijgen tot de titel 'test#1'.
    Bij het tweede enkel gebruiker 11 en 13 MAAR gebruiker 1 niet. Indien ik LIKE gebruik selecteert hij gebruiker 1 ook als toegang alhoewel er 11 staat.


    PS: ik kan geen BBCode tabel gebruiken...

  • Super! Hartelijk bedankt! Indien er slechts 1 variabele in staat werkt het.
    Maar als er in deelnemers '1,2' staat en ik check met IN of '1' er in staat vindt hij hem niet. Maar staat er '1' ipv '1,2' dan wel.

    Code
    $stmt = $db->prepare('SELECT * FROM pm WHERE deelnemers IN (:User) ORDER BY Id DESC');
    $stmt->execute(array(':User' => $loggedInUser->user_id));


    PS: kan ook geen code invoeren door gebruik te maken van de popup in de editor.

  • Dat zal inderdaad niet werken.


    Ik denk dat het volgende wellicht wel werkt:


    SQL
    SELECT * FROM users
    WHERE userid IN (SELECT deelnemers FROM pm WHERE pmID = ??)

    Op deze manier haal je alle users op die toegang hebben tot een specifiek pm (personal message denk ik)

  • Ik kan even niet volgen. Ik heb namelijk de table Users niet nodig in mijn query.

    Code
    $stmt = $db->prepare('SELECT * FROM pm WHERE deelnemers IN (:User) ORDER BY Id DESC');
    $stmt->execute(array(':User' => $loggedInUser->user_id));
  • Wat je dan ook zou kunnen doen is het volgende:
    In de variabele $pm zit dan een rij uit de tabel pm.

    PHP
    $deelnemers = explode(",", $pm["deelnemers"]);
    if (in_array($loggedInUser->user_id, $deelnemers) {
        //toegang
    } else {
        //geen toegang
    }


    Daarnaast had ik het volgende nog geprobeerd, maar hier krijg ik alleen resultaat als userid vooraan in deelnemers staat :S


    SQL
    SELECT * FROM pm
    WHERE *$loggedInUser->user_id* IN (deelnemers)
  • Hallo,


    Je maakt het je moeilijker dan het is doordat je een verkeerde denkwijze gebruikt. Een SQL database is voor het vinden van en opslaan van gestructureerde gegevens.


    Op het moment dat je meerdere gegevens in één row propt verlies je structuur. Je kunt beter zeggen:
    Test1 heeft een deelnemer met ID 1
    Test1 heeft een deelnemder ID 2
    In plaats van:
    Test1 heeft deelnemers met ID 1 en 2.


    Een hele goede manier om hier achter te komen is door de (verouderde) techniek van FCO-IM toe te passen. Ik werd hierdoor geforceerd via de tool (kan ik eventueel opzoeken, vereist wel een licentie) om structuur aan te brengen.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!