Avatar billede Slettet bruger
11. juni 2012 - 15:13 Der er 102 kommentarer og
1 løsning

hvordan gemmer jeg et rss feed i databsen

Jeg har surfet lidt rundt på nettet og ledt efter en løsning på mit problem, jeg fandt godt nok en tråd herinde, men kunne ikke få den til at virke ordenligt.
Kan I hjælpe mig?

Hvis jeg gerne vil have et rss feed fra en anden hjemmeside sat op i min database, hva gør jeg så?

Jeg har lavet et forsøg herunder, men det virker ikke, måske er det logisk men jeg ser ikke fejlen.

<?php

require('connect.php');
require_once('magpierss-0.72/rss_fetch.inc');
$rss = fetch_rss('http://out-and-about.dk/rss_kalender.asp');
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title      = $item['title'];
    $description = $item['description'];
    $date        = $item['pubDate'];
    $link        = $item['guid'];
 
    //Vi tjekker om vi allerede har feeden i vores DB.
      echo $query = mysql_query("SELECT id FROM tabel WHERE link = '$link' LIMIT 1");
    if(mysql_num_rows($query)==0)
    {
        //Hvis ikke, så indsætter vi den...
      mysql_query("INSERT INTO tabel (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}
?>

Ovenstående er fra en anden tråd på eksperten som jeg har prøvet at koble op med min kode.
Avatar billede olebole Juniormester
11. juni 2012 - 15:44 #1
<ole>

Hvad betyder "Jeg har lavet et forsøg herunder, men det virker ikke"?

Hvis din PHP er sat fornuftigt op, får du vel en eller flere fejl eller advarsler fra PHP. Hvad siger de?

/mvh
</bole>
Avatar billede Slettet bruger
11. juni 2012 - 15:46 #2
Det betyder at Jeg har lavet et forsøg herunder, men det virker ikke!?

Der kommer ikke nogle fejl op.
ellers ville den jo evt. allerede havde varslet i kodeprogrammet.
Avatar billede olebole Juniormester
11. juni 2012 - 16:21 #3
Inden vi fortsætter her, afventer jeg lige, om du blev klogere  af denne tråd
Avatar billede Slettet bruger
11. juni 2012 - 17:09 #4
Har læst og accepteret din besked. Det er op til dig selv at vælge om du vil hjælpe i denne tråd, så synes ikke man skal blande 2 ting sammen.

Hvis du ved løsningen så hjælp og skriv den, hvis ikke så forlad samtalen, der er jo ingen grund til at bruge krudt på at skrive frem og tilbage hvis du ikke kan hjælpe alligevel :-)
Det er bare min holdning.
Avatar billede olebole Juniormester
11. juni 2012 - 17:28 #5
Betyder "Har læst og accepteret din besked", at du har accepteret, at du bør ændre adfærd - eller betyder det bare, at du accepterer, at jeg har holdninger, som ikke er lig dine?
Avatar billede Slettet bruger
11. juni 2012 - 17:36 #6
Begge ting :-)
men kan du hjælpe eller hvad?
Avatar billede olebole Juniormester
11. juni 2012 - 17:44 #7
Naturligvis - jeg lever af webudvikling. Nu er der jo som sagt tale om en vurdering af, hvordan man bør investere sin fritid - og den finder jeg er bedre givet ud på andre brugere
Avatar billede Slettet bruger
11. juni 2012 - 18:36 #8
Okay, det var ærgerligt for mig så :-)
Avatar billede inteeeL Nybegynder
11. juni 2012 - 19:35 #9
Jeg deler samme holdning som olebole. Hvis du ikke kan finde ud af at begå dig i et forum, hvor anstændighed og almen social adfærd er to kerneelementer, skal du ikke regne med, at nogle brugere her på Eksperten har interesse i at investere deres (dyrebare) tid på brugere, der udviser ligegladhed på sådan et niveau.

Vi er her alle for at hjælpe personer som dig, der er stødt på et problem. Almindelig netikette er det mindste, du kan give (fx. i tråden førnævnt), hvis du har et ønske om at modtage hjælp.
Avatar billede Slettet bruger
11. juni 2012 - 19:51 #10
Det er super, men forstår ikke hvorfor vi skal køre i det. Som du skriver er jeg her for at få hjælp, ikke for at diskutere, har forstået det :-)
Avatar billede inteeeL Nybegynder
11. juni 2012 - 20:07 #11
Du er her for at få hjælp - og du får kun den hjælp, hvis brugere herinde gider tilbyde hjælp. Hjælp tilbydes sjældent til forkælede, utaknemmelige brugere. Men du nævner, at du har forstået det - lad os håbe på det.

Tilbage til problemet..
Bruger ud wordpress? Kan du lige vise filen "magpierss-0.72/rss_fetch.inc"?
Avatar billede olebole Juniormester
11. juni 2012 - 20:16 #12
"Det er super, men forstår ikke hvorfor vi skal køre i det. Som du skriver er jeg her for at få hjælp, ikke for at diskutere, har forstået det" >> Jamen, problemet er jo netop din manglende forståelse - herunder af alm. social omgang. Din kommentar i #6 peger absolut ikke i retning af, at du har fattet hat!

Min egen motivation for at hjælpe her på Eksperten er al den hjælp, andre har overøst mig med gennem de sidste 57 år - og i særdeleshed de 14 år, jeg har beskæftiget mig med webudvikling.

De mennesker står jeg i stor taknemmelighedsgæld til, men min mulighed for at gengælde hjælpen er ofte ikke eksisterende. I stedet kan jeg vise dem min respekt, takke og ære dem ved at give stafetten videre og hjælpe andre.

Skal dette give mening, er jeg engang i mellem nødt til at sortere de værste igler fra. Ellers ville det jo være en hån mod de mennesker, jeg forsøger at ære
Avatar billede Slettet bruger
11. juni 2012 - 20:17 #13
Ja, tak :-)

Nej bruger ikke wordpress, jeg fulgte en tråd herinde og prøvede at lave den som beskrevet og det i #1 er hvad jeg fik ud af det, ved ikke om det er nødvendigt at bruge filen "magpierss-0.72/rss_fetch.inc"?  hmm :-/

Det er denne tråd jeg har fulgt :
http://www.eksperten.dk/spm/772494
Avatar billede inteeeL Nybegynder
11. juni 2012 - 20:55 #14
@olebole: jeg forstår din tankegang og holdning..

Prøv nedenstående:
<?php

$source = 'http://out-and-about.dk/rss_kalender.asp';

