Avatar billede cmau Nybegynder
31. oktober 2006 - 13:40 Der er 27 kommentarer og
1 løsning

Fejl i script der finder søgeord og søgemaskinenavne

Hejsa

Jeg har bakset med det her script et stykke tid nu og endelig fået lidt til at virke.

Scriptet virker sådan at den tjekker den referende url om denne indeholder fx google. Hvis den så gør det tjekke den for et søgeord, som i googles tilfælde er q. Hvis denne findes tager den og sætter google og q' værdi ind i databasen.

Den smider bare ikke søgemaskinenes navn ind, den skriver bare 0 og det kan jeg ikke forstå.

Koden er:

<?
//echo '<meta http-equiv="content-type" content="text/html; charset=UTF-8">';
//$referer = 'http://www.google.dk/search?hl=da&q=%C3%A6%C3%B8%C3%A5&btnG=S%C3%B8g&meta=';
$searchengines = array('google' => 'q','msn' => 'q','yahoo' => 'q','altavista' => 'q','jubii' => 'query','myspace' => 'searchrequest');
//echo COUNT($os);
$referer = $_SERVER['HTTP_REFERER'];
$i = 0;
foreach ($searchengines as $searchenginename => $val) {
    if(strpos($referer, $searchenginename)) {
        //echo 'Søgemaskinen var: '.$searchenginename.'<br>';
        parse_str($referer,$out);
        foreach ($out as $query => $keyword) {
            if($i == 0) {
                if ($query == $val) {
                    $i++;
                    echo $searchenginename;
                    mysql_query("INSERT INTO wp_keywords (searchenginename,keyword) VALUES ('$searchenginename','$keyword')") or die(mysql_error());
                    //echo 'Søgeordet var: '.$keyword;
                }
            }
        }
    }
}
?>
Avatar billede erikjacobsen Ekspert
31. oktober 2006 - 14:52 #1
Hvilken type er searchenginename i din tabel?
Avatar billede cmau Nybegynder
31. oktober 2006 - 15:01 #2
Nej, hvor dum kan man være. Ja den var INT. Min fejl. Retter lige og tester frem og tilbage og ser om der er andre fejl.
Avatar billede cmau Nybegynder
31. oktober 2006 - 15:11 #3
Så ser det sgu ud til at virke, men kan koden ikke skrives simplere?
Avatar billede cmau Nybegynder
31. oktober 2006 - 16:48 #4
Hov der er en fejl..

Hvis adressen er sådan her kan den ikke finde den:
pursuit?query

Der skal være & før query.

Hvad kan jeg gøre?
Avatar billede erikjacobsen Ekspert
31. oktober 2006 - 18:23 #5
Kan det være parse_str ?
Avatar billede cmau Nybegynder
31. oktober 2006 - 21:20 #6
Ja tror jeg det kan være, men hvad kan der gøres?
Avatar billede erikjacobsen Ekspert
31. oktober 2006 - 22:27 #7
Man kan bruge den rigtigt. Når du kigger på http://php.net/parse_str kan du se at man skal bruge den på en querystring - det efter ?-et - ikke på en hel URL, som du gør med $referer.
Avatar billede cmau Nybegynder
01. november 2006 - 10:44 #8
Jamen hvordan vil du så anbefale mig at gøre det? Føler mig lidt lost nu.
Avatar billede cmau Nybegynder
01. november 2006 - 10:47 #9
Skal det så gøres således?

