Avatar billede webweaver Praktikant
03. november 2010 - 00:53 Der er 6 kommentarer og
2 løsninger

Funktioner i løkker

Hey guys.

Jeg sidder og bævler med noget log og browser registrering.
Jeg er simpelthen gået kold. Har stirret mig blind på problemet. Jeg synes selv det burde være forholdsvis simpelt, men jeg kan simpelthen bare ikke få det til at virke!

Jeg har lavet mig denne funktion;

function browser_check($scout=null) {
   
        $programs = array('msie', 'firefox', 'safari', 'webkit', 'opera', 'netscape', 'konqueror', 'gecko');
        $scout = strtolower($scout ? $scout : $_SERVER['HTTP_USER_AGENT']);
        $regex = '#(?<browser>' . join('|', $programs) .')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#';

        if (!preg_match_all($regex, $scout, $matches)) return array();

        $i = count($matches['browser'])-1;
        return array($matches['browser'][$i], $matches['version'][$i]);
     
    }

Den deler $_SERVER['HTTP_USER_AGENT'] op i en lidt mere brugbar information.

Dernæst har jeg en række if sætninger, som giver den endelige variabel en værdi, udfra hvad browser_check(); spytter ud.

Det virker ganske fint, hvis jeg smider det i en fil og checker min egen browser fx. Nu skal jeg bruge det i en log jeg er igang med fra en database med flere rækker, så det vil sige den skal køre igennem en ganske normal while løkke, og vurdere "situationen" for hver række.
Men kan ***** ikke få det til at funke!

Jeg henter min $_SERVER['HTTP_USER_AGENT'] ud fra databasen i while løkken. Den skal jeg bruge i funktionen. Men hvordan kan jeg få den derind? Jeg kan ikke smide min funktion i while løkken. Det giver fejl. En while løkke inde i funktionen, virker heller ikke. Og slet ikke at have det i en funktion, virker heller ikke for mig. Jeg kan sgu simpelthen ikke kringle den lige nu, så jeg håber lidt at I kan give mig et løsningsforslag. Det burde sgu ikke være helt umuligt det her!

Altså funktionen/scriptet kræver en værdi fra en while løkke, og skal samtidig eksekveres, for hver gang while løkken køres.

Hvad siger I?

På forhånd tak :-)
03. november 2010 - 05:47 #1
Det foelgende har jeg ikke testet, jeg staar og skal afsted, men det maa da vaere noget med at sende den til funktionen i en parameter.  Saasom: 

function browser_check(userAgent)
{
$scout = NULL
......
$scout = strtolower($scout ? $scout : userAgent);
...
}

$result = mysql_query("SELECT * FROM table");
while($rows = mysql_fetch_array($result)) browser_check($rows['userAgent']
Avatar billede majbom Novice
03. november 2010 - 09:11 #2
function browser_check($scout=null) {
 
        $programs = array('msie', 'firefox', 'safari', 'webkit', 'opera', 'netscape', 'konqueror', 'gecko');
        $scout = strtolower($scout ? $scout : $_SERVER['HTTP_USER_AGENT']);
        $regex = '#(?<browser>' . join('|', $programs) .')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#';

        if (!preg_match_all($regex, $scout, $matches)) return array();

        $i = count($matches['browser'])-1;
        return array($matches['browser'][$i], $matches['version'][$i]);
   
    }
...
while($rows=mysql_fetch_assoc($dit_mysql_result)){
  browser_check($rows['useragent']);
}


-> #1 - kan ikke lige se hvorfor du ændre parameteren 'scout=null' i funktionsdeklarationen?
Avatar billede webweaver Praktikant
03. november 2010 - 11:51 #3
Jeg kunne ikke helt få det til at virke med jeres løsninger, men det var da ret tæt på. Det virker ihvertfald nu.

function browser_check($scout=null) {
   
$programs = array('msie', 'firefox', 'safari', 'webkit', 'opera', 'netscape', 'konqueror', 'gecko');
$scout = strtolower($scout ? $scout : $browser);
$regex = '#(?<browser>' . join('|', $programs) .')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#';

if (!preg_match_all($regex, $scout, $matches)) return array();

$i = count($matches['browser'])-1;
return array($matches['browser'][$i], $matches['version'][$i]);
                             
}

while ($data = mysql_fetch_array($query_log)) {
                               
$number = ++$number;       
$ip = $data['ip'];
$dato = $data['dato'];
$tid = $data['tid'];
$ua = browser_check($data['browser']);
$sprog = $data['sprog'];
$url = "http://www.webweaver.dk" . $data['url'];
$color = !$color;

...

I kan begge bare smide et svar.
Det var jo stort set de løsninger I kom med :)

BTW splazz, hvordan laver du den "div" til kodningen?
Har set flere bruge det herinde. Men er ikke selv klar over hvordan. Nu vil jeg altså vide det!!? :D
Avatar billede majbom Novice
03. november 2010 - 12:40 #4
mit forslag var heller ikke en præcis løsning da jeg ikke vidste hvordan du skulle bruge funktionen i din while, men blot et forslag til hvordan det kunne gøres og det forstod du ;)

du kan lære lidt om divs og div. her: http://www.eksperten.dk/guide/1325 :)
Avatar billede majbom Novice
03. november 2010 - 12:41 #5
og det skulle så have været et svar :s
03. november 2010 - 13:15 #6
Svar fra mig.
Avatar billede webweaver Praktikant
03. november 2010 - 14:44 #7
Ahh, tak for linket til guiden. Var ikke klar over der var alle de "BB" tags herinde. :-)


Det er jo smart nok når man poster kode.
Avatar billede majbom Novice
03. november 2010 - 18:52 #8
nej det er jo heller ikke til at vide når der ikke bliver reklameret med det - det ville sq osse være rart med knapper til det...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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