require('connect.php');
require_once('magpierss-0.72/rss_fetch.inc');
$rss = fetch_rss($source);
$num_items = 10; //Antal nyheder
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title      = $item['title'];
    $description = $item['description'];
    $date        = $item['pubDate'];
    $link        = $item['link'];

    //Vi tjekker om vi allerede har feeden i vores DB.
    if(mysql_num_rows( mysql_query("SELECT id FROM tabel WHERE link = '$link' LIMIT 1")) == 0) {
        echo "INSERT INTO tabel (title,description,dato,link) VALUES ('".$title."','".$description."','".$date."','".$link."')";
        mysql_query("INSERT INTO tabel (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}

?>
Avatar billede inteeeL Nybegynder
11. juni 2012 - 22:53 #15
Og fjern lige echo'en..
Avatar billede Slettet bruger
12. juni 2012 - 13:45 #16
Jeg har gjort som du skrev, men der kommer intet op i db :-(
mine felter i db er:

id
title
description
dato
link

Hmm, Jeg ved ikke hvad problemet er.
Den viser ingen fejl.

<?php

$source = 'http://out-and-about.dk/rss_kalender.asp';

require('connect.php');
require_once('magpierss-0.72/rss_fetch.inc');
$rss = fetch_rss($source);
$num_items = 10; //Antal nyheder
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title      = $item['title'];
    $description = $item['description'];
    $date        = $item['pubDate'];
    $link        = $item['link'];

    //Vi tjekker om vi allerede har feeden i vores DB.
    if(mysql_num_rows( mysql_query("SELECT id FROM rss WHERE link = '$link' LIMIT 1")) == 0) {
        "INSERT INTO rss (title,description,dato,link) VALUES ('".$title."','".$description."','".$date."','".$link."')";
        mysql_query("INSERT INTO rss (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}

?>
Avatar billede olebole Juniormester
12. juni 2012 - 14:13 #17
Så er fejlmeldinger vel slået fra på serveren
Avatar billede Slettet bruger
12. juni 2012 - 14:18 #18
Hm det skulle de ikke være, da jeg normalt for vist en fejlmeddelelse hvis der er noget forkert :-)
Men den viser jo heller ikke fejl hvis koden er rigtig, så det må jo være noget andet evt. men hvad, ved jeg ikke, desværre, men kan jeg måske få skrevet en fejlmeddelelse ud med en echo?
Avatar billede olebole Juniormester
12. juni 2012 - 14:31 #19
Det er jo præcis min pointe: "De skulle ikke være" ... men det er de. Prøv som det allerførste at skrive:

<?php
error_reporting(E_ALL);

- så vil du finde fejlen i #16.

Alternativt kunne du selvfølgelig skrive rigtigt af fra #14, men du lærer ikke at kode uden alle fejlmeddelelser og advarsler
Avatar billede Slettet bruger
12. juni 2012 - 14:42 #20
Jeg har da skrevet fuldstændig som der står i #14 ?

<?php
error_reporting(E_ALL);

viser ikke noget :-(
Avatar billede olebole Juniormester
12. juni 2012 - 14:48 #21
"Jeg har da skrevet fuldstændig som der står i #14" >> Nej.

"viser ikke noget" >> Jo.
Avatar billede Slettet bruger
12. juni 2012 - 14:54 #22
olebole, det er jo ikke for sjov jeg spørger "dumt", hvis jeg ikke har skrevet som der står i #14 - hvorfor skriver du så ikke der hvor jeg har gjort forkert i stedet for bare at skrive - Nej.

Hvis du kan se fejlen jeg har gjort, burde du så ikke hjælpe mig?
jeg er jo en uvidende person der søger hjælpe hos en Ekspert.
Avatar billede olebole Juniormester
12. juni 2012 - 14:59 #23
Præcis! Derfor ville det jo også være mere end dumt, hvis jeg fortalte dig, hvad fejlen er. Meningen er jo, du skal lære noget.

Forskellen mellem koderne er krystalklar og tydelig, hvis du gider læse linjerne igennem én efter en. Kan du ikke finde den, har du ikke kinamands chance for at lære at finde 'rigtige' fejl
Avatar billede Slettet bruger
12. juni 2012 - 15:07 #24
Ja men jeg har siddet i mange timer nu og prøvet og kan simpelthen ikke se det.
Koden er jo rent og skær copy paste, så de er jo identiske.

Kode fra inteeL:
<?php

$source = 'http://out-and-about.dk/rss_kalender.asp';

require('connect.php');
require_once('magpierss-0.72/rss_fetch.inc');
$rss = fetch_rss($source);
$num_items = 10; //Antal nyheder
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title      = $item['title'];
    $description = $item['description'];
    $date        = $item['pubDate'];
    $link        = $item['link'];

    //Vi tjekker om vi allerede har feeden i vores DB.
    if(mysql_num_rows( mysql_query("SELECT id FROM tabel WHERE link = '$link' LIMIT 1")) == 0) {
        echo "INSERT INTO tabel (title,description,dato,link) VALUES ('".$title."','".$description."','".$date."','".$link."')";
        mysql_query("INSERT INTO tabel (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}

?>

Min kode:

<?php

$source = 'http://out-and-about.dk/rss_kalender.asp';

require('connect.php');
require_once('magpierss-0.72/rss_fetch.inc');
$rss = fetch_rss($source);
$num_items = 10; //Antal nyheder
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title      = $item['title'];
    $description = $item['description'];
    $date        = $item['pubDate'];
    $link        = $item['link'];

    //Vi tjekker om vi allerede har feeden i vores DB.
    if(mysql_num_rows( mysql_query("SELECT id FROM tabel WHERE link = '$link' LIMIT 1")) == 0) {
        echo "INSERT INTO tabel (title,description,dato,link) VALUES ('".$title."','".$description."','".$date."','".$link."')";
        mysql_query("INSERT INTO tabel (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}

?>

Self. er tabel skiftet ud med min tabels navn :-)
Avatar billede olebole Juniormester
12. juni 2012 - 15:33 #25
Jeg kan jo ikke forholde mig til, hvad du måtte sidde og rode med i din editor. Jeg kan kun forholde mig til den kode, du skriver her.

Koden i #14 stemmer ikke overens med den i #16 - og heller ikke med den i #24. Den i #14 skal udløse en notice, men da det åbenbart ikke er den kode, du sidder og roder med, så ... tjah ....
Avatar billede olebole Juniormester
12. juni 2012 - 15:35 #26
Vrøvl! "Koden i #16 stemmer ikke overens med den i #14 - og heller ikke med den i #24. Den i #16 skal udløse en notice, men da det åbenbart ikke er den kode, du sidder og roder med, så ... tjah .... " - skulle der selvfølgelig stå  =)
Avatar billede Slettet bruger
12. juni 2012 - 15:52 #27
Jamen så vis mig eller forklar mig forskellen for jeg har kopieret det hele og sat ind i min editor, så der er jo ingen forskel så vidt jeg kan se. hmm :-(

olebole < du hjælper mig jo ikke rigtig. så hvis du kun er her for at belære mig om hvad der er rigtig og forkert uden at vise mig det, så synes jeg du skal bruge din kostbare tid et andet sted for dine umiddelbare svar kan jeg ikke bruge til noget.

konklusionen er at jeg ikke kan se fejlen - LIGEMEGET HVAD JEG GØR!
Så søger hjælp hos en der faktisk vil hjælpe mig og fortælle svaret, ikke en der holder på svaret for at lære mig hvad der er forkert.

Jeg har ikke meldt mig til programmerings-time, jeg mangler bare en løsning da det er en offentlig side jeg arbejder på har jeg ikke flere uger til at få det løst.

Så hjælp mig ved at fortæl mig fejlen eller accepter at din metode at hjælpe på ikke er det jeg leder efter og brug den på nogle som gerne vil lære og du kan give faklen videre til :-)
Avatar billede olebole Juniormester
12. juni 2012 - 16:15 #28
At finde en forskel mellem to tekster har intet med programmering at gøre. Det lærer man ret tidligt i folkeskolen.

Men det kan jo være rystende ligegyldigt, om koden i #16 ikke er magen til dem i #14 og #24, når det nu viser sig, det slet ikke er den i #16, du sidder og tester på.

Kommer du overhovedet ind i if-sætningen? Hvormange linjer skrives af echo'en?
Avatar billede Slettet bruger
12. juni 2012 - 16:42 #29
Det er jo koden i #16 jeg tester på!!!
#16 og #24 er identiske.

den eneste forskel der er imellem #16 + #24 i forhold til #14 er at jeg har skrevet 'rss' i stedet for 'tabel' og jeg har fjernet echo'en.

Men siden du er så skarp, kan du jo fortælle mig hvad fejlen er som jeg har efterspurgt 50 gange, men jeg begynder at tvivle på om du overhovedet ved det siden du ikke bare skrev det til at starte med i stedet for vi skal sidde her 20 beskeder efter og stadig ikke fundet ud af det fordi du ikke vil sige det.

OG JA! vi ved godt alle sammen du er webudvikler og lever af det som du har pointeret men hvad er talent hvis man ikke bruger det!

Forstår ikke pointen i at sidde og sige hvad jeg ikke gør i stedet for at hjælpe og fortælle hvad jeg skal gøre. og det tror jeg alle er enige i!
Avatar billede larsen11 Nybegynder
12. juni 2012 - 17:04 #30
Synes nu også bare at Olebole skulle svare og ikke trække tiden på den måde! Og hvis han ikke kender svaret, så lade være med at kommentere og overlade det til en anden.
Avatar billede olebole Juniormester
12. juni 2012 - 17:06 #31
Nej, det er ikke samme kode! Hvad echo'er du i #16? Echo'er inteeeL noget i #14? Echo'er du noget i #24? Det er ikke raketvidenskab. Det er bare et spørgsmål om at læse, hvad man selv har skrevet ... og forskellen skriger i øjnene!

"Forstår ikke pointen i at sidde og sige hvad jeg ikke gør i stedet for at hjælpe og fortælle hvad jeg skal gøre. og det tror jeg alle er enige i!"

Det er for at få dig til at vågne op og koncentrere dig om det, du laver. Kom ind i kampen!
Avatar billede olebole Juniormester
12. juni 2012 - 17:10 #32
Måske, det handler om den forkælelse, inteeeL omtalte i inteeeL(?) Det kunne tyde på, du er vandt til at have nogen rendende i halen på dig og redde dine fejl. Det lærer man bare ikke en dyt af. Du må lære at tage eget ansvar for din egen kode.

Når du ikke kan finde fejlen med mange hints, har du tydeligvis et problem ... og det har ikke med programmering at gøre
Avatar billede olebole Juniormester
12. juni 2012 - 17:11 #33
Ups ... "Måske, det handler om den forkælelse, inteeeL omtalte i #11(?)" - skulle der stå  =)
Avatar billede olebole Juniormester
12. juni 2012 - 17:13 #34
@larsen11: Har du noget konstruktivt at bidrage med, eller kunne du bare ikke modstå fristelsen til at bitche?
Avatar billede larsen11 Nybegynder
12. juni 2012 - 19:33 #35
Næ. Jeg kom sådan set for at få hjælp til det samme...og jeg fortår stadig heller ikke hvad problemet er. Synes godt nok du er lidt grov.

Du må tænke på at vi jo ikke har en uddannelse inden for det her, men en interesse. Vi forventer ikke at blive svinet til.
Du skal være klar over at jeg anmelder dig, for din opførsel.

Du har vist fået storhedsvanvid og der er da ingen af os der gider at finde os i at blive kaldt for forkælede og beskyldt for at vi har et problem. Det er vist næppe meningen med det her sted. så synes du skulle kigge lidt indad og tage dig selv op til revurdering !!!
Avatar billede olebole Juniormester
12. juni 2012 - 19:49 #36
Jamen, du skal da være mere end velkommen til at anmelde mig. Intet ophidser mig mindre  =)

Det er da fuldstændig ligegyldigt, om man har en uddannelse i det her. Det drejer sig om, at finde en forskel på de bogstaver, der står i #16:

<?php

$source = 'http://out-and-about.dk/ (...)

require('connect.php');
require_once('magpierss-0.72/rss_fetch.inc');
$rss = fetch_rss($source);
$num_items = 10; //Antal nyheder
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title      = $item['title'];
    $description = $item['description'];
    $date        = $item['pubDate'];
    $link        = $item['link'];

    //Vi tjekker om vi allerede har feeden i vores DB.
    if(mysql_num_rows( mysql_query("SELECT id FROM rss WHERE link = '$link' LIMIT 1")) == 0) {
        "INSERT INTO rss (title,description,dato,link) VALUES ('".$title."','".$description."','".$date."','".$link."')";
        mysql_query("INSERT INTO rss (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}

?>

- og #14:

<?php

$source = 'http://out-and-about.dk/ (...)

require('connect.php');
require_once('magpierss-0.72/rss_fetch.inc');
$rss = fetch_rss($source);
$num_items = 10; //Antal nyheder
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title      = $item['title'];
    $description = $item['description'];
    $date        = $item['pubDate'];
    $link        = $item['link'];

    //Vi tjekker om vi allerede har feeden i vores DB.
    if(mysql_num_rows( mysql_query("SELECT id FROM tabel WHERE link = '$link' LIMIT 1")) == 0) {
        echo "INSERT INTO tabel (title,description,dato,link) VALUES ('".$title."','".$description."','".$date."','".$link."')";
        mysql_query("INSERT INTO tabel (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}

?>

Denne kategori handler om 'hjælp til selvhjælp'. Opgaver får man løst i en anden kategori. Vil man hjælpes til at hjælpe sig selv, må man selv gøre en lille indsats. Hvor svært kan det være at finde forskellen i to så små stykker kode?

Nu var det ikke mig, der kaldte spørgeren 'forkælet' (selvom jeg erklærer mig helt enig i iagttagelsen), men  den slags 'detaljer' betyder øjensynligt ikke noget for store ånder.

Spørger kunne f.eks. begynde med at lære, hvad det er for et sted, vedkommende er landet på. Det vidner den foregående tråd og dennes begyndelse ikke om den store lyst til.

Endelig kunne spørger jo bare svare på det spørgsmål, der blev stillet i #28:

"Kommer du overhovedet ind i if-sætningen? Hvormange linjer skrives af echo'en?"

At undersøge og svare på den slags kaldes 'fejlfinding'  *o)
Avatar billede Slettet bruger
12. juni 2012 - 20:02 #37
Jeg finder mig ikke i at blive svinet til!
Ja InteeL echo'er noget i #14 og #24 men måske er det gået forbi dig!

InteeL skrev:


//Vi tjekker om vi allerede har feeden i vores DB.
    if(mysql_num_rows( mysql_query("SELECT id FROM tabel WHERE link = '$link' LIMIT 1")) == 0) {
        echo "INSERT INTO tabel (title,description,dato,link) VALUES ('".$title."','".$description."','".$date."','".$link."')";
        mysql_query("INSERT INTO tabel (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}


Og nej jeg echo'er ikke noget i #16 da inteeL skrev igen i #15 - "Og fjern lige echo'en.. "

, men ellers er det identiske koder i 3 ovenstående svar!
Der er ingen forskel, så ved ikke om du har kigget i en skærm for længe eller hvad der er galt med dig, men lad være at spild min tid når du ikke kender svaret.
Avatar billede Slettet bruger
12. juni 2012 - 20:05 #38
Jeg skal have det til at virke og det har echo'en ingen betydning for, nok derfor jeg ikke har set det som den forskel du hentyder til, da det jo ikke løser problemet om den er der eller ej!!
Avatar billede olebole Juniormester
12. juni 2012 - 20:16 #39
Ja, "Og fjern lige echo'en" - men du har jo kun fjernet ordet echo. Det er kun halvdelen af en echo kommando. Strngen, der skal echo'es skal da også fjernes. Man kan jo ikke have en løsrevet streng hængende midt i koden.

Det er helt fair, at du ikke forstår en linje som:

echo "Hello World";

- men så må du jo spørge den, der skriver koden om, hvad hver enkelt linje betyder.

"Jeg skal have det til at virke og det har echo'en ingen betydning for, nok derfor jeg ikke har set det som den forskel du hentyder til, da det jo ikke løser problemet om den er der eller ej!!"

Komplet wrong! Det er af allerhøjeste betydning for at finde fejlen. Uden den linje har du jo ingen chance for at vide, om du overhovedet kommer ind i if-sætningen. Hvis du vil lære, så lad være med at spille klog og svar i stedet på det, du bliver spurgt om. Vi stille dig ikke den slags spørgsmål for at fylde ligegyldige data i Ekspertens database!

Du bliver ikke svinet til. Du bliver bedømt som værende forkælet. Det er muligt, du ikke er det - men foreløbig er det det indtryk, din adfærd efterladt hos to brugere i denne tråd.
Avatar billede olebole Juniormester
12. juni 2012 - 20:22 #40
Hvis linjen ikke skriver noget ud, ved du jo objektivt, at du aldrig kommer ind i if-blokken. Det er viden, der er guld værd!

Så prøver du, om du overhovedet kommer hen til if-sætningen. Skriver dette noget ud:

<?php

$source = 'http://out-and-about.dk/ (...)';

require('connect.php');
require_once('magpierss-0.72/rss_fetch.inc');
$rss = fetch_rss($source);
$num_items = 10; //Antal nyheder
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title      = $item['title'];
    $description = $item['description'];
    $date        = $item['pubDate'];
    $link        = $item['link'];
    echo 'Kommer vi hertil?<br>';
    //Vi tjekker om vi allerede har feeden i vores DB.
    if(mysql_num_rows( mysql_query("SELECT id FROM tabel WHERE link = '$link' LIMIT 1")) == 0) {
        echo "INSERT INTO tabel (title,description,dato,link) VALUES ('".$title."','".$description."','".$date."','".$link."')";
        mysql_query("INSERT INTO tabel (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}

?>
Avatar billede Slettet bruger
14. juni 2012 - 11:38 #41
Den udskriver ikke noget, så den kommer ikke ind i if ? :-/
Avatar billede inteeeL Nybegynder
14. juni 2012 - 12:25 #42
Nu har jeg prøvet koden af (af ren og skær interesse for at afprøve magpierss), og det virker hos mig. Jeg fandt ud af, at $item['pubDate'] skal være $item['pubdate'] - der tages forbehold for store og små bogstaver, og efter et var_dump af $rss-arrayet kunne jeg se, at det skulle skrives med småt.

Grunden, til at det muligvis ikke virker hos dig, er, at du (måske) ikke får kopieret $source (adressen) med over korrekt grundet Ekspertens parser. Prøv nedenstående kode - de fornødne rettelser er foretaget.
<?php

$source = 'http://out-and-about.dk/rss_kalender.asp';

require('connect.php');
require_once('magpierss-0.72/rss_fetch.inc');
$rss = fetch_rss($source);
$num_items = 10; //Antal nyheder
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title        = $item['title'];
    $description = $item['description'];
    $date        = $item['pubdate'];
    $link        = $item['link'];
    echo 'Kommer vi hertil?<br>'; //Kommer vi ind i loopen?
    // Vi tjekker om vi allerede har feeden i vores DB.
    if(mysql_num_rows( mysql_query("SELECT id FROM tabel WHERE link = '$link' LIMIT 1")) == 0) {
        //Vi har ikke feeden i vores DB - den indsættes
        echo "INSERT INTO tabel (title,description,dato,link) VALUES ('".$title."','".$description."','".$date."','".$link."')";
        mysql_query("INSERT INTO tabel (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}

?>

Nu håber jeg, at jeg har fået parset linket ordentligt. Hvis ikke - så bare ret det selv.
Avatar billede olebole Juniormester
14. juni 2012 - 14:03 #43
"Grunden, til at det muligvis ikke virker hos dig, er, at du (måske) ikke får kopieret $source (adressen) med over korrekt grundet Ekspertens parser." >> Nej, for det ville have udløst en fejl - om ikke andet, da spørger prøvede med error_reporting.

Det er fuldstændig korrekt, at magpierss ikke understøtter XML/rss korrekt - og fejlagtigt konverterer alle tagNames til lower case. Linjen, hvor scriptet for alvor snubler, ligger dog først nogle linjer senere. Det ville dog være hensigtsmæssigt, at hjælpe spørger til at finde det selv og lære lidt grundlæggende fejlfinding  =)

#41: Det er helt korrekt. Da echo'en inde i if-sætningen ikke udskriver noget, kommer du ikke ind i if-sætningen. Hvad fik du så ud af at prøve koden i #41? Skrev den noget ud?
Avatar billede inteeeL Nybegynder
14. juni 2012 - 15:08 #44
Nej, for det ville have udløst en fejl - om ikke andet, da spørger prøvede med error_reporting.

Fuldstændig korrekt. Jeg havde dog den mistanke, at eventuelle fejlmeddelelser blev undertrykt og derfor ikke blev vist. Men hvis error_reporting var taget i brug, kan jeg naturligvis ikke belægge min påstand - den trækker jeg hermed tilbage.

Det ville dog være hensigtsmæssigt, at hjælpe spørger til at finde det selv og lære lidt grundlæggende fejlfinding  =)

Hjælp til selvhjælp -> helt enig i, at det for spørgeren her er vigtigt at lære om grundlæggende fejlfinding. Nu har det så ikke været tilfældet, at jeg kom med et radikalt løsningsforslag, hvorfor jeg ikke finder mit input helt uhensigtsmæssigt. Det var blot en rettelse i $source (som jeg troede lå til grund for problemet) samt lower case af $item['pubDate'].

Hav en god dag. :-)
Avatar billede olebole Juniormester
14. juni 2012 - 15:30 #45
Problemet begynder helt rigtigt med case i $item['pubDate'], men det stopper ikke scriptet i sig selv. Det gør bare, at $date bliver sat til en tom streng. At den er tom, udløser en fejl senere, men jeg kunne godt tænke mig, spørger lærer at indsnævre problemet med små test  =)
Avatar billede Slettet bruger
15. juni 2012 - 12:38 #46
Jeg havde skrevet $source korrekt, jeg kan jo godt se at eksperten lavede den om, så det havde jeg rettet fra start, men nu har jeg så prøvet din kode i #42 og den viser ingen fejl, men det sættes heller ikke op i databasen eller udskriver denne echo 'Kommer vi hertil?<br>';

Hmm, jeg har ingen ide om hvad problemet kan være da jeg ikke er php ekspert :-)
Avatar billede olebole Juniormester
15. juni 2012 - 14:05 #47
Så er der helt sikkert noget, du ikke fortæller - men det er umuligt for os at se, hvad det er. Koden i #42 fungerer helt perfekt
Avatar billede Slettet bruger
15. juni 2012 - 15:01 #48
Hm okay, synes ellers ikke jeg kan fortælle mere, men her er alle info's.

min tabel hedder 'rss' med felterne:
id
title
description
dato
link

min database connection hedder connect.php

min fil hedder: auto_upload.php
filen indeholder pt:

<?php
$source = 'http://out-and-about.dk/rss_kalender.asp';

require('connect.php');
require_once('../rss_fetch.inc');
$rss = fetch_rss($source);
$num_items = 10; //Antal nyheder
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title          = $item['title'];
    $description = $item['description'];
    $date        = $item['pubdate'];
    $link        = $item['link'];
    echo 'Kommer vi hertil?<br>'; //Kommer vi ind i loopen?
    // Vi tjekker om vi allerede har feeden i vores DB.
    if(mysql_num_rows( mysql_query("SELECT id FROM rss WHERE link = '$link' LIMIT 1")) == 0) {
        //Vi har ikke feeden i vores DB - den indsættes
        echo "INSERT INTO rss (title,description,dato,link) VALUES ('".$title."','".$description."','".$date."','".$link."')";
        mysql_query("INSERT INTO rss (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}

?>

rss_fetch.inc ligger på min server i en mappe som den henviser til, er det forkert?! :-/
Kan sagtens være jeg har overset en helt logisk fejl.
Avatar billede olebole Juniormester
15. juni 2012 - 15:12 #49
Hvis rss_fetch.inc ligger ved siden af den mappe, der indeholder dokumentet med koden ovenfor, er der ikke noget galt med din import. Hvad sker der, hvis du skriver:

<?php
error_reporting(E_ALL);
$source = 'http://out-and-about.dk/rss_kalender.asp';
Avatar billede Slettet bruger
15. juni 2012 - 15:21 #50
Det virker nu, tror at den en af de inkluderede filer ikke var uploadet rigtig, men hey ole - ved du så hvordan jeg får ø-æ-å med op i databasen, pt. laver den ?(spørgsmålstegn) i stedet.
hmm og evt. date(dato) som et timestamp :-)

Mange tak for hjælpen btw. :-)
Avatar billede olebole Juniormester
15. juni 2012 - 16:08 #51
Jeg kan se, at feed'et af uransagelige årsager er kodet som iso-8859-1. Hvis jeg gætter rigtigt, så kører du utf-8. Hvis det er tilfældet, finder vi en løsning, men jeg må lige vide, hvad du gemmer dine filer som - hvad du bruger af Content-Type meta i HTML-koden - og hvad din database er sat til
Avatar billede Slettet bruger
15. juni 2012 - 16:57 #52
Jeg og databsen køre utf-8 :-)
Avatar billede olebole Juniormester
15. juni 2012 - 18:46 #53
Så kan du prøve at skrive:

$title = utf8_encode($item['title']);
$description = utf8_encode($item['description']);
$date = $item['pubdate'];
$link = utf8_encode($item['link']);
Avatar billede Slettet bruger
17. juni 2012 - 19:20 #54
Super, det virker, men jeg får stadig ikke dato op som timestamp? :-)
Avatar billede olebole Juniormester
17. juni 2012 - 20:22 #55
Nej, det er jo fordi, kilden ikke har det korrekte format  =)
Avatar billede olebole Juniormester
17. juni 2012 - 20:25 #56
rss-filen siger: 21-06-2012. Et timestamp er ét tal: Det antal sekunder, der er gået fra 1. januar 1970 kl. 00:00
Avatar billede olebole Juniormester
17. juni 2012 - 20:29 #57
For at danne et timestamp, kan du lave et array med explode af $date over strengen '-'.

Derefter bruger du array elementerne i mktime til at danne dit timestamp
Avatar billede inteeeL Nybegynder
17. juni 2012 - 20:45 #58
Det kan også gøres med DateTime's API:
$title = utf8_encode($item['title']);
$description = utf8_encode($item['description']);
$date = new DateTime($item['pubdate']);
$date = $date->getTimestamp();
$link = utf8_encode($item['link']);

Eller med PHP's funktion - date_parse_from_format:
$title = utf8_encode($item['title']);
$description = utf8_encode($item['description']);
$date = date_parse_from_format('d-m-Y', $item['pubdate']);
$date = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']);
$link = utf8_encode($item['link']);
Avatar billede olebole Juniormester
17. juni 2012 - 21:11 #59
Såfremt de er installeret (vers. 5.2 hhv. 5.3), er de udmærkede. For en ordens skyld, ser koden fra #57 sådan ud:

$title = utf8_encode($item['title']);
$description = utf8_encode($item['description']);
$date = explode('-', $item['pubdate']);
$date = mktime(0,0,0, $date[1], $date[0], $date[2])
$link = utf8_encode($item['link']);
Avatar billede Slettet bruger
18. juni 2012 - 13:43 #60
Super - perfekt :-)
Brugte løsningen i #59.

Mit sidste problem er så at den kun sætter det op i db når jeg refresher siden, så skal vel bruge noget jquery af en art, har googlet mig lidt frem til noget med location.reload, men ved ikke om det er det der skal til :-)

Kunne godt tænke mig at min fil, auto_upload.php reloadede sig selv hver dag dvs. 24 timer, Ved i noget om hvordan man får løst det?
Avatar billede Slettet bruger
18. juni 2012 - 16:12 #61
Okay, endnu et spørgsmål, som jeg personligt synes er meget avanceret.

Jeg har en table i min db som udskriver events som også hedder events i db, så har jeg den nye rss, som udskriver de events som kommer med rss-feedet. De to sql'er skal jeg vel på en måde ha' koblet sammen da jeg sortere dem efter date(dato) så den nærmeste bliver vist først :-)

Skal jeg "koble" dem sammen på en måde eller kan man sige noget med at dato fra events og dato fra rss skal sorteres sammen efter ASC. Ved ikke rigtig noget om join, eller union eller hvad vi skal ud i her, eller om der er en simpel løsning .-)

Undskyld hvis det skaber forvirring.
Avatar billede inteeeL Nybegynder
18. juni 2012 - 21:23 #62
Jquery er javascript - et programmeringssprog, der køres over klienten (browseren). Det er ikke løsningen. Man skal muligvis ud i noget cronjob, for at få det til at virke. Dette er dog kompliceret, hvis du aldrig har arbejdet med cronjobs før.

#61.
Dette kan gøres med simpel join. Hvis du kan vise strukturen i begge tabeller, kunne det være nemmere at forstå, hvad du reelt vil. :-)
Avatar billede olebole Juniormester
18. juni 2012 - 21:59 #63
Jeg forstår heller ikke rigtig, hvad det præcist er, du vil. Mit gæt er, at du har en side, der viser events, hentet fra en database. Databasens events opdateres udfra rss-feed'et (og evt. andre kilder).

Nu vil så du gerne have opdateringen kørt engang imellem - evt. på forhånd fastsatte tidspunkter. Er det korrekt opfattet?

I så fald har inteeeL fuldstændig ret: Du kan afvikle opdateringsscriptet, hvis du lægger det i en fil for sig selv, som afvikles med et cronjob.

Forklar lige præcist, hvad du vil - ikke mindst omkring det at "koble" dem sammen
Avatar billede olebole Juniormester
19. juni 2012 - 00:40 #64
Hvis din udbyder ikke tilbyder mulighed for cron - eller du finder det for bøvlet - kan du lave et trick, jeg selv har brugt et par gange.

Opgaven går altså ud på at få en bestemt fil kørt med et vist interval. Løsningen går ud på, at når en bruger kalder en bestemt side, bliver der kørt en lille funktion. Funktionen kalder databasen og tjekker, hvor ofte en bestemt fil skal køres - og om det er for længe siden, filen er blevet kørt. Er det tilfældet, includeres filen, hvis scripts afvikles, inden brugeren kommer videre.

Du kan oprette en tabel som denne:

CREATE TABLE `pseudo_crons` (
  `name` varchar(24) NOT NULL DEFAULT '',
  `path` varchar(120) DEFAULT NULL,
  `interval` tinyint(3) unsigned DEFAULT NULL,
  `stamp` int(14) unsigned DEFAULT '0',
  PRIMARY KEY (`name`)
)

Nu kan du oprette et job med:

function create_pseudo_cron($name='', $path2incl='', $interval=24) {
    if ($name=='') die('Cronjobbet skal have et navn - og det må ikke eksistere i forvejen.');
    if (!file_exists($path2incl)) die("Includefilen '".$path2incl."' eksisterer ikke.");
    // Forbind til DB
    conn2db();
    // Indsæt
    $sql = "INSERT INTO `pseudo_crons` (`name`, `path`, `interval`) VALUES ('".$name."', '".$path2incl."', ".$interval.")";
    mysql_query($sql);
   
    if (mysql_errno()==1062) {
        die("Der findes allerede et cronjob med navnet '".$name."'");
    }
}

create_pseudo_cron('events', $_SERVER['DOCUMENT_ROOT'].'sti/til/update_events.php', 6);

Nu skulle der gerne stå i databasen, at update_events.php skal køres hver 6. time - at jobbet hedder events - og at stamp'et for sidste gang, vi kørte jobbet, er 0 (= 1. jan. 1970 kl. 00:00:00).

Hvis du har en fil med forskellige funktioner, som du inkluderer øverst i dine filer, så kan du i den skrive denne funktion:

function pseudo_cron_run($name='') {
    if ($name=='') die('Du skal angive navnet på cronjobbet.');
    $now = time();
    // Forbind til DB
    conn2db();
    // Hent det cronjob, der skal køres
    $sql = "SELECT `path` FROM `pseudo_crons` WHERE `name`='".$name."' AND `stamp`<".$now."-(`interval`*3600) LIMIT 1";
    $res = mysql_query($sql);
    // Hvis vi fandt nogen
    if (mysql_num_rows($res)>0) {
        $row = mysql_fetch_assoc($res);
        // Includer filen
        include($row['path']);
        // Opdater timestamp
        $sql = "UPDATE `pseudo_crons` SET `stamp`=".$now." WHERE `name`='".$name."' LIMIT 1";
        mysql_query($sql);
    }
}

I toppen af det dokument, hvor du viser dine events skriver du så:

<?php
include($_SERVER['DOCUMENT_ROOT'].'inc/my_funcs.php');
pseudo_cron_run('events');

/* Herfra henter du events i databasen og viser dem på siden */
?>

Så vil dine events altid være opdateret indenfor de seneste seks timer
Avatar billede olebole Juniormester
19. juni 2012 - 00:47 #65
På den måde kan du oprette så mange jobs, du vil, men lad være med at spamme dine brugere med 20 jobs på din index side. Kald de enkelte jobs på de sider, hvor du har brug for det, og de giver mening.

Denne løsning har intet med cron at gøre, men det kan være en brugbar løsning, hvor der ikke er adgang til cron.

Derudover vil jeg generelt anbefale dig at læse denne guide om prepared statements, som er en langt sikrere og ofte meget hurtigere måde at 'tale' med databasen på - og denne om fejlhåndtering ved MySQL og MySQLI.

Ja, inteeeL ... så blev der linket til den igen  *D
Avatar billede Slettet bruger
19. juni 2012 - 12:32 #66
Altså min fil jeg vil have opdateret indeholder kun php, som uploader rss til databasen og den kan ingen besøge, grunden til at den skal opdatere er pga. at den kun sætter rss op i databasen når jeg går ind på siden og trykker f5, men tænke bare at jeg kunne få den til at opdatere af sig selv i stedet for jeg skal gå derind og trykke f5 hver dag eller hver uge, det behøver ikke være på noget bestemt tidspunkt, men evt hver dag så jeg er opdateret hver gang rss feedet bliver opdateret fra dens udbyder :-)

