Avatar billede svjensen Nybegynder
14. oktober 2003 - 13:54 Der er 3 kommentarer og
1 løsning

Opdatering af holddatabase, problemer med SQL kald.

Vha. nedenstående .asp side får brugeren indledningsvis vist holdsammensætninger, og såfremt man er givet admin rettigheder, kan man redigere sammensætningen, hvorefter scriptet opdaterer databasen.

Scriptet har tidligere virket, men af andre årsager har vi justeret i medlemsnummeret, hvilket åbenbart har skabt nogle problemer.

Lige nu er indholdet i tabellen 'hold' følgende:

uid teamid medlemsnr
46 1 004
45 1 012
44 2 032
43 2 008
42 2 062
41 2 026

Men scriptet viser kun én person fra hvert hold (henholdsvis 012 og 026). På tilsvarende vis bliver kun samme spiller vist som værende på holdet, når man vælger 'rediger'.
Scriptet kan godt finde ud af at tilføje en ny spiller til databasen, men fjerner ikke dem der ikke er 'checked'

Jeg er ret overbevist om at fejlen er i sql sætningen:

strSQLSpillere = "SELECT medlemmer.medlemsnr, email, fornavn, efternavn, cprnr, spillertype FROM medlemmer "
strSQLSpillere = strSQLSpillere & "INNER JOIN hold ON hold.medlemsnr = medlemmer.medlemsnr "
strSQLSpillere = strSQLSpillere & "INNER JOIN spillertype ON spillertype.spillertypeid = medlemmer.spillertypeid "
strSQLSpillere = strSQLSpillere & "WHERE hold.teamid = '" & rsTeams("teamid") & "' ORDER BY fornavn ASC"

Her kommer hele .asp filen:
/////////////// Start //////////////////
<!--#include file="include/connection.asp"-->
<!--#include file="include/function-alder.asp"-->
<html>

<head>
<meta http-equiv="Content-Language" content="da">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<link rel="stylesheet" type="text/css" href="css/bball.css">
</head>


<body>
<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>
<script language="JavaScript" src="include/overlib.js"><!-- overLIB (c) Erik Bosrup --></script>

<%

If request.querystring("action") = "rediger" AND LCase(Session("admin")) = "ja" Then

    strSQL = "SELECT * FROM teams WHERE teamid = " & request.querystring("team")
    set rsTeams = conn.execute(strSQL)
   
    response.write "<h3>Hold beskrivelsen</h3>"
    response.write "<form action='teams.asp?action=update&team=" & request.querystring("team") & "' method=post>"
    response.write "<TEXTAREA cols=55 rows=5 name=txtbeskrivelse>" & rsTeams("beskrivelse") & "</TEXTAREA><br><br>"

    response.write "<table border=1 align=center width='75%'>"
    response.write "<tr><th colspan=2>" & rsTeams("teamnavn") & "<br>" & rsTeams("raekke") & "</th>"
    response.write "<td><input type=submit value='Opdater holdet'></td></tr>"

    strSQLSPillere = "SELECT medlemmer.medlemsnr, fornavn, efternavn, teamid "
    strSQLSpillere = strSQLSpillere & "FROM medlemmer "
    If Request.ServerVariables("REMOTE_ADDR") = "127.0.0.1" Then
        strSQLSpillere = strSQLSpillere & "LEFT JOIN hold ON medlemmer.medlemsnr = int(hold.medlemsnr) "
    Else
        strSQLSpillere = strSQLSpillere & "LEFT JOIN hold ON medlemmer.medlemsnr = hold.medlemsnr "
    End If
    strSQLSpillere = strSQLSpillere & "ORDER BY fornavn ASC"
    set rsSpillere = conn.execute(strSQLSpillere)

    While not rsSpillere.EOF
        Response.write "<TD class=TDRadioButton><INPUT TYPE='checkbox' value=" & rsSpillere("medlemsnr") & " name='chk1' class=radiobutton"
        If int(rsSpillere("teamid")) = int(rsTeams("teamid")) Then
            response.write " checked>"
        Else
            response.write ">"
        End If
           
        response.write "</td>"
        response.write "<td>" & rsSpillere("fornavn") & " " & rsSpillere("efternavn") & "</td></tr>"
        rsSpillere.MoveNext
    Wend

    response.write "</form>"
    response.write "</table>"

