Avatar billede joemoz Nybegynder
29. oktober 2007 - 12:36 Der er 9 kommentarer

Vise resultat af SQL query i html

Jeg har brug for dynamisk at generere en HTML-visning vha. en SQL query på en Microsoft SQL database. Hvordan gør jeg det?
Avatar billede w13 Novice
29. oktober 2007 - 12:46 #1
Vil du hente data ind på en hjemmeside?
Avatar billede joemoz Nybegynder
29. oktober 2007 - 12:58 #2
Nej, eller tja

Jeg har brug for at connecte til en SQL-server på mit netværk, og dynamisk lave en HTML-side af resultatet af en query. Det er ikke noget der nødvendigvis skal lægges ud på en hjemmeside, men bare kunne vises i en browser på mit interne netværk.
Avatar billede w13 Novice
29. oktober 2007 - 13:03 #3
Hmmm. Jeg har ikke arbejdet så meget med lige det, så muligvis tager jeg fejl. Men så vidt jeg ved, skal du enten bruge sprog som ASP/PHP/JSP/osv. for at hente fra en database og vise i HTML. Jeg ved ikke, om man på andre måder kan genererer HTML fra databasen uden brug af server-side-scripting.
Avatar billede joemoz Nybegynder
29. oktober 2007 - 13:14 #4
OK, men lad mig vende spørgsmålet om: Det jeg har brug for er jo dybest set at lave et stykke HTML-kode der inkluderer en forespørgsel til en database - det burde vel principielt ikke være så kompliceret? Hvad med et ODBC-kald?

Server-side-scripting er også en mulighed - hvad mener du præcis?
Avatar billede pidgeot Nybegynder
29. oktober 2007 - 13:23 #5
Det kommer an på hvad du vil have:

Vil du have en HTML-side der altid viser udtrækket som det så ud på det tidspunkt filen blev genereret, så bruger du dit foretrukne programmeringssprog, og opbygger en HTML-tabel i en fil. Den nøjagtige implementation afhænger af hvad dit databaselibrary giver dig mulighed for, men for det meste har du mulighed for at få de enkelte felters navne, og så bruge dette som overskrifter, hvorefter du looper igennem resultatsættet og skriver HTML-tabelrækker.

Vil du have en side der altid viser udtrækket som det ser ud på det tidspunkt filen åbnes, så laver du et server-side script i ASP, PHP, eller hvad du nu har til rådighed, der opbygger en tabel og skriver ud til browseren.
Avatar billede w13 Novice
29. oktober 2007 - 13:24 #6
Jeg mener bare, at der ikke er nogen HTML- eller JavaScript-kode til at snakke med en database, så derfor ville jeg mene, at du skal ud i noget ASP eller PHP, altså server-side, for at hente data ned. Om der skulle være andre muligheder, evt. implementeret i MS SQL, skal jeg ikke kunne side.
Avatar billede pierrehusted Nybegynder
29. oktober 2007 - 13:27 #7
Du er nødt til at lave lidt server-side-script for at kunne vise resultatet. Eller måske kan man få SQL-serveren til at aflevere en XML-fil, som kan styles.

Men under alle omstændigheder er det nok smartest sikkerhedsmæssigt, at lade det gå igennem et script-sprog - frem for at have direkte query-adgang til SQL-serveren.