mit spørgsmål i #61 og ovenstående er på to forskellige sider, men altså under samme domæne :-)

Dette er hvad jeg har på min events side som udskriver events:

<?php
       
        include ('connect.php');
        $months_danish = array(
        1 => "Januar",
        2 => "Februar",
        3 => "Marts",
        4 => "April",
        5 => "Maj",
        6 => "Juni",
        7 => "Juli",
        8 => "August",
        9 => "September",
        10 => "Oktober",
        11 => "November",
        12 => "December"
        );
       
        $html = array();
        foreach( $months_danish as $key => $month) {
        $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';
       
        $month_start = mktime(0, 0, 0, $key, 1, date('Y'));
        $month_end = mktime(23, 59, 59, $key+1, 0, date('Y'));
        $sql = "SELECT * FROM table1 WHERE godkendt='1' AND (date BETWEEN $month_start AND $month_end) ORDER BY date ASC";
        $result = mysql_query($sql);
        while ($row = mysql_fetch_array($result)) {
        $html[] = '<div id="event_table">';
        $html[] = '<div class="event_date">'.$months_danish[date('n',$row[date])];
        $html[] = '<br/>'.date('j',$row[date]);
        $html[] = '<br/>'.date('Y',$row[date]).'</div>';
        $html[] = '<div class="event_title"><a href="eventen.php?id='.$row[id].'">'.$row["title"].'</a></div></div>';     
        }
       
        $html[] = '</div>';
        }
       
        echo implode("\n", $html); //Udskriver til sidst html-arrayet
       
   
        ?>