ElseIf request.querystring("action") = "update" AND LCase(Session("admin")) = "ja" Then

    strSQLTeams = "update teams set beskrivelse = '" & request.form("txtbeskrivelse") & "' where teamid = " & request.querystring("team")
    set rsTeams = conn.execute(strSQLTeams)

    team = request.querystring("team")
    Arr_Numre = Split(Request.Form("chk1"), ",")

    'Først kontrolleres at alle holdmedlemmer er oprettet, ellers bliver de det.
    For i = 0 To UBound(Arr_Numre)
        strSQL1 = "SELECT * FROM hold WHERE medlemsnr = '" & Arr_Numre(i) & "' AND teamid = '" & team & "'"
        set rs1 = conn.execute(strSQL1)

        If rs1.BOF AND rs1.EOF Then
            strSQL2 = "INSERT INTO hold (medlemsnr, teamid) VALUES ('" & Arr_Numre(i) & "', '" & team & "')"
            set rs2 = conn.execute(strSQL2)
        End If
    Next

    strSQL = "SELECT medlemsnr FROM medlemmer"
    set rs = conn.execute(strSQL)

    While not rs.EOF
        match = "FALSE"
        For i = 0 To UBound(Arr_Numre)
            If rs("medlemsnr") = Arr_Numre(i) Then match = "TRUE"
        Next

        If match = "FALSE" Then
            strSQL3 = "SELECT * FROM hold WHERE medlemsnr = '" & rs("medlemsnr") & "' AND teamid = " & team & ""
            set rs3 = conn.execute(strSQL3)

            If rs3.BOF and rs3.EOF Then
            Else
                strSQL4 = "DELETE FROM hold WHERE medlemsnr = '" & rs("medlemsnr") & "' AND teamid = " & team & ""
                set rs4 = conn.execute(strSQL4)
            End If
        End If

        rs.movenext
    Wend
Else
    response.write "<h1>Klubbens hold</h1>"

    strSQLTeams = "SELECT * FROM teams order by sortering"
    set rsTeams = conn.execute(strSQLTeams)

    While not rsTeams.EOF
    response.write "<table border=1 align=center width='50%'>"

        response.write "<tr><th colspan=2 width='85%'>" & rsTeams("teamnavn") & "<br>" & rsTeams("raekke") %>
        </th><th width='15%'><a href="java script:void(0);" onmouseover="return overlib('<%= rsTeams("beskrivelse") %>');" onmouseout="return nd();">info</a></th>
