Avatar billede fun22 Nybegynder
03. november 2004 - 18:57 Der er 45 kommentarer og
1 løsning

Dagens artikel

Hej

Hvordan laver jeg en dagens artikel funktion på min side?

Altså hver dag skal den hente en artikel fra databasen..

Hvordan gøres det?
Avatar billede filename Nybegynder
03. november 2004 - 18:58 #1
Hvis du søger det i PHP har jeg et liggene jeg lavede en til Netstations avis.
Avatar billede fun22 Nybegynder
03. november 2004 - 19:29 #2
Asp... som kategorien hedder...
Avatar billede hiks Nybegynder
03. november 2004 - 20:10 #3
har du en samling af artikler som ligger i databasen? og så skal den vælge en tilfældig?

/hiks
Avatar billede fun22 Nybegynder
03. november 2004 - 20:12 #4
ja jeg har en database med artiklerne.. (mysql) og den skal vælge en tilfældig.. Det skal dog være den samme tilfældige hele dagen... hvis du forstår
Avatar billede hiks Nybegynder
03. november 2004 - 20:49 #5
hej

har lige leget lidt - fordi jeg havde lidt tid. Har gemt information i applications variable på serveren - som du både kan have positive og negative tanker omkring. Hvis du har en server der tit genstarter ja - så kan der opstå forskellige artikler fra dag til dag - ellers burde det være stabilt.

Håber du kan bruge det og se ideen i det..

/hiks

<%
Function VaelgTip(artikelid)

    If artikelid = "" then
        dim sql

        SQL = "SELECT * FROM dintabel WHERE status = 'Færdigredigeret';"
        'fyr din sql af i recordsset
       
        '//Den skal slås til og rettes til dit recordset
        'arrayRS = ditRS.GetRows()
        dim arrayRS(1,2)
       
        '//Følgende er testdata du skal selvfølgelig klippe nedenstående væk når du kobler database på
        arrayRS(0,0) = "Hans og Grethe"
        arrayRS(0,1) = "Der var engang..."
        arrayRS(0,2) = 1 'VIGTIGT artikelid'et i databasen
       
        arrayRS(1,0) = "Hans og Grethe 2"
        arrayRS(1,1) = "Der var engang for længe siden..."
        arrayRS(1,2) = 2 'VIGTIGT artikelid'et i databasen

        If IsArray(arrayRS) = True then
            Randomize 'tilfældig
           
            maxTal = Ubound(arrayRS, 2) 'finder antal records
            maxTal = Int(Rnd * maxTal) 'finder et tilfældigt tal
           
            Application("artikel") = arrayRS(maxTal, 2) 'sætter dagens artikelid
           
            Response.Write "Overskrift: <b>" & arrayRS(maxTal, 0) & "</b><br>"
            Response.Write "Tekst: <b>" & arrayRS(maxTal, 1) & "</b><br>"
        Else
            'fejl opstået
        End if
    Else
        SQL = "SELECT * FROM dintabel WHERE artikelID = " & artikelid & ";"
        'fyr i database
        'If ditRS.EOF = False then
        '    Response.Write "Overskrift: <b>" & arrayRS(maxTal, 0) & "</b><br>"
        '    Response.Write "Tekst: <b>" & arrayRS(maxTal, 1) & "</b><br>"
        'End if
        Response.Write "Denne artikel skal udskrives når database kommer med: " & artikelid
    End if

End Function


dim today

today = Application("dato")

If today <> Date() then
    Application("dato") = Date()
    VaelgTip()
Else
    VaelgTip(Application("artikel"))
End if

%>
Avatar billede medievil Nybegynder
04. november 2004 - 11:17 #6
Kunne man ik bare hente fra en database where date = now()? eller noget?
Avatar billede hiks Nybegynder
04. november 2004 - 11:21 #7
jow - men det kræver vel at man planlægger først hvilke artikler på hvilke dage!

/hiks
Avatar billede fun22 Nybegynder
04. november 2004 - 18:17 #8
hiks >>
Hvis det id den vælger som "dagens id" ikke er i databasen så skriver den ikke noget..