så har jeg så denne som skal udskrive rss events men sammen med de andre events fra table1:
$sql = "SELECT * FROM rss WHERE(dato BETWEEN $month_start AND $month_end) ORDER BY dato ASC";

hvordan får jeg dem flettet sammen eller hvad man siger?
grunden til at jeg gerne vil have det er fordi pt. udskrives events fra table1 i kronologisk dato orden og så bagefter udskriver den dem fra rss, så dvs. det ca. ser sådan ud:

d.1
d.4
d.6
(^^ dato fra table1)
d.2
d.5
(^^ dato fra rss ligger sig under de andre)

Håber det var forståeligt :-/
Avatar billede olebole Juniormester
19. juni 2012 - 13:18 #67
Brug #64
Avatar billede Slettet bruger
19. juni 2012 - 13:44 #68
Hm det forstår jeg bare ikke :-(

Troede det var nemmere bar at sætte en stykke kode ind på rss filen som sagde at den skulle opdatere hver dag, og så evt lave en join på den anden side hvor jeg får date og dato fra begge tabeller til at køre efter ASC i en sql string.

For det ser jo fint ud nu, det er jo bare fordi jeg gerne vil have at de står kronologisk :-)

Pt, ser det sådan ud:

http://www.afterlife.dk/events.php
Avatar billede olebole Juniormester
19. juni 2012 - 14:07 #69
Jamen, stiller du ikke netop spørgsmål på Eksperten for at lære den bedste fremgangsmåde? Så skal man ikke tro så meget  *o)