<%        If Session("admin") = "JA" Then
            response.write "<td><form action='teams.asp?action=rediger&team=" & rsTeams("teamid") & "' method=post>"
            response.write "<input type=submit value='Rediger'></form></td></tr>"
        Else
            response.write "</tr>"
        End If

        If Request.ServerVariables("REMOTE_ADDR") = "127.0.0.1" Then
            strSQLSpillere = "SELECT medlemmer.medlemsnr, email, fornavn, efternavn, cprnr, spillertype "
            strSQLSpillere = strSQLSpillere & "FROM ((medlemmer INNER JOIN hold ON int(hold.medlemsnr) = medlemmer.medlemsnr) "
            strSQLSpillere = strSQLSpillere & "INNER JOIN spillertype ON spillertype.spillertypeid = medlemmer.spillertypeid) "
            strSQLSpillere = strSQLSpillere & "WHERE hold.teamid = " & rsTeams("teamid") & " ORDER BY fornavn ASC"
        Else
            strSQLSpillere = "SELECT medlemmer.medlemsnr, email, fornavn, efternavn, cprnr, spillertype FROM medlemmer "
            strSQLSpillere = strSQLSpillere & "INNER JOIN hold ON hold.medlemsnr = medlemmer.medlemsnr "
            strSQLSpillere = strSQLSpillere & "INNER JOIN spillertype ON spillertype.spillertypeid = medlemmer.spillertypeid "
            strSQLSpillere = strSQLSpillere & "WHERE hold.teamid = '" & rsTeams("teamid") & "' ORDER BY fornavn ASC"
        End If
        set rsSpillere = conn.execute(strSQLSpillere)

        While not rsSpillere.EOF
            alder = ReturnAlder(rsSpillere("cprnr"))

            filnavn = "members/" & rsSpillere("medlemsnr") & ".jpg"
            Set FSO = CreateObject("Scripting.FileSystemObject")
            If FSO.FileExists(filnavn) Then %>
                <tr><td>
                <a onmouseover="return overlib('', BORDER, 1, BACKGROUND, '<%= filnavn %>',HEIGHT, -30, CENTER, ABOVE, WIDTH, 60, HEIGHT, 90);"  onmouseout="return nd();">
                <img src="images/foto-thumb.gif" border=0></a> <a href="mailto:<%= rsSpillere("email") %>"><%= rsSpillere("fornavn") %>&nbsp;<%= rsSpillere("efternavn") %></a></td>
<%                response.write "<td class=TDRight>" & alder & " år</td><td class=TDRight>&nbsp;" & rsSpillere("spillertype") & "</td></tr>"

            Else %>
                <tr><td><a href="java script:void(0);" onmouseover="return overlib('Billede er på vej.', WIDTH, 105);" onmouseout="return nd();">
                <img src="images/foto-thumb.gif" border=0></a> <a href="mailto:<%= rsSpillere("email") %>"><%= rsSpillere("fornavn") %>&nbsp;<%= rsSpillere("efternavn") %></a></td>
<%                response.write "<td class=TDRight>" & alder & " år</td><td class=TDRight>&nbsp;" & rsSpillere("spillertype") & "</td></tr>"
            End If

            rsSpillere.MoveNext
        Wend

        rsTeams.MoveNext
    response.write "</table><br>"

    Wend

End If
%>

</body>
</html>
<!--#include file="include/close.asp"-->
////////////// SLUT /////////////////////
Avatar billede svjensen Nybegynder
14. oktober 2003 - 14:00 #1
Jeg skylder lige at sige, at jeg anvender MySQL version 3.23.54
Avatar billede svjensen Nybegynder
14. oktober 2003 - 14:38 #2
Jeg har prøvet følgende SQL kald:
select medlemmer.medlemsnr, fornavn, teamid from hold left join medlemmer on medlemmer.medlemsnr = hold.medlemsnr

Og har fået følgende resultat:
uid medlemsnr fornavn teamid
46                    1
45  012      Bo      1
44                    2
43                    2
42                    2
41  026      Adulovic 2


Jeg har svært ved at forstå, hvorfor uid 42, 43, 44 fra tabellen øverst på siden kommer ud som blanke.

Lige lidt yderligere info:
Min side har som nævnt tidligere virket. Da vi ændrede medlemsnummeret til tre cifre (ex 4 => 004) ændrede vi felterne med medlemsnr i de øvrige tabeller fra INT til VARCHAR, bl.a. i tabellen 'hold'.
Avatar billede svjensen Nybegynder
14. oktober 2003 - 14:41 #3
Bare for en god ordens skyld, så kan jeg lige nævne at der er medlemmer med de pågældende medlemsnumre
Avatar billede svjensen Nybegynder
14. oktober 2003 - 22:14 #4
Problemet var i min opsplitning af arrayet. Der sneg sig et mellemrum ind, som skabte problemer.

Jeg lukker
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