Nogen artikler bliver jo slettet igen.. Så der er huller i id rækken.. eks så eksistere id: 10, 11, 18, 20, 21. Så hvis din kode vælger id 14 så sker der ikke noget.. ud over at den skriver: Denne artikel skal udskrives når database kommer med: 14
Avatar billede hiks Nybegynder
04. november 2004 - 18:19 #9
nej - det er jo lige præcis det der IKKE sker da den baserer sig på et dagligt SQL udtræk - så medmindre at dagens artikel bliver slettet på dagen så er der intet problem.

/hiks
Avatar billede hiks Nybegynder
04. november 2004 - 18:20 #10
ellers så er det min opfattelse af navnet dagens artikel der skal revideres i hvert fald.

/hiks
Avatar billede fun22 Nybegynder
04. november 2004 - 18:27 #11
har fundet ud af det.. det var mig der havde lavet en fejl ;)

Men den kommer med en fejl i dim arrayRS(1,2)

Type mismatch: 'arrayRS'
Avatar billede hiks Nybegynder
04. november 2004 - 18:28 #12
ja du skal ikke

dim arrayRS(1,2)

når du bruger metoden

getrows

så det sletter du bare!

/hiks
Avatar billede fun22 Nybegynder
04. november 2004 - 18:36 #13
ok nu virker det..

Hvor definere man feltet med id'erne i??

For lige nu bruger den titlen som id, så det virker ikke helt..

Titel er nummer to i databasen og id er nummer et
Avatar billede hiks Nybegynder
04. november 2004 - 19:07 #14
altså nummer to kolonne?

så svarer det til 1 i arrayet ' da arrays tæller fra 0!

arrayRS(i, 1)

/hiks
Avatar billede fun22 Nybegynder
04. november 2004 - 19:26 #15
Lige nu ser funktione sådan her ud:

If artikelid = "" then
        dim sql

        SQL = "SELECT * FROM artikler WHERE status = 'Godkendt';"
        Set ditrs = Conn.Execute(SQL)

        'fyr din sql af i recordsset
       
        '//Den skal slås til og rettes til dit recordset
        arrayRS = ditRS.GetRows()
               
        If IsArray(arrayRS) = True then
            Randomize 'tilfældig
           
            maxTal = Ubound(arrayRS, 2) 'finder antal records
            maxTal = Int(Rnd * maxTal) 'finder et tilfældigt tal
           
            Application("artikel") = arrayRS(maxTal, 2) 'sætter dagens artikelid
           
            Response.Write "Overskrift: <b>" & ditrs("titel") & "</b><br>"
            Response.Write "Tekst: <b>" & ditrs("underskrift") & "</b><br>"
        Else
            'fejl opstået
        End if
    Else
        SQL = "SELECT * FROM artikler WHERE ID = " & artikelid & ";"
        Set ditrs = Conn.Execute(SQL)
        'fyr i database
        If ditRS.EOF = False then
            Response.Write "Overskrift: <b>" & ditrs("titel") & "</b><br>"
            Response.Write "Tekst: <b>" & ditrs("underskrift") & "</b><br>"
        End if
        Response.Write "Denne artikel skal udskrives når database kommer med: " & artikelid
    End if

I tabellen "Artikler" er der så følgende kolonner:

id | titel | resume.....