Du kan ikke "sætte en stykke kode ind på rss filen". Du skal enten køre et cronjob eller et simuleret cronjob, der afvikler filen
Avatar billede Slettet bruger
20. juni 2012 - 13:24 #70
okay, fandt en løsning :-)

men det jeg godt kunne tænke mig, er at de køre i den samme sql, men skal jeg så bruge en join eller hvordan får jeg dem samlet så der køre en sql? .-)

Se evt. #66, da det er min nuværende sql, uden rss table indblandet.
Avatar billede inteeeL Nybegynder
20. juni 2012 - 14:13 #71
Det alternativ, Ole i kommentar #64 foreslår, er i den grad din løsning til rss-delen (cronjobs). Det har, som Ole nævner, intet at gøre med cronjobs, men i og med at det som mål har at arbejde ud fra et interval, besidder alternativet samme funktion som cronjobs. Det er meget almindeligt at erstatte cronjobs med funktioner som disse. Det har jeg selv gjort i flere sammenhænge i tilfælde, hvor udbyder ikke tilbyder cronjobs. Jeg vil gerne prøve at forklare dig, hvordan Oles fine kode (som i øvrigt også bør overvejes at laves til en guide =) fungerer - trin for trin.

CREATE TABLE `pseudo_crons` (
  `name` varchar(24) NOT NULL DEFAULT '',
  `path` varchar(120) DEFAULT NULL,
  `interval` tinyint(3) unsigned DEFAULT NULL,
  `stamp` int(14) unsigned DEFAULT '0',
  PRIMARY KEY (`name`)
)

Name er navnet til dit "cronjob". Cronjobs kan bruges til flere forskellige ting. Det ville her være mest (i mine øjne) at kalde den rss(-feeds), eftersom det scriptet henter feeds og gemmer det i databasen.
Path er stien til den fil, hvori den egentlige opdatering/hentning af rss_feed sker. Du nævner i #48, at filen hedder auto_upload.php, så det er den fil, der skal gemmes her - det sker senere.
Interval. Hvornår skal scriptet køres (i timer). Hver 6. time? Hver 24. time? Det kan selv justeres, når conjobbet oprettes.
Stamp. Default er sat til 0 <- scriptet er endnu ikke kørt. Når scriptet køres, opdateres timestampet med de antal sekunder, der er gået siden 1. jan. 1970 kl. 00:00:00 - med funktionen time();

function create_pseudo_cron($name='', $path2incl='', $interval=24) {
    if ($name=='') die('Cronjobbet skal have et navn - og det må ikke eksistere i forvejen.');
    if (!file_exists($path2incl)) die("Includefilen '".$path2incl."' eksisterer ikke.");
    // Forbind til DB
    conn2db();
    // Indsæt
    $sql = "INSERT INTO `pseudo_crons` (`name`, `path`, `interval`) VALUES ('".$name."', '".$path2incl."', ".$interval.")";
    mysql_query($sql);
 
    if (mysql_errno()==1062) {
        die("Der findes allerede et cronjob med navnet '".$name."'");
    }
}

Funktionen create_pseudo_cron bruges sådan set kun én gang her - netop til at oprette jobbet (en række i tabellen, som (her) er tilknyttet rss-feeds).
create_pseudo_cron('rss-feeds', $_SERVER['DOCUMENT_ROOT'].'sti/til/auto_upload.php', 6);

Med ovenstående kode oprettes jobbet. Navnet har jeg ændret til rss-feeds (du kan selvfølgelig selv bestemme, hvad det skal hedde). Stien til scriptet er sat ind. Og intervallet er sat til 6 (timer) <- scriptet skal køres hver 6. time.

function pseudo_cron_run($name='') {
    if ($name=='') die('Du skal angive navnet på cronjobbet.');
    $now = time();
    // Forbind til DB
    conn2db();
    // Hent det cronjob, der skal køres
    $sql = "SELECT `path` FROM `pseudo_crons` WHERE `name`='".$name."' AND `stamp`<".$now."-(`interval`*3600) LIMIT 1";
    $res = mysql_query($sql);
    // Hvis vi fandt nogen
    if (mysql_num_rows($res)>0) {
        $row = mysql_fetch_assoc($res);
        // Includer filen
        include($row['path']);
        // Opdater timestamp
        $sql = "UPDATE `pseudo_crons` SET `stamp`=".$now." WHERE `name`='".$name."' LIMIT 1";
        mysql_query($sql);
    }
}

Det eneste, der muligvis bør kommenteres/forklares her, er $sql-delen. Det, der sker, er, at den henter det respektive (cron)job. <- Når der er gået 6 timer (ellere mere) siden sidste scriptet sidst blev kørt, skal den (rækken) opdaters igen.
Hvis der er gået over 6 timer siden sidste opdatering, inkluderes filen, som indeholder scriptet til opdatering - til rss-feed. Cronjob-rækken opdateres (timestampet opdateres).

<?php
include($_SERVER['DOCUMENT_ROOT'].'inc/my_funcs.php');
pseudo_cron_run('rss-feeds');

/* Herfra henter du events i databasen og viser dem på siden */
?>

Når folk besøger siden, hvori ovenstående kode er indsat, vil funktionen pseudo_cron_run blive kaldt. Den tjekker så, hvornår sidste opdatering er sket - og handler derfra <- ligesom jeg tidligere har forklaret.

Det skulle være det. Jeg tror ikke, der findes noget bedre/nemmere alternativ til cronjobs end dette. Prøv det af og spørg, hvis du er i tvivl.