$referer = parse_url($_SERVER['HTTP_REFERER']);
...
if(strpos($referer[query], $searchenginename)) {
Avatar billede erikjacobsen Ekspert
01. november 2006 - 12:05 #10
Nok ikke lige det. Du skal tage det der står efter ?-et i din referer (det kan sikkert gøres på flere måder), og bruge det til parse_str
Avatar billede cmau Nybegynder
01. november 2006 - 14:08 #11
Hmm kan ikke lige se hvordan jeg så kan gøre det? Kunne du hjælpe med et eksempel.
Avatar billede erikjacobsen Ekspert
01. november 2006 - 20:42 #12
Du kan måske lave en split på ?-et. Eller bruge den indbyggede http://php.net/parse_url
Avatar billede cmau Nybegynder
01. november 2006 - 20:46 #13
parse_url er vist ikke særlig effiktiv, da den giver:

http://kdp.users.whitehat.dk/tjekref.php?url=http://www.google.dk/search?hl=da&q=fg&btnG=Google-s%C3%B8gning&meta=

Med denne kode:
<?
$ref = parse_url($_GET['url']);
echo $ref['query'];
?>
Avatar billede erikjacobsen Ekspert
01. november 2006 - 21:00 #14
Den virker da fint. Dette:

    $url = "http://www.google.dk/search?hl=da&q=fg&btnG=Google-s%C3%B8gning&meta=";
    $ref = parse_url($url);
    echo $ref['query'];

giver som det vist skal:

    hl=da&q=fg&btnG=Google-s%C3%B8gning&meta=
Avatar billede cmau Nybegynder
01. november 2006 - 21:04 #15
Nå hehe det nok fordi der kommer et & i adressen ved mig. Men får jo stadigvæk probmenet hvis jeg nu bruger parse_str fordi der ikke er & foran det første, som jeg beskrev tidligere.
Avatar billede erikjacobsen Ekspert
01. november 2006 - 21:55 #16
Jeg kan fortsat ikke se hvor problemet ligger. Har du din querystring som i mit eksempel, 21:00:28, og bruger parse_str, får du som du skal:

Array
(
    [hl] => da
    [q] => fg
    [btnG] => Google-søgning
    [meta] =>
)
Avatar billede cmau Nybegynder
02. november 2006 - 13:51 #17
- Hvis du går ind her: http://search.jubii.dk/cgi-bin/pursuit?query=woox&cat=loc
- Klikker på første resultat.
- Derefter beøsger http://www.woox.dk/keywords.php
Så ser du at den ikke har registeret søgningen.

- Hvis du der i mod laver om i adressen, så den ser således ud: http://search.jubii.dk/cgi-bin/pursuit?cat=loc&query=woox
- Går ind på en og klikker på resultatet.
- Derefter beøsger http://www.woox.dk/keywords.php
Så er den registeret.
Avatar billede cmau Nybegynder
02. november 2006 - 13:52 #18
Adressen jeg kaldte keywords var http://www.woox.dk/viewkeys.php
Avatar billede erikjacobsen Ekspert
02. november 2006 - 14:12 #19
Hvis du fortsat anvender parsestr på hele URL-en og ikke kun på den del, der udgøres af querystrengen, så vil du få det resultat du observerer. Så hvorfor ikke lave om på det?
Avatar billede cmau Nybegynder
02. november 2006 - 14:31 #20
Jeg bruger stadigvæk koden her, da jeg ikke er sikker på hvordan du vil have mig til at ændre den:

<?
$searchengines = array('google' => 'q','msn' => 'q','yahoo' => 'p','altavista' => 'q','jubii' => 'query','myspace' => 'searchrequest','eniro' => 'q');
$referer = $_SERVER['HTTP_REFERER'];
$i = 0;
foreach ($searchengines as $searchenginename => $val) {
    if(strpos($referer, $searchenginename)) {
        parse_str($referer,$out);
        foreach ($out as $query => $keyword) {
            if($i == 0) {
                if ($query == $val) {
                    $i++;
                    mysql_query("INSERT INTO wp_keywords (searchenginename,keyword) VALUES ('$searchenginename','$keyword')") or die(mysql_error());
                }
            }
        }
    }
}
?>
Avatar billede erikjacobsen Ekspert
02. november 2006 - 14:36 #21
Jeg vil ikke ændre din kode - jeg kommer bare med forslag. Du skal have querystrengen trukket ud af urlen i din referer. Jeg har kommet med to forslag.
Avatar billede cmau Nybegynder
02. november 2006 - 14:50 #22
$referer = parse_url($_SERVER['HTTP_REFERER']);
$referer = parse_str($referer['query']);

Ville det så virker optimalt?
Avatar billede erikjacobsen Ekspert
02. november 2006 - 14:57 #23
Det ser rigtigere ud, ja.
Avatar billede cmau Nybegynder
02. november 2006 - 18:29 #24
Hvis jeg udskriver dem sådan:
$referer = parse_url($_SERVER['HTTP_REFERER']);
echo $referer;
$referer = parse_str($referer['query']);
echo $referer;

Er nr. to tom.
Avatar billede cmau Nybegynder
02. november 2006 - 19:15 #25
Nu prøver jeg lidt frem og tilbage, men kan ikke finde flere fejl i den her kode:
<?
//echo '<meta http-equiv="content-type" content="text/html; charset=UTF-8">';
//$referer = 'http://www.google.dk/search?hl=da&q=%C3%A6%C3%B8%C3%A5&btnG=S%C3%B8g&meta=';
$searchengines = array('google' => 'q','msn' => 'q','yahoo' => 'p','altavista' => 'q','jubii' => 'query','myspace' => 'searchrequest','eniro' => 'q');
//echo COUNT($os);
$orgref = $_SERVER['HTTP_REFERER'];
$referer = parse_url($referer);
$referer = $referer['query'];
$i = 0;
foreach ($searchengines as $searchenginename => $val) {
    if(strpos($orgref, $searchenginename)) {
        //echo 'Søgemaskinen var: '.$searchenginename.'<br>';
        parse_str($referer,$out);
        foreach ($out as $query => $keyword) {
            if($i == 0) {
                if ($query == $val) {
                    $i++;
                    //echo $searchenginename;
                    mysql_query("INSERT INTO wp_keywords (searchenginename,keyword) VALUES ('$searchenginename','$keyword')") or die(mysql_error());
                    //echo 'Søgeordet var: '.$keyword;
                }
            }
        }
    }
}
?>
Avatar billede cmau Nybegynder
02. november 2006 - 19:19 #26
argh, nu virker det vist.
$orgref = $_SERVER['HTTP_REFERER'];
$referer = parse_url($referer);
til
$orgref = $_SERVER['HTTP_REFERER'];
$referer = parse_url($orgref);

Smider du svar?
Avatar billede erikjacobsen Ekspert
02. november 2006 - 19:24 #27
Lyder godt. Jeg samler slet ikke på point, tak.
Avatar billede cmau Nybegynder
02. november 2006 - 19:39 #28
Nå ookay, men du skal have tusind 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
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