Det er id feltet den skal hente id'et fra ikke titlen...
Avatar billede hiks Nybegynder
04. november 2004 - 19:57 #16
If artikelid = "" then
        dim sql

        SQL = "SELECT * FROM artikler WHERE status = 'Godkendt';"
        Set ditrs = Conn.Execute(SQL)

        'fyr din sql af i recordsset
       
        '//Den skal slås til og rettes til dit recordset
        arrayRS = ditRS.GetRows()
               
        If IsArray(arrayRS) = True then
            Randomize 'tilfældig
           
            maxTal = Ubound(arrayRS, 2) 'finder antal records
            maxTal = Int(Rnd * maxTal) 'finder et tilfældigt tal
           
            Application("artikel") = arrayRS(maxTal, 0) 'sætter dagens artikelid
           
            Response.Write "Overskrift: <b>" & arrayRS(maxTal, 1) & "</b><br>"
            Response.Write "Tekst: <b>" & arrayRS(maxTal, 2) & "</b><br>"
        Else
            'fejl opstået
        End if
    Else
        SQL = "SELECT * FROM artikler WHERE ID = " & artikelid & ";"
        Set ditrs = Conn.Execute(SQL)
        'fyr i database
       
        If ditRS.EOF = False then
            Response.Write "Overskrift: <b>" & ditrs("titel") & "</b><br>"
            Response.Write "Tekst: <b>" & ditrs("resume") & "</b><br>"
        End if

    End if
Avatar billede fun22 Nybegynder
05. november 2004 - 23:05 #17
Så nu virker funktionen sådan set som den skal... Men første gang man går ind på siden skriver den:

Wrong number of arguments or invalid property assignment: 'VaelgTip'

det kommer i denne linie:

If today <> Date() then
    Application("dato") = Date()
    VaelgTip() <--------------------
Else
    VaelgTip(Application("artikel"))
End if

Hvis man så opdatere så forsvinder fejlen...
Avatar billede hiks Nybegynder
06. november 2004 - 00:25 #18
fino... så er vi ved at være der!

Jeg vil tro du kan gøre det på to måder:

Du kan kalde funktionen:

VaelgTip(Null)

eller

VaelgTip(-1) så skal du bare være opmærksom på at oppe i funktionen skal du bare tjekke for:

If artikelid = "-1" then istedet for bare: If artikelid = "" then

/hiks
Avatar billede fun22 Nybegynder
06. november 2004 - 08:51 #19
Sådan!! Har afsat lidt flere points... Tak for hjælpen ;)
Avatar billede fun22 Nybegynder
07. november 2004 - 14:31 #20
Hiks >>

Der er noget galt.. Nogen gange så er "artikelid" = et tal.. eks. 2 som det også skal være. Men en gang i mellem så bruger den tekst... Titlen på artiklen. Og så kommer der jo en fejl...
Avatar billede hiks Nybegynder
07. november 2004 - 14:46 #21
nej det kan jo ikke passe... hmmm!

Er der noget sted i din kode hvor vi ikke har fået rettet det med:

Application("artikel") = arrayRS(maxTal, 0) 'sætter dagens artikelid

eller kommer til at sende en tekst med ned i funktionen? Jeg kan ikke lige se pt. hvor det skulle være. Men prøv at kig igennem og se om du kan spotte et sted hvor vi ikke har fået ovenstående rettet.

/hiks
Avatar billede fun22 Nybegynder
07. november 2004 - 14:56 #22
ved ikke om det kan være den her:

maxTal = Ubound(arrayRS, 2) 'finder antal records

Om 2 tallet skal ændres til noget andet..
Avatar billede hiks Nybegynder
07. november 2004 - 14:58 #23
nej det er det ik... prøv lige at paste din kodning ind. Så skal jeg nok lige løbe det igennem...