@65@: Ja, inteeeL ... så blev der linket til den igen  *D // Det manglede da også bare. Den kan der altid linkes - og her er det da substantielt, at der søges mod mysqli i stedet for MYSQL's gamle (værdiløse) API. Jeg linker jævnligt til den. :-)Det alternativ, Ole i kommentar #64 foreslår, er i den grad din løsning til rss-delen (cronjobs). Det har, som Ole nævner, intet at gøre med cronjobs, men i og med at det som mål har at arbejde ud fra et interval, besidder alternativet samme funktion som cronjobs. Det er meget almindeligt at erstatte cronjobs med funktioner som disse. Det har jeg selv gjort i flere sammenhænge i tilfælde, hvor udbyder ikke tilbyder cronjobs. Jeg vil gerne prøve at forklare dig, hvordan Oles fine kode (som i øvrigt også bør overvejes at laves til en guide =) fungerer - trin for trin.

CREATE TABLE `pseudo_crons` (
  `name` varchar(24) NOT NULL DEFAULT '',
  `path` varchar(120) DEFAULT NULL,
  `interval` tinyint(3) unsigned DEFAULT NULL,
  `stamp` int(14) unsigned DEFAULT '0',
  PRIMARY KEY (`name`)
)

Name er navnet til dit "cronjob". Cronjobs kan bruges til flere forskellige ting. Det ville her være mest (i mine øjne) at kalde den rss(-feeds), eftersom det scriptet henter feeds og gemmer det i databasen.
Path er stien til den fil, hvori den egentlige opdatering/hentning af rss_feed sker. Du nævner i #48, at filen hedder auto_upload.php, så det er den fil, der skal gemmes her - det sker senere.
Interval. Hvornår skal scriptet køres (i timer). Hver 6. time? Hver 24. time? Det kan selv justeres, når conjobbet oprettes.
Stamp. Default er sat til 0 <- scriptet er endnu ikke kørt. Når scriptet køres, opdateres timestampet med de antal sekunder, der er gået siden 1. jan. 1970 kl. 00:00:00 - med funktionen time();

function create_pseudo_cron($name='', $path2incl='', $interval=24) {
    if ($name=='') die('Cronjobbet skal have et navn - og det må ikke eksistere i forvejen.');
    if (!file_exists($path2incl)) die("Includefilen '".$path2incl."' eksisterer ikke.");
    // Forbind til DB
    conn2db();
    // Indsæt
    $sql = "INSERT INTO `pseudo_crons` (`name`, `path`, `interval`) VALUES ('".$name."', '".$path2incl."', ".$interval.")";
    mysql_query($sql);
 
    if (mysql_errno()==1062) {
        die("Der findes allerede et cronjob med navnet '".$name."'");
    }
}

Funktionen create_pseudo_cron bruges sådan set kun én gang her - netop til at oprette jobbet (en række i tabellen, som (her) er tilknyttet rss-feeds).
create_pseudo_cron('rss-feeds', $_SERVER['DOCUMENT_ROOT'].'sti/til/auto_upload.php', 6);

Med ovenstående kode oprettes jobbet. Navnet har jeg ændret til rss-feeds (du kan selvfølgelig selv bestemme, hvad det skal hedde). Stien til scriptet er sat ind. Og intervallet er sat til 6 (timer) <- scriptet skal køres hver 6. time.

function pseudo_cron_run($name='') {
    if ($name=='') die('Du skal angive navnet på cronjobbet.');
    $now = time();
    // Forbind til DB
    conn2db();
    // Hent det cronjob, der skal køres
    $sql = "SELECT `path` FROM `pseudo_crons` WHERE `name`='".$name."' AND `stamp`<".$now."-(`interval`*3600) LIMIT 1";
    $res = mysql_query($sql);
    // Hvis vi fandt nogen
    if (mysql_num_rows($res)>0) {
        $row = mysql_fetch_assoc($res);
        // Includer filen
        include($row['path']);
        // Opdater timestamp
        $sql = "UPDATE `pseudo_crons` SET `stamp`=".$now." WHERE `name`='".$name."' LIMIT 1";
        mysql_query($sql);
    }
}

Det eneste, der muligvis bør kommenteres/forklares her, er $sql-delen. Det, der sker, er, at den henter det respektive (cron)job. <- Når der er gået 6 timer (ellere mere) siden sidste scriptet sidst blev kørt, skal den (rækken) opdaters igen.
Hvis der er gået over 6 timer siden sidste opdatering, inkluderes filen, som indeholder scriptet til opdatering - til rss-feed. Cronjob-rækken opdateres (timestampet opdateres).

<?php
include($_SERVER['DOCUMENT_ROOT'].'inc/my_funcs.php');
pseudo_cron_run('rss-feeds');

/* Herfra henter du events i databasen og viser dem på siden */
?>

Når folk besøger siden, hvori ovenstående kode er indsat, vil funktionen pseudo_cron_run blive kaldt. Den tjekker så, hvornår sidste opdatering er sket - og handler derfra <- ligesom jeg tidligere har forklaret.

Det skulle være det. Jeg tror ikke, der findes noget bedre/nemmere alternativ til cronjobs end dette. Prøv det af og spørg, hvis du er i tvivl.

@65@: Ja, inteeeL ... så blev der linket til den igen  *D // Det manglede da også bare. Den kan der altid linkes - og her er det da substantielt, at der søges mod mysqli i stedet for MYSQL's gamle (værdiløse) API. Jeg linker jævnligt til den. :-)
Avatar billede Slettet bruger
20. juni 2012 - 14:25 #72
Okay, er vi enige om at du har slået den op 2 gange i samme kommentar, men det er de samme, ikke? :-)

Jeg viser mine events på siden events.php så det er der jeg skal skrive det ind eller?

og øh, jeg har stadig ikke forstået hvordan jeg skal joine dem sammen i 1 sql sætning når de udskrives så alle events bliver ORBER BY date ASC; (både dem fra rss og dem fra table1)
Avatar billede inteeeL Nybegynder
20. juni 2012 - 14:40 #73
Jo, jeg skrev beskeden i nat, men jeg kunne ikke oprette kommentaren (grundet problemer med eksperten - deres sædvanlige natlige nedetid). Jeg kom desværre til at sætte den ind 2 gang. :-)

Jeg viser mine events på siden events.php så det er der jeg skal skrive det ind eller? //Det lyder ikke til, at du har læst det ordentligt igennem. Jeg har forklaret dig, hvordan det virker, og hvor det bør sættes ind (og det har Ole også).

Hmm, nu er jeg ikke helt sikker på, hvad du leder efter, men er det noget lignende nedenstående?
<?php

include ('connect.php');
$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 => "December"
);
     
$html = array();

foreach( $months_danish as $key => $month) {
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';

    $month_start = mktime(0, 0, 0, $key, 1, date('Y'));
    $month_end = mktime(23, 59, 59, $key+1, 0, date('Y'));
    $sql = "SELECT * FROM table1 WHERE godkendt='1' AND (date BETWEEN $month_start AND $month_end) ORDER BY date ASC";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        $html[] = '<div id="event_table">';
        $html[] = '<div class="event_date">'.$months_danish[date('n',$row['date'])];
        $html[] = '<br/>'.date('j',$row['date']);
        $html[] = '<br/>'.date('Y',$row['date']).'</div>';
        $html[] = '<div class="event_title"><a href="eventen.php?id='.$row[id].'">'.$row["title"].'</a></div>';   
        $html[] = '</div>';   
    }
    $rss_sql = "SELECT * FROM rss WHERE(dato BETWEEN $month_start AND $month_end) ORDER BY dato ASC";
    $result = mysql_query($rss_sql);
    while ($row = mysql_fetch_array($result)) {
        $html[] = '<div id="event_table">';
        $html[] = '<div class="event_date">'.$months_danish[date('n',$row['dato'])];
        $html[] = '<br/>'.date('j',$row['dato']);
        $html[] = '<br/>'.date('Y',$row['dato']).'</div>';
        $html[] = '<div class="event_title"><a href="eventen.php?id='.$row[id].'">'.$row["title"].'</a></div>';   
        $html[] = '</div>';   
    }

    $html[] = '</div>';
}

Først udskrives events for den pågældende måned - herefter udskrives der rss-feeds fra den pågældende måned.
Avatar billede Slettet bruger
20. juni 2012 - 14:50 #74
Ja det er det som jeg er ude efter, men ved denne løsning kan jeg så sortere dem med ASC eller ligger det fra table1 sig stadig først :-/
Avatar billede inteeeL Nybegynder
20. juni 2012 - 15:24 #75
Ahh, nu er jeg med igen. :-)
Det kan sagtens lade sig gøre. Kan du lige give et dump af henholdsvis rss-tabellen og events-tabellen (jeg skal lige vide, hvad felterne hedder).
Avatar billede Slettet bruger
20. juni 2012 - 15:39 #76
rss
id
title
dato
description        
link

table1
id
title
beskrivelse                        
date       
tid
sted
vert
adresse
region
link
billede
godkendt
Avatar billede inteeeL Nybegynder
20. juni 2012 - 16:14 #77
1. Jeg ville ændre felt-navnene i tabellerne, så de var mere identiske - som her (og på dansk, så der ikke veksles mellem dansk og engelsk):
rss
id
titel
dato
beskrivelse     
link

table1
id
titel
beskrivelse                       
dato     
tid
sted
vert
adresse
region
link
billede


2. Dernæst skal vi opsætte vores sql-string, som kombinerer disse to tabeller. Bemærk, at der er flere måder at gøre dette på, men jeg har valgt at gøre det med union:
SELECT X.*
    FROM (
        SELECT `id`, `titel`, `dato` FROM `tabel1`
        UNION
        SELECT `id`, `titel`, `dato` FROM `rss`
    ) X
ORDER BY X.`dato`


3. Til sidst skal vi have implementeret det i din kode, så et fungerer:
<?php

include ('connect.php');
$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 => "December"
);
     
$html = array();

