Avatar billede frulilla Nybegynder
21. april 2011 - 16:11 Der er 4 kommentarer og
1 løsning

MySql og PHP

Jeg skal hente nogle oplysninger om brugeren fra databasen, som skal udskrives på siden.

I databasen har jeg

users med feltet user_groups hvor der bliver skrevet ind hvilken gruppe brugeren er tilmeldt. Der kan f.eks stå: .3.4.5 , hvis han er tilmeldt 3 grupper.

user_groups, med feltet group_id


Min kode jeg har lavet, ser sådan ud:

<?php
                                        $result = dbquery("SELECT group_id FROM ".DB_USER_GROUPS." WHERE group_id='".$userdata['user_groups']."' ");
                                        if ($userdata['user_groups'] == .3) {
                                          openside("");
                                          echo "<br /><a href='http://domæne.dk/lektioner.php?catid=3'><img src='images/layout/img1.jpg'></a>";
                                          closeside();
                                        }
                                        if ($userdata['user_groups'] == .4) {
                                          openside("");
                                          echo "<br /><a href='http://domæne.dk/lektioner.php?catid=2'><img src='images/layout/img2.jpg'></a>";
                                          closeside();
                                        }
                                        if ($userdata['user_groups'] == .5) {
                                          openside("");
                                          echo "<br /><a href='http://domæne.dk/lektioner.php?catid=5'><img src='images/layout/img3.jpg'></a>";
                                          closeside();
                                        }
                                        if ($userdata['user_groups'] == .6) {
                                          openside("");
                                          echo "<<br /><a href='http://domæne.dk/lektioner.php?catid=1'><img src='images/layout/img4.jpg'></a>";
                                          closeside();
                                        }
                                ?>



Problemet er, at den kun henter den første brugergruppe ud og viser noget på den. Hvordan fortæller jeg den, at grupper der står i feltet user_groups skal vises?
Avatar billede wanze Nybegynder
21. april 2011 - 16:39 #1
Først og fremmest er det en dårlig løsning, du burde have en tabel med brugernes gruppe. Google "database normalization".

Men hvis vi nu bare kigger på det du faktisk gør her, så spørger du om $userdata['user_groups'] er lig med .3, hvilket jo aldrig vil være tilfældet, hvis der er mere end et indslag. Som med dit eget eksempel, så er .3.4.5 jo ikke lig med .3. Det er altid en god idé at debugge, de elementer du forsøger at sammenligne. Så ville du lynhurtigt se, at du laver .3 == .3.4.5, hvis jeg da har forstået din kode korrekt.

Hvis du insisterer på at beholde din unormaliseret databasestruktur, så vil jeg foreslå dig, at du deler $userdata['user_groups'] op i et array og kontrollerer:

$user_groups = explode('.',$userdata['user_groups']);
if (in_array('2',$user_groups)) [...]

Hvis ikke det lykkedes, så bliver du nok nødt til at forklare din kode noget bedre. Du laver en query (formodentligt), hvor du tilsyneladende slet ikke brugere dataen fra ($result), og du bruger metoder som openside() og closeside() som vi ingen anelse har om, hvad foretager sig.
Avatar billede beetle Nybegynder
21. april 2011 - 17:58 #2
Det du får tilbage i din $result er ikke en række, men et sæt af rækker der matcher din query. Kig evt. på følgende eksempel.

$table = 'mytable';
$sql = "SELECT * FROM " . $table;
$result = mysql_query($sql) or die();

while ($row = mysql_fetch_row($result))
{
  print_r($row) . "\n";
}
Avatar billede frulilla Nybegynder
21. april 2011 - 18:42 #3
Tak wanze, jeg satte

                                $user_groups = explode('.',$userdata['user_groups']);
if (in_array('1',$user_groups)){


ind, og så virker det hele som det skal. det var det med array jeg havde glemt.

Smider du et svar?
Avatar billede wanze Nybegynder
21. april 2011 - 19:36 #4
Svar. Fremover vil jeg dog anbefale dig, at du benytter normalisering. Det bliver meget smartere og tillader dig at lave mere avancerede dataudtrækninger til statistik o.lign. :)
Avatar billede frulilla Nybegynder
21. april 2011 - 21:13 #5
Ja jeg er ikke så skrap til databaser, men forsøger at lære det. Nu er det ikke mig der har oprettet databasen, men ham der har siden, som er i php fusion. Så det må jeg indrette mig lidt efter.

Jeg har et problem mere, men opretter lige en anden tråd med det. Tak for hjælpen.
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
Computerworld tilbyder specialiserede kurser i database-management

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