/hiks
Avatar billede fun22 Nybegynder
07. november 2004 - 15:14 #24
<%
Function VaelgTip(artikelid)

    If artikelid = "" then
        dim sql

        SQL = "SELECT * FROM artikler WHERE status = 'Godkendt';"
        Set ditrs = Conn.Execute(SQL)

        'fyr din sql af i recordsset
       
        '//Den skal slås til og rettes til dit recordset
        arrayRS = ditRS.GetRows()
               
        If IsArray(arrayRS) = True then
            Randomize 'tilfældig
           
            maxTal = Ubound(arrayRS, 2) 'finder antal records
            maxTal = Int(Rnd * maxTal) 'finder et tilfældigt tal
           
            Application("artikel") = arrayRS(maxTal, 0) 'sætter dagens artikelid
            %>
            <tr>
                            <td class="line" height="1"></td>
                        </tr>
                        <tr>
                            <td height="5"></td>
                        </tr>
                        <tr>
                            <td>
                                <h1>Dagens artikel</h1>
                            </td>
                        </tr>
                        <tr>
                            <td>
                            <h2><%=ditrs("titel")%></h2>   
                            </td>
                        </tr>
                        <tr>
                            <td class="tekst">
                            <br>
                            <table class="content" cellpadding="0" cellspacing="0" align="center" width="100%">
                              <tr>
                                  <td width="100%"><img border="0" src="/images/artikler/<%=ditrs("id")%>/<%=ditrs("illu")%>" align="left"><%=Left(ditrs("underskrift"),500)%>...</td>
                                </tr>
                            </table>
                            <br>
                            </td>
                        </tr>
        <%Else
            'fejl opstået
        End if
    Else
        SQL = "SELECT * FROM artikler WHERE titel = '" & artikelid & "'"
        Set ditrs = Conn.Execute(SQL)
        'fyr i database
        If ditRS.EOF = False then%>
        <tr>
                            <td class="line" height="1"></td>
                        </tr>
                        <tr>
                            <td height="5"></td>
                        </tr>
                        <tr>
                            <td>
                                <h1>Dagens artikel</h1>
                            </td>
                        </tr>
                        <tr>
                            <td>
                            <h2><%=ditrs("titel")%></h2>   
                            </td>
                        </tr>
                        <tr>
                            <td class="tekst">
                            <br>
                            <table class="content" cellpadding="0" cellspacing="0" align="center" width="100%">
                              <tr>
                                  <td width="100%"><img border="0" src="/images/artikler/<%=ditrs("id")%>/<%=ditrs("illu")%>" align="left"><%=Left(ditrs("underskrift"),500)%>...</td>
                                </tr>
                            </table>
                            <br>
                            </td>
                        </tr>
        <%End if

    End if

End Function


dim today

today = Application("dato")

If today <> Date() then
    Application("dato") = Date()
    VaelgTip(null)
Else
    VaelgTip(Application("artikel"))
End if

%>
Avatar billede hiks Nybegynder
07. november 2004 - 15:47 #25
prøv lige at lav denne:

If artikelid = "" then

til:

If artikelid = "" Or artikelid = "null" then

eller:

If artikelid = "" Or IsNull(artikelid) = True then

/hiks
Avatar billede fun22 Nybegynder
07. november 2004 - 15:51 #26
tester lige i morgen.. nu skal den jo nulstilles først...
Avatar billede hiks Nybegynder
07. november 2004 - 15:51 #27
jeg kan endvidere se at du ikke er så glad for at bruge arrayet - du bør bruge

arrayet her i stedet for <%=ditrs("titel")%> så kommer det til at se sådan ud:

arrayRS(maxTal, kolonnen_hvor_titel_er_attribut)

/hiks
Avatar billede fun22 Nybegynder
08. november 2004 - 19:24 #28
Hmm det virker stadig væk ikke... Nogen gange viser den slet ingen ting og andre gange en fejl... her er koden som den ser ud nu:

<%
Function VaelgTip(artikelid)

    If artikelid = "" Or IsNull(artikelid) = True then
        dim sql

        SQL = "SELECT * FROM artikler WHERE status = 'Godkendt';"
        Set ditrs = Conn.Execute(SQL)

        'fyr din sql af i recordsset
       
        '//Den skal slås til og rettes til dit recordset
        arrayRS = ditRS.GetRows()
               
        If IsArray(arrayRS) = True then
            Randomize 'tilfældig
           
            maxTal = Ubound(arrayRS, 2) 'finder antal records
            maxTal = Int(Rnd * maxTal) 'finder et tilfældigt tal
           
            Application("artikel") = arrayRS(maxTal, 0) 'sætter dagens artikelid
            %>
            <tr>
                            <td class="line" height="1"></td>
                        </tr>
                        <tr>
                            <td height="5"></td>
                        </tr>
                        <tr>
                            <td>
                                <h1>Dagens artikel</h1>
                            </td>
                        </tr>
                        <tr>
                            <td>
                            <h2><a href="/artikler/artikel_vis.asp?id=<%=arrayRS(maxTal, 0)%>" class="h2"><%=arrayRS(maxTal, 1)%></a></h2>   
                            </td>
                        </tr>
                        <tr>
                            <td class="tekst">
                            <br>
                            <table class="content" cellpadding="0" cellspacing="0" align="center" width="100%">
                              <tr>
                                  <td width="100%"><img border="0" src="/images/artikler/<%=arrayRS(maxTal, 0)%>/<%=arrayRS(maxTal, 5)%>" align="left"><%=Left(arrayRS(maxTal, 3),500)%>...</td>
                                </tr>
                            </table>
                            <br>
                            </td>
                        </tr>
        <%Else
            'fejl opstået
        End if
    Else
        SQL = "SELECT * FROM artikler WHERE titel = '" & artikelid & "'"
        Set ditrs = Conn.Execute(SQL)
        'fyr i database
        If ditRS.EOF = False then%>
        <tr>
                            <td class="line" height="1"></td>
                        </tr>
                        <tr>
                            <td height="5"></td>
                        </tr>
                        <tr>
                            <td>
                                <h1>Dagens artikel</h1>
                            </td>
                        </tr>
                        <tr>
                            <td>
                            <h2>
                            <a href="/artikler/artikel_vis.asp?id=<%=ditrs("id")%>" class="h2"><%=ditrs("titel")%></a>   
                            </h2>
                            </td>
                        </tr>
                        <td class="tekst">
                            <br>
                            <table class="content" cellpadding="0" cellspacing="0" align="center" width="100%">
                              <tr>

                          <td width="100%"><img border="0" src="/images/artikler/<%=ditrs("id")%>/<%=ditrs("illu")%>" align="left"><%=Left(ditrs("underskrift"),500)%>...</td>
                                </tr>
                            </table>
                            <h2>
                            <br>
                            </td>
                        </tr>
        <%End if

    End if

End Function


dim today

today = Application("dato")

If today <> Date() then
    Application("dato") = Date()
    VaelgTip(null)
Else
    VaelgTip(Application("artikel"))
End if

%>

Kan det have noget at sige at det er en mysql database??
Avatar billede hiks Nybegynder
08. november 2004 - 20:42 #29
nej det har ikke noget at sige at det er en mysql database.

Er det din lokale maskine du kører den på?

- der er et sted hvor der står: 'fejl opstået - der hopper den ned hvis den ikke har fat i et array - prøv og se om det er der den hopper ned når du ikke får noget ud. Det gør du ved at response.write "Fejl - intet array!" eller lign.

Kan du ikke når den anden fejl opstår lige paste den ind her - så kan jeg lidt nemmere finde ud af hvad det er.

hvis du vil teste det idag - så laver du jo bare en anden today variabel som du skriver manuelt. Eksempelvis sådan den altid bliver anderledes end dags dato!

today = "test"
Avatar billede fun22 Nybegynder
09. november 2004 - 17:29 #30
Her er fejlen:

Microsoft VBScript runtime error '800a0009'

Subscript out of range: '[number: 5]'

/Default.asp, line 77

Linie 77 er denne:
<td width="100%"><img border="0" src="/images/artikler/<%=arrayRS(maxTal, 0)%>/<%=arrayRS(maxTal, 5)%>" align="left"><%=Left(arrayRS(maxTal, 3),500)%>...</td>

Den kommer kun en gang om dagen... Hvis man så opdatere så virker det..
Avatar billede hiks Nybegynder
09. november 2004 - 17:34 #31
<%=arrayRS(maxTal, 5)%> - det må være den så - har du 6 attributter i dit udtræk?

/hiks
Avatar billede fun22 Nybegynder
09. november 2004 - 17:37 #32
ja.. kolonne 6 hedder "illu"..
Avatar billede hiks Nybegynder
09. november 2004 - 17:42 #33
det lyder mærkeligt. Du er sikker på at det ikke er plads 4? Arrayet tæller fra 0!