foreach( $months_danish as $key => $month) {
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';

    $month_start = mktime(0, 0, 0, $key, 1, date('Y'));
    $month_end = mktime(23, 59, 59, $key+1, 0, date('Y'));
    $sql = "SELECT X.* FROM ( SELECT `id`, `titel`, `dato` FROM `tabel1` UNION SELECT `id`, `titel`, `dato` FROM `rss`) X ORDER BY X.`dato`";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        $html[] = '<div id="event_table">';
        $html[] = '<div class="event_date">'.$months_danish[date('n',$row['dato'])];
        $html[] = '<br/>'.date('j',$row['dato']);
        $html[] = '<br/>'.date('Y',$row['dato']).'</div>';
        $html[] = '<div class="event_title"><a href="eventen.php?id='.$row['id'].'">'.$row['titel'].'</a></div>';   
        $html[] = '</div>';   
    }

    $html[] = '</div>';
}

?>

Husk at rette tabellerne, inden du kopierer koden. Bemærk, at rettelserne i tabellerne medfølger, at du sikker skal rette i andre filer (eksempelvis auto_upload.php).
Avatar billede Slettet bruger
20. juni 2012 - 16:35 #78
Hm har gjort som du sagde, men den udskriver slet intet nu .-(
Avatar billede inteeeL Nybegynder
20. juni 2012 - 16:47 #79
Jeg prøver det lige af en gang.
Avatar billede inteeeL Nybegynder
20. juni 2012 - 17:02 #80
Jeg bliver nødt til at smutte nu, jeg kan se på det igen i aften. :-)
Avatar billede Slettet bruger
20. juni 2012 - 17:16 #81
okay super :-)
Avatar billede inteeeL Nybegynder
20. juni 2012 - 23:54 #82
Så burde den være der:
<?php

$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 => "December"
);
     
$html = array();

foreach( $months_danish as $key => $month) {
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';

    $month_start = mktime(0, 0, 0, $key, 1, date('Y'));
    $month_end = mktime(23, 59, 59, $key+1, 0, date('Y'));
    $sql = "SELECT X.* FROM ( SELECT `id`, `titel`, `dato` FROM `tabel1` WHERE (dato BETWEEN $month_start AND $month_end) UNION SELECT `id`, `titel`, `dato` FROM `rss`  WHERE (dato BETWEEN $month_start AND $month_end)) X ORDER BY X.`dato`";
    $result = mysql_query($sql);
    $i = 0;
    while ($row = mysql_fetch_array($result)) {
        $i++;
        $html[] = '<div id="event_table">';
        $html[] = '<div class="event_date">'.$months_danish[date('n',$row['dato'])];
        $html[] = '<br/>'.date('j',$row['dato']);
        $html[] = '<br/>'.date('Y',$row['dato']).'</div>';
        $html[] = '<div class="event_title"><a href="eventen.php?id='.$row['id'].'">'.$row['titel'].'</a></div>';   
        $html[] = '</div>';
        $html[] = $row['titel'].' - '.$row['dato'].' - '.$i.'<br>';
    }

    $html[] = '</div>';
}

echo implode('', $html);

?>

Bemærk, at det vi gør, er, at vi med union samler (merger) felterne til en tabel. Rækkerne fra begge tabeller er altså samlet i en tabel. Hele statementet sorterer herefter tabellen (som kaldes X) efter datoen. Håber det er forståeligt - ellers må du spørge..
Avatar billede inteeeL Nybegynder
21. juni 2012 - 14:46 #83
Hov. Der var vist noget kode indimellem, som jeg brugte som test. Her er den rigtige kode:
<?php

$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 => "December"
);
     
$html = array();

foreach( $months_danish as $key => $month) {
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';

    $month_start = mktime(0, 0, 0, $key, 1, date('Y'));
    $month_end = mktime(23, 59, 59, $key+1, 0, date('Y'));
    $sql = "SELECT X.* FROM ( SELECT `id`, `titel`, `dato` FROM `tabel1` WHERE (dato BETWEEN $month_start AND $month_end) UNION SELECT `id`, `titel`, `dato` FROM `rss`  WHERE (dato BETWEEN $month_start AND $month_end)) X ORDER BY X.`dato`";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        $html[] = '<div id="event_table">';
        $html[] = '<div class="event_date">'.$months_danish[date('n',$row['dato'])];
        $html[] = '<br/>'.date('j',$row['dato']);
        $html[] = '<br/>'.date('Y',$row['dato']).'</div>';
        $html[] = '<div class="event_title"><a href="eventen.php?id='.$row['id'].'">'.$row['titel'].'</a></div>';   
        $html[] = '</div>';
    }

    $html[] = '</div>';
}

echo implode('', $html);

?>
Avatar billede Slettet bruger
26. juni 2012 - 12:59 #84
Okay, det virker, nu har jeg bare 2 problemer.

1) I linket <a> der linker den til eventen.php + det id som kommer med fra databasen, og det skal den også med de events fra 'table1' men de events der kommer fra 'rss' skal jo bare bruge det link som følger med fra feedet.

2)Inden jeg sætter rss 'title' op i databasen, kan jeg så fjerne de 30 første tegn?
Pga. den skriver dag+dato+år inden den rigtige titel og det behøver jeg jo ikke have udskrevet da der jo i forvejen står dato :-)
Avatar billede olebole Juniormester
26. juni 2012 - 13:38 #85
Følger der tolk med til indlægget?
Avatar billede inteeeL Nybegynder
27. juni 2012 - 01:08 #86
1) Jeg tror, du spørger, om det er muligt at skelne mellem de to tabeller. Hvis rækken er fra tabellen "tabel1", skal linket henvis til eventen.php + id, men hvis rækken er fra rss, skal linket henvise til det link, der i forvejen er i databasen. I princippet kan det ikke gøres direkte, da vi i dette tilfælde har opstillet tabellerne, så de i scriptet er identiske. Det, vi i stedet kan gøre, er at tjekke datoen; det er et stamp (som til en vis grad er unik - ikke helt). Vi kan så tjekke, om $row['dato'] (stampet) kan findes i rss-tabellen og ud fra det danne linket. Det kan gøres med nedenstående kode (bemærk variablen $href - her sker tjekket (desuden har jeg tilføjet "link" i sql-en):
<?php

$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 => "December"
);
     
$html = array();

foreach( $months_danish as $key => $month) {
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';

    $month_start = mktime(0, 0, 0, $key, 1, date('Y'));
    $month_end = mktime(23, 59, 59, $key+1, 0, date('Y'));
    $sql = "SELECT X.* FROM ( SELECT `id`, `titel`, `dato`, `link` FROM `tabel1` WHERE (dato BETWEEN $month_start AND $month_end) UNION SELECT `id`, `titel`, `dato`, `link` FROM `rss`  WHERE (dato BETWEEN $month_start AND $month_end)) X ORDER BY X.`dato`";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        $html[] = '<div id="event_table">';
        $html[] = '<div class="event_date">'.$months_danish[date('n',$row['dato'])];
        $html[] = '<br/>'.date('j',$row['dato']);
        $html[] = '<br/>'.date('Y',$row['dato']).'</div>';
        $href = ( mysql_num_rows( mysql_query("SELECT id FROM rss WHERE dato=$row[dato]")) > 0 ? $row['link'] : 'eventen.php?id='.$row['id']);
        $html[] = '<div class="event_title"><a href="'.$href.'">'.$row['titel'].'</a></div>';   
        $html[] = '</div>';
    }

    $html[] = '</div>';
}

echo implode('', $html);

?>


2) Jeg var lige inde og se på rss-feedene fra siden. Det er ikke i alle titler, det drejer sig om de første 30 tegn. Hvad hvis datoen her august i stedet for maj? :-)
Jeg har lavet en lille funktion, der finder det første forholdsord i teksten (jeg er kun stødt på forholdsordene "i" og "ved" - hvis du støder på flere, kan du bare tilføje dem til arrayet). Den exploder strenger, fjerner det, der kommer før forholdsordet og returnerer resten. Du skrev tidligere, at du brugte koden i 59, så den har jeg brugt her:
<?php

function ConvertTitle( $title) {
    $prepositions = array('i', 'ved'); //Tilføj her flere "startord", såfremt du støder på flere
    foreach( $prepositions as $preposition) {
        if( strpos( $title, $preposition) !== false) {
            $expl_title = explode($preposition, $title);
            unset($expl_title[0]);
            $title = $preposition.implode('', $expl_title);
            break;
        }
    }
    return ucfirst($title);
}

$title = utf8_encode(ConvertTitle($item['title']));
$description = utf8_encode($item['description']);
$date = explode('-', $item['pubdate']);
$date = mktime(0,0,0, $date[1], $date[0], $date[2]);
$link = utf8_encode($item['link']);

?>
Avatar billede Slettet bruger
28. juni 2012 - 13:50 #87
inteeL - Okay super 1) virker perfekt :-)

Jeg tænker at det måske er bedre af få 'beskrivelsen' fra 'rss' tabellen skrevet ud da den er mere beskrivende end 'titel' også behøver vi ikke fjerne nogle af de første tegn :-)

Kan jeg få 'beskrivelsen' skrevet ud fra 'rss' men når det er fra 'table1' skal det være 'titel' ?

og kan jeg få links fra 'rss' til at åbne med target='_blank' da den jo egentlig henviser til en anden hjemmeside :-)

og sidste spørgsmål.
den udskriver stadig gamle events fra 'rss' men jeg har faktisk et script som tjekker om datoen er overskredet og slette dem fra databasen, kan jeg flette 'rss' tabellen ind i den, lige nu køre den kun på 'table1' , koden vises herunder:

$idag = time()-(60*60*24);

            $sql = "SELECT `id` FROM `table1` WHERE `godkendt`='1' AND `date`<'".$idag."'";
            $result = mysql_query($sql) or die (mysql_error());
           
            while ($row=mysql_fetch_assoc($result)) {
            unlink("images/fotos/" . $row['billede']);
            unlink("images/fotos/thumb_" . $row['billede']);
            }
           
            $sql = "DELETE FROM `table1` WHERE `godkendt`='1' AND `date`<'".$idag."'";
            mysql_query($sql) or die (mysql_error());


