Avatar billede weeelo Nybegynder
21. april 2006 - 16:06 Der er 12 kommentarer og
1 løsning

Problemer med if-sætning.

Ud fra dette spm (http://www.eksperten.dk/spm/704133) har jeg fået min rss-parser til at filtrere, og nu vil jeg så prøve at gemme feeds'ne i en db.

Men jeg har problemer med, at den gemmer de samme feeds flere gange. Derfor har jeg prøvet mig frem med en if-sætning, hvor den sammenligner det nye link med det fra databasen. Jeg kan dog ikke kan få til at fungere.

        if ( preg_match( "§^http://www.bt.dk/sport/intfodbold/§", $link )) {
              printf("<dt><b><a href='%s'>%s</a></b></dt>",
            trim($link),htmlspecialchars(trim($title)));
            printf("<dd>%s</dd>",htmlspecialchars(trim($description)));
        $n_url = mysql_query("SELECT id FROM rss_news WHERE url = '$link'");
            if (mysql_num_rows($n_url) > 0) { } else {
            $insert = mysql_query("INSERT INTO rss_news VALUES ('$title', '$description', '$link', 'B.T.','$published')");
            }
        }

Er der evt. nogle der kan se hvad jeg gør galt?
Avatar billede duejensen Nybegynder
21. april 2006 - 19:58 #1
Hvordan ser din tabel ud - hvis det tredie felt ikke hedder url, så er det jo ikke så underligt det ikke fungerer
Avatar billede weeelo Nybegynder
21. april 2006 - 20:00 #2
Det er det og feeds'ne bliver også tilføjet som de skal, men nogle gange bliver det samme feed tilføjet flere gange.

Jeg har endda url-feltet som unik.
Avatar billede weeelo Nybegynder
21. april 2006 - 20:02 #3
Sådan ser den ud:

CREATE TABLE `rss_news` (
  `headline` varchar(200) default NULL,
  `description` text NOT NULL,
  `url` varchar(200) default NULL,
  `site` varchar(100) NOT NULL default '',
  `date` int(16) default NULL,
  UNIQUE KEY `url` (`url`)
) TYPE=MyISAM;

Har iøvrigt set at jeg bruger id her og har rettet det:
"SELECT id FROM rss_news WHERE url = '$link'"
Avatar billede duejensen Nybegynder
21. april 2006 - 20:06 #4
Den sidste del forstod jeg ikke helt,

Har du rettet fra:
"SELECT id FROM rss_news WHERE url = '$link'"

til f.eks.
"SELECT date FROM rss_news WHERE url = '$link'" ?

for "SELECT id FROM rss_news WHERE url = '$link'" dutter vist ikke.
Avatar billede weeelo Nybegynder
21. april 2006 - 20:07 #5
Jep, det er rettet :)

Hmmm, en hurtig eksport af to "ens" rækker viser at de faktisk ikke er helt ens. Men viser at BT's feed åbenbart ændrer sig engang imellem:

INSERT INTO `rss_news` VALUES ('Arsenal vandt kneben sejr over Villarreal\n        ', 'Champions League, semifinale 1. kamp:  Arsenal-Villarreal 1-0 (1-0).\nArsenal sikrede sig en fortjent og pæn udgangsposition inden returopgøret mod Villarreali næste uge, men slaget er langtfra afgjort med den knebne sejr.\n        ', 'http://www.bt.dk/sport/intfodbold/artikel:aid=435688\n        ', 'B.T.', 1145630615);
INSERT INTO `rss_news` VALUES ('Arsenal vandt kneben sejr over Villarreal', 'Champions League, semifinale 1. kamp:  Arsenal-Villarreal 1-0 (1-0).\r\nArsenal sikrede sig en fortjent og pæn udgangsposition inden returopgøret mod Villarreali næste uge, men slaget er langtfra afgjort med den knebne sejr.\r\n        ', 'http://www.bt.dk/sport/intfodbold/artikel:aid=435688', 'B.T.', 1145561810);
Avatar billede weeelo Nybegynder
21. april 2006 - 20:10 #6
Koden ser således ud lige nu:

        if ( preg_match( "§^http://www.bt.dk/sport/intfodbold/§", $link )) {
              printf("<dt><b><a href='%s'>%s</a></b></dt>",
            trim($link),htmlspecialchars(trim($title)));
            printf("<dd>%s</dd>",htmlspecialchars(trim($description)));
        $n_url = mysql_query("SELECT url FROM rss_news WHERE url = '$link'");
            if (mysql_num_rows($n_url) > 0) { } else {
            $insert = mysql_query("INSERT INTO rss_news VALUES ('$title', '$description', '$link', 'B.T.','$published')");
            }
        }

Nogen ide til hvordan jeg undgår, at 'http://www.bt.dk/sport/intfodbold/artikel:aid=435688\n        ' og 'http://www.bt.dk/sport/intfodbold/artikel:aid=435688' bliver gemt begge to?
Avatar billede duejensen Nybegynder
21. april 2006 - 20:10 #7
Jamen, så virker det jo :)
Avatar billede weeelo Nybegynder
21. april 2006 - 20:13 #8
Ja, det gør det jo, men det løser desværre ikke mit problem.

Har du nogen ide om hvordan jeg slipper for at " \n    " bliver registreret? Eller skal jeg måske oprette et nyt spm om det og så lukke her?
Avatar billede duejensen Nybegynder
21. april 2006 - 20:25 #9
Du skal vel bare have strippet whitespace af  url-en.

Du kan enten gøre det her, men mon det ikke var bedre at gøre det allerede under parsing.

I din characterData function kan du i starten prøve at indsætte:

$data = preg_replace ("/^\s+/", "", $data);
Avatar billede duejensen Nybegynder
21. april 2006 - 20:28 #10
Ups, den var vist ikke fuldstændig, og der er jo en standard funktion til det.

$data = rtrim($data);
Avatar billede weeelo Nybegynder
21. april 2006 - 20:43 #11
Det ser ud til at fungere ganske glimrende. Smid du bare et svar og tak for hjælpen :)
Avatar billede duejensen Nybegynder
21. april 2006 - 20:47 #12
Og fordelen ved at gøre det i characterData var jo selvfølgeligt, at så fik du samtidigt fjerne white-space i slutningen af de øvrige felter,
f.eks. ved 'Arsenal vandt kneben sejr over Villarreal\n        '
Avatar billede weeelo Nybegynder
21. april 2006 - 20:47 #13
Jeps, det er super!
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