/hiks
Avatar billede fun22 Nybegynder
09. november 2004 - 17:46 #34
ja og når jeg tæller sådan så er feltet "illu" nummer 5...
Har 10 felter i tabellen... (9 hvis man tæller 0 med)
Avatar billede hiks Nybegynder
09. november 2004 - 18:25 #35
mærkeligt - det er ikke fordi den er tom så? Altså at der ikke er nogen illu defineret?

hvormange rækker har du i din tabel lige pt.? >5 eller <5?

/hiks
Avatar billede fun22 Nybegynder
09. november 2004 - 19:24 #36
der er 4..
Avatar billede hiks Nybegynder
09. november 2004 - 19:32 #37
åh ja - det er klart! Det er mig der stener lidt - prøv:

maxTal = Int(Rnd * (maxTal - 1) 'finder et tilfældigt tal

/hiks
Avatar billede fun22 Nybegynder
16. november 2004 - 19:11 #38
det er lidt forskelligt hvad fejl den kommer med nu... Lige nu er det:

Microsoft VBScript runtime  error '800a0009'

Subscript out of range: 'maxTal'

/Default.asp, line 54

i denne linie:
Application("artikel") = arrayRS(maxTal, 0) 'sætter dagens artikelid
Avatar billede hiks Nybegynder
16. november 2004 - 22:31 #39
og du har rettet ovenstående?

/hiks
Avatar billede hiks Nybegynder
16. november 2004 - 22:32 #40
altså:

maxTal = Ubound(arrayRS, 2) 'finder antal records
maxTal = Int(Rnd * (maxTal - 1)) 'finder et tilfældigt tal
           
Application("artikel") = arrayRS(maxTal, 0) 'sætter dagens artikelid

/hiks
Avatar billede fun22 Nybegynder
17. november 2004 - 15:28 #41
Ok.. så er vi tilbage ved fejlen i indlæg: 09/11-2004 17:29:00

har lokaliseret det til denne her: <%=arrayRS(maxTal, 5)%>
Det er den der laver fejlen..

Tabellen ser sådan her ud:
id, titel, artikel, underskrift, ekstra, illu, forfatter, dato, status, kategori

Det jeg skal hente med <%=arrayRS(maxTal, 5)%>  er feltet "illu"....
Avatar billede hiks Nybegynder
17. november 2004 - 15:41 #42
ok - det er pinligt det her... Den skulle være i orden mht. dine felter - problemet er at den generer for høje tilfældige tal.

prøv lige at erstatte følgende i din kode:

maxTal = Int(Rnd * maxTal) 'finder et tilfældigt tal

med:

maxTal = Int(Rnd * maxTal) - 1 'finder et tilfældigt tal

Håber vi finder ud af det til sidste :s

/hiks
Avatar billede fun22 Nybegynder
17. november 2004 - 16:17 #43
har den jo allerede sådan her:
maxTal = Int(Rnd * (maxTal -1))

Og hvis jeg ændre den til det du skriver så kommer den med:

Subscript out of range: 'maxTal'

Ja mon ikke det kommer på et tidspunkt ;)
Avatar billede hiks Nybegynder
17. november 2004 - 16:47 #44
det virker bare så mærkeligt...

Rnd = giver et tal mellem 0 - 1
maxTal = får samlet antal af records startende fra 0

så hvis vi tog Rnd og maxTal og gangede sammen ville disse aldrig komme ud over den grænse, vel? Prøv at fjern de -1. Ellers fatter jeg virkelig minus af dette.

/hiks
Avatar billede fun22 Nybegynder
17. november 2004 - 17:54 #45
rnd kan vel give et tal mellem 0 og u-endeligt??

Skal man ikke definere at det skal være et tal mellem 0 og 1??
Avatar billede hiks Nybegynder
17. november 2004 - 18:03 #46
nej kun tal mellem 0-1.

så det burde jo være i orden!

det er derfor at det tal man ganger på er den der styrer!

/hiks
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
Kurser inden for grundlæggende programmering

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