Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  10 758
Hei,

styrer fært med en script her. Har googlet og sjekket php.net, men kommer ingen vei.

Jeg har to tabeller fra en database som jeg ønsker å "krysssjekke" og skrive ut en liste.

Men det mener jeg at jeg har en tabell som inneholder flere grupper, og en tabell som inneholder en slags "binde"-tabell mellom grupper og brukere, sånn at de kan være medlem av flere grupper.

Men på profilen til bruker skal det være mulig å melde seg inn i nye grupper, og da ønsker jeg å liste opp de gruppe han IKKE er medlem av fra før.

Jeg tenkte kanskje jeg kunne gjøre dette med en løkke og bare si at skriv ut de gruppene som ikke har samme gruppeid, via en spørring. Men da kjører jo en spørring for hver gruppe han er medlem av, og lager mange tallrekker, uten at det hjelper meg. Beklager hvis jeg er litt uklar.

Det jeg så tenkte, var at jeg kanskje kan skrive ut verdiene fra tabellene og legge dem i et array, for så å sjekke de mot hverandre. "Skriv ut bare de gruppene som ikke finnes på bruker fra før".

Noen idé om hvordan jeg kan gå frem?
Lite kontroversiell
ticks's Avatar
in_array(). Trekk ut informasjonen om hvilke grupper brukeren allerede er medlem i og legg det i et array. Dermed henter du ut listen over alle grupper, går gjennom én og én og sjekker om gruppe-IDen er in_array(), returnerer den null betyr det at brukeren ikke er medlem i gruppen og dermed kan den skrives ut. Er ihvertfall én måte?

Kode

$gruppe = 5
$array = array(1,2,3,4);
if(!in_array($gruppe, $array)) {
// Personen er ikke medlem i gruppen fra før
}
Sist endret av ticks; 29. januar 2009 kl. 15:48.
Er det ikke sånn her det skal gjøres?

Kode

<?php
$gruppe = "5";
$array = array("1","2","3","4");
if(!in_array($gruppe, $array)) {
echo "$gruppe er ikke i arayet.";
}else{
echo "$gruppe er i arrayet";
}
?>
Mye bedre løsning, siden vedkommende har nødvendig data i en tabell:

Kode

<?php
if (is_array ($groups)) {
     $groups = implode (",", $groups);
}

$sql = "SELECT COUNT(*) FROM users AS u
    INNER JOIN group_users AS g ON g.user_id = u.user_id
    WHERE g.group_id IN (".quote_smart ($groups).") AND u.user_id = ".intval ($userID);
$count = mysql_fetch_result (mysql_query ($sql), 0);

if ($count > 0) {
    echo "Allerede registrert i en av gruppene/gruppen\n";
    // Abort further parsing of the script
}
Utestet, men det skal fungere. Bare gjør dette i stedet for å hente ut gruppene, og evt. andre brukerdataer som du hadde tenkt å benytte deg av for å teste akkurat dette.
Sist endret av FagSoft; 30. januar 2009 kl. 22:37.
Hei, takk for svar.

Jeg har prøvd meg litt frem, kommet frem til at denne koden fungerer fint, dvs, den klarer å skrive ut de to verdiene som ikke er lik, altså de brukeren ikke er medlem av. Den kjører ut 1,4,5. Men nå prøver jeg å kombinere dette med SQL, altså at arrayene må fylles med data fra sqlen. Dette får jeg ikke til.

Hvordan kan jeg fylle grupper med data fra "kontaktgrupper where kontaktnr = '74'" feks, og alle grupene som er laget i $grupper.

Takk for hjelp så langt.


Kode

$grupper = array("1","2","3","4","5");
$medlemav = array("2","3");
//skriver ut alle gruppene som eksisterer i arrayet gruppper
for($t = 0; $t < sizeof($grupper); ++$t)
{
	//lagrer hver enkel gruppe i et array, plusser på verdi.
    $k = $grupper[$t];
	
	//sjekker om $k eksisterer i arrayet $medlemav
if(in_array($k, $medlemav)) {
	//skriver ut om den eksiterer
}
else {
	//skriver ut om den ikke eksisterer, altså de gruppene brukeren ikke er medlem av.
	echo $k;
	echo "<br />";
}
}
Hmm.. Så du skulle altså ikke sjekke for så å blokkere, men legge til i de gruppene vedkommende ikke var medlem i allerede. Vesentlig forskjell, ergo blir det vesentlig forskjellig kode. Her er anbefalt måte å gjøre det du prøver på:

Kode

<?php

$userID = intval ($_SESSION['userID']);

// Loop through groups, make sure only numbers are given, and add to value array.
foreach ($_POST['groups'] as $id) {
    if (!intval ($id)) {
        continue;
    }

    $values .= "($userID, $id), ";
}

$values = substr ($values, 0, -2);
$res = mysql_query ("INSERT IGNORE INTO $table(userid, groupid) VALUES $values");
?>
Som du ser, så er det ingen grunn til å gjøre masse sprell for å hente ut noen verdier fra databasen, kun for å legge dem tilbake med en gang.
Sist endret av FagSoft; 1. februar 2009 kl. 16:33.
Mulig jeg var litt uklar, men brukeren skal ikke legges til i gruppene den ikke er medlem av.

Tenk deg at du er ikke på en bruker, du får der oversikt over hvilke grupper brukeren er medlem av. F.eks er han medlem av gruppe 1 og 3. Men det finnes 5 grupper, 1,2,3,4 og 5. Så når du skal legge han til en ny gruppe, så skal de gruppene som han ikke er medlem av listes opp, altså de han er medlem av skal ikke vises.

Til det fungerer, etter hva jeg kan se, den koden jeg har, men jeg sliter med å fylle arrayene med data fra databasen.
Ah, daså. Simpel sak, så lenge en kjenner til trikset.

Kode

<?php
$res = mysql_query ("SELECT groupid FROM user_group WHERE groupid NOT IN(".
    "SELECT groupid FROM user_group WHERE userid = $userID)";
?>
Den henter ut alle grupper vedkommende ikke er medlem i.
Sist endret av FagSoft; 1. februar 2009 kl. 16:43.
Se der ja, der løste alt seg..

Takk skal du ha, tror jeg gjorde dette alt for kronglete.
Takk igjen
Jepp, meget mulig det. Forsåvidt et meget godt råd du har i signaturen din, spesielt når det kommer til programering.
Sikkerhetsklarert
Sitat av FagSoft Vis innlegg
Ah, daså. Simpel sak, så lenge en kjenner til trikset.

Kode

<?php
$res = mysql_query ("SELECT groupid FROM user_group WHERE groupid NOT IN(".
    "SELECT groupid FROM user_group WHERE userid = $userID)";
?>
Den henter ut alle grupper vedkommende ikke er medlem i.
Vis hele sitatet...
Jøss den der har jeg ikke sett før.. Viste ikke at man kunne "neste" sql queries slik.

KP.