Skal virkelig nok give dig mange point for din store hjælp, det er virkelig værdsat!
Avatar billede inteeeL Nybegynder
29. juni 2012 - 00:49 #88
Jeg tænker at det måske er bedre af få 'beskrivelsen' fra 'rss' tabellen skrevet ud da den er mere beskrivende end 'titel' også behøver vi ikke fjerne nogle af de første tegn :-)

Du har nok ret. "I Købenavn" og "Ved Køge" er ikke særlig beskrivende, hvorfor det måske er smartere at vise beskrivelsen i stedet for.

Kan jeg få 'beskrivelsen' skrevet ud fra 'rss' men når det er fra 'table1' skal det være 'titel' ?

Ja, det kan du sagtens. Egentlig er det på ingen måder svært, så du burde kunne have lavet det selv. :-) Du tjekker ud fra $href-konstanten, om det er en rss-række eller en tabel1-række. Herefter kan du så afgøre, om det er beskrivelse eller titel, der skal vises:
<?php

$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 => "December"
);
     
$html = array();

foreach( $months_danish as $key => $month) {
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';

    $month_start = mktime(0, 0, 0, $key, 1, date('Y'));
    $month_end = mktime(23, 59, 59, $key+1, 0, date('Y'));
    $sql = "SELECT X.* FROM ( SELECT `id`, `titel`, `dato`, `link` FROM `tabel1` WHERE (dato BETWEEN $month_start AND $month_end) UNION SELECT `id`, `titel`, `dato`, `link` FROM `rss`  WHERE (dato BETWEEN $month_start AND $month_end)) X ORDER BY X.`dato`";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        $html[] = '<div id="event_table">';
        $html[] = '<div class="event_date">'.$months_danish[date('n',$row['dato'])];
        $html[] = '<br/>'.date('j',$row['dato']);
        $html[] = '<br/>'.date('Y',$row['dato']).'</div>';
        $href = ( mysql_num_rows( mysql_query("SELECT id FROM rss WHERE dato=$row[dato]")) > 0 ? $row['link'] : 'eventen.php?id='.$row['id']);
        $target = ( $href == $row['link'] ? ' target="_blank"' : '');
        $link_content = ( $href == $row['link'] ? $row['beskrivelse'] : $row['title']);
        $html[] = '<div class="event_title"><a href="'.$href.'"'.$target.'>'.$link_content.'</a></div>';   
        $html[] = '</div>';
    }

    $html[] = '</div>';
}

echo implode('', $html);

?>

og kan jeg få links fra 'rss' til at åbne med target='_blank' da den jo egentlig henviser til en anden hjemmeside :-) <- Det er medtaget i koden ovenfor (se $target).

Ang. dit sidste spørgsmål..
Koden tjekker, om rækken er en dag for gammel. Hvis de ner det, slettes rækken samt billederne. Du kan gøre det samme med rss-tabellen (bare ændre de forskellige felter, så de korresponderer med felterne fra rss-tabellen. :-)
Avatar billede Slettet bruger
01. juli 2012 - 15:04 #89
Tak, det hele spiller bare nu :-)
Jeg tilføjede `beskrivelse` i $sql.

Det eneste problem der er nu, er hvis at 'table1' og 'rss' har en event hvor både 'date' er 'id' er ens, sa udskriver den hele 'beskrivelsen' fra den såkaldte event fra 'table1' og bruger et eksternt link i stedet.

Tjek evt. http://afterlife.dk/prov.php
så du forstår hvad jeg mener, se D. 12 juli 2012

Tror vi skal rette noget i sætningen, hmm men er ikke sikker. håber du kan hjælpe :-)

$href = ( mysql_num_rows( mysql_query("SELECT id FROM rss WHERE date=$row[date]")) > 0 ? $row['link'] : 'eventen.php?id='.$row['id']);
Avatar billede Slettet bruger
05. juli 2012 - 14:55 #90
Er der nogle som kan hjælpe på ovenstående spørgsmål :-)
Avatar billede olebole Juniormester
05. juli 2012 - 16:09 #91
Du sørger vel bare for, at ID aldrig kan være det samme som datoen
Avatar billede Slettet bruger
05. juli 2012 - 17:40 #92
Du mener vel at id og dato i 'table1' ikke skal være den samme som id og dato i 'rss'. ja det ved jeg, men ved ikke hvordan eller om der er en anden løsning.
Avatar billede olebole Juniormester
05. juli 2012 - 21:19 #93
Jeg forstår ikke, hvad du mener. Der er ingen ID'er i rss'en - og jeg ved ikke, hvad du vil bruge et ID til. Derfor kan jeg heller ikke vide, om der findes en løsning ... eller hvad det er, der skal løses  =)
Avatar billede Slettet bruger
07. juli 2012 - 13:52 #94
Når okay, jeg gik bare ud fra at du havde læst #88 og vidste at det var det stykke kode jeg roder rundt i :)
Sorry.
Avatar billede olebole Juniormester
07. juli 2012 - 19:40 #95
Nej, jeg tror, jeg har tabt tråden  =)
Avatar billede inteeeL Nybegynder
08. juli 2012 - 15:53 #96
#89. Jeg tydeliggjorde, at ulempen ved brug af min fremgangsmåde ville være, at hvis er en række med samme dato i både rss- og tabel1-tabellen, ville det ikke spille efter hensigten. Det er simpelthen ikke unikt nok. I stedet for kunne du i begge tabeller tilføje et felt, hvori du oprette en unik string i form af unique_id() eller md5(noget tekst). På den måde er der en rimelig stor sandsynlighed for, at du ikke har en række i rss-tabellen og en række i tabel1-tabellen, som ikke kan adskilles - du har nemlig et unikt felt i begge tabeller.

Jeg beklager det sene svar. :-)
Avatar billede olebole Juniormester
08. juli 2012 - 16:10 #97
- og så bør du nok tænke på, at så lange tråde ikke er særligt realistiske i et forum som Eksperten  =)

Den er nu på 97 indlæg, fordelt over en måned. Du kan sikkert sagtens holde fokus, men vi andre har deltaget i snesevis af tråde i mellemtiden og må derfor læse hele denne tråd op, hvergang vi skal svare på noget  =)
Avatar billede Slettet bruger
11. juli 2012 - 15:32 #98
#96 - Tak :-)
Hvordan adskiller jeg dem så i koden når jeg har oprettet er felt i hver tabel med en unik md5 tekst?
Avatar billede inteeeL Nybegynder
12. juli 2012 - 04:53 #99
Du erstatter bare dato-feltet (som vi før brugte til at adskille tabellerne med) med feltet for den unikke string. Forudsat at dit felt hedder unikt_felt kan du gøre som nedenstående (du kan selv ændre det, som du ønsker):
<?php

$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 => "December"
);
     
$html = array();

foreach( $months_danish as $key => $month) {
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';

    $month_start = mktime(0, 0, 0, $key, 1, date('Y'));
    $month_end = mktime(23, 59, 59, $key+1, 0, date('Y'));
    $sql = "SELECT X.* FROM ( SELECT `id`, `titel`, `dato`, `link` FROM `tabel1` WHERE (dato BETWEEN $month_start AND $month_end) UNION SELECT `id`, `titel`, `dato`, `link` FROM `rss`  WHERE (dato BETWEEN $month_start AND $month_end)) X ORDER BY X.`dato`";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        $html[] = '<div id="event_table">';
        $html[] = '<div class="event_date">'.$months_danish[date('n',$row['dato'])];
        $html[] = '<br/>'.date('j',$row['dato']);
        $html[] = '<br/>'.date('Y',$row['dato']).'</div>';
        $href = ( mysql_num_rows( mysql_query("SELECT id FROM rss WHERE unikt_felt=$row[unikt_felt]")) > 0 ? $row['link'] : 'eventen.php?id='.$row['id']);
        $target = ( $href == $row['link'] ? ' target="_blank"' : '');
        $link_content = ( $href == $row['link'] ? $row['beskrivelse'] : $row['title']);
        $html[] = '<div class="event_title"><a href="'.$href.'"'.$target.'>'.$link_content.'</a></div>';   
        $html[] = '</div>';
    }

    $html[] = '</div>';
}

echo implode('', $html);

?>


@Ole: Helt enig, der burde nok have været oprettet en ny tråd. :-)
Avatar billede Slettet bruger
15. juli 2012 - 21:34 #100
Hey inteeL - Tak for alt din hjælp.
jeg kunne ikke få det til at virke, da den så viser title fra 'rss' og den skulle jo vise beskrivelsen.

Bruger jeg ikke kun unikt_felt fra 'rss' tabellen eller bruger jeg det også fra table1?
Jeg synes nemlig du skrev jeg skulle oprette et felt i begge tabeller, men så vidt jeg kan se i koden fra #99 bruger vi jo kun den fra 'rss' i nedenstående sætning:

$href = ( mysql_num_rows( mysql_query("SELECT id FROM rss WHERE unikt_felt=$row[unikt_felt]")) > 0 ? $row['link'] : 'eventen.php?id='.$row['id']);

Jeg spørger fordi jeg er i tvivl om virkningen :-)

Og ja jeg kunne godt tænke mig at sætte en limit på 15 på sql'en men har prøvet uden held og kan ikke lige gennemskue det, håber du kan hjælpe en sidste gang.

Som du og ole har skrevet er det nok bedst jeg opretter en ny tråd hvis jeg har flere spørgsmål, men håber du vil svare på ovenstående, så skal jeg nok tildele dig points og så lukker vi den her :-)
mange tak for hjælpen, alle sammen.
Avatar billede inteeeL Nybegynder
15. juli 2012 - 22:56 #101
Jeg tror desværre, der vil blive en del flere svar, hvis vi fortsætter på ovenstående. Jeg sender dig i stedet en PM.
Avatar billede Slettet bruger
16. juli 2012 - 10:54 #102
Super, iv et svar og modtag points :-)
Avatar billede Slettet bruger
20. august 2012 - 12:08 #103
Jeg lukker denne tråd nu, da ingen har meldt sig på point fronten :-)
er stadig ved at finde en løsning :-(
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