Her er et eksempel på et script, som kan gøre det. Der er nogle småting du skal være opmærksom på:
- Du skal skrive filnavnet i action i linie 63.
- Når det er lagt på nettet, så kan alle se i din database (hvis de kender url'en). Så der bør bygges et login-system omkring.
- Der skal sættes en anden connection ind i starten (den her er til MySQL).
Men ellers burde det være lige til at sætte ind.


Og her er så asp-koden:
<%
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={MySQL ODBC 3.51 Driver};option=4;server=127.0.0.1;user=[brugernavn];password=[kodeord];DATABASE=[database];"



  fejl = ""

  If Len(request("SQLstr")) = 0 Then
    SQLStr = ""
  Else
    SQLStr = request("SQLstr")
  End If

  If Len(request("f_bredde")) = 0 Then
    f_bredde = 30
  Else
    f_bredde = cInt(request("f_bredde"))
  End If

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
    <head>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="Første beta: Pierre Husted - email pierre@pi-hus.dk">
      <META NAME="Keywords" CONTENT="database, sql, online-access">
      <META NAME="Description" CONTENT="Kig i databasen">
        <title>Kik i basen</title>
    </head>

<body>
<b>Kig i basen</b><br>

<%
If len(request("sqlstr")) > 0  AND FEJL = "" Then

  If request("multi_query") = "on" Then
    SQLStr = SQLStr
    response.write("<h4>QUERY(multible) : <br>" & replace(SQLStr, ";", "<br>") & "</h4><br>")
    SQLStr_array = split(replace(SQLStr, vbcrlf, " "), ";")

    For SQLStr_array_i = 0 to uBound(SQLStr_array)
      This_SQLStr = trim(SQLStr_array(SQLStr_array_i))
      If len(This_SQLStr) > 0 Then
        response.write("<br><b>QUERY(" & SQLStr_array_i + 1 & ") : " & This_SQLStr & "</b><br>")
        Vis_Query(This_SQLStr)
      End If
    Next
  Else
    response.write("<h4>QUERY : " & SQLStr & "</h4><br>")
    Vis_Query(SQLStr)
  End if

Else
  response.write("<br>Her kan du indtaste en SQL sætning.<br> Der vil så blive dannet en liste over de poster der opfylder sætningen.<br>")
End If

If len(fejl) > 0 Then
  response.write("<br><br><h3>" & fejl & "</h3><br><br>")
End If

%>


  <form method="POST" action="filnavn.asp">
    <textarea name=SQLstr rows=21 cols=120><%=SQLStr%></textarea><br>
    <small>
    Max feltbredde i tabel <INPUT TYPE="text" NAME="f_bredde" size=3 value='<%=f_bredde%>'>&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;
    <SELECT NAME="linier_per_overskrift">
    <%
      linier_per_overskrift = cStr("" & request("linier_per_overskrift"))
      if linier_per_overskrift = "" Then linier_per_overskrift = "20"
      for i = 5 to 100 step 5
        response.write("<option value=""" & i & """")
        If linier_per_overskrift = cStr(i) Then response.write(" SELECTED ")
        response.write(">" & i & " linier før overskrift</option>")
      next
    %>
    </SELECT>
    &nbsp;&nbsp;&nbsp;
    <INPUT TYPE="checkbox" NAME="lines" VALUE="on" <%If request("lines") = "on" then response.write(" CHECKED ")%>> lines i tabel&nbsp;&nbsp;
    <INPUT TYPE="checkbox" NAME="spaces" VALUE="on" <%If request("spaces") = "on" then response.write(" CHECKED ")%>> spaces mellem celler&nbsp;&nbsp;
    <br>
    <INPUT TYPE="checkbox" NAME="multi_query" VALUE="on" <%If request("multi_query") = "on" or request("multi_query") = "" then response.write(" CHECKED ")%>> Udfør flere SQL-sætninger (adskilt af ;)&nbsp;&nbsp;

  </small>
  <br><br>

<input type="submit" value="Kig i basen" name="B1">


</form>
 


</body>
</html>

<%

FUNCTION KlipTekst(byval tekst)
  If len(tekst) > f_bredde Then
    KlipTekst = left(tekst, f_bredde - 3) & "..."
  Else
    KlipTekst = tekst
  End If
END FUNCTION


SUB Vis_Query(byval SQLStr)

'  On error goto 0
'  on error resume next
  Set Poster = Conn.Execute(SQLStr)

  If InStr(lCase(SQLStr), "select") > 0 or InStr(lCase(SQLStr), "describe") > 0 or InStr(lCase(SQLStr), "show") > 0 Then  ' ikke tillade alt
    If Not Poster.EOF Then

      linier_per_overskrift = cInt("0" & request("linier_per_overskrift"))
      If linier_per_overskrift = 0 then linier_per_overskrift = 10

      antal = 0
      response.write("<table border=")
      If request("lines") = "on" then response.write("1") Else response.write("0")
      response.write(">" & vbcrlf)

      overskrifter = ""
      For i = 0 To Poster.Fields.Count - 1
        overskrifter = overskrifter & "<th bgcolor='silver'><font color=#ffff00>" & Poster.Fields(i).Name & "</font></th>"
        If request("spaces") = "on" then overskrifter = overskrifter & "    <td>&nbsp;</td>" & vbcrlf End If
      Next


      Do While NOT Poster.EOF
        If antal = 0 or (antal mod linier_per_overskrift = 0)then
          response.write(overskrifter)
        End If
        response.write(vbcrlf & "  <tr>")

        For i = 0 To Poster.Fields.Count - 1
          Response.Write("    <td>")
          Response.Write(KlipTekst(Poster.Fields(i).value))    ' skriv selve felt/celle-indholdet
          Response.Write("</td>" & vbcrlf)
          If request("spaces") = "on" then response.write("    <td>&nbsp;</td>" & vbcrlf) End If
        Next
        response.write("  </tr>")
        antal = antal + 1
       
        Poster.movenext
      Loop

      response.write("</table>")
      response.write("<br>Der blev fundet " & antal & " poster.<br><br>")
    Else

      response.write("<big>Ingen poster blev fundet.</big>")
    End If
  Else
      response.write(" - intet at vise.<br>")
  End If
END SUB  '  Vis_Query

%>
Avatar billede joemoz Nybegynder
29. oktober 2007 - 13:46 #8
Tak for de gode kommentarer - jeg tror dog stadig at løsningerne er for komplicerede? I virkeligheden vil jeg gerne bare have en HTML-side med et <SCRIPT> i midten hvor jeg laver en simpel query: f.eks. "SELECT kolonne1 FROM tabel1 WHERE kontonummer='12345678'" (Jeg skal nok selv sørge for at kontonummer-værdien kan vælges af brugeren). Evt. med brug af ODBC, men selvfølgelig helst en generel løsning der kan bruges af alle på netværket der i øvrigt har forbindelse til SQL-serveren.

Er der mon ikke en lettere metode?
Avatar billede w13 Novice
29. oktober 2007 - 13:57 #9
Du kan desværre ikke udføre SQL-kald i et script-tag, desværre. Det _skal_ foregå server-side.
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
Computerworld tilbyder specialiserede kurser i database-management

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