Radiobutton aus Datenbank mit ASP

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Radiobutton aus Datenbank mit ASP

    Hi,

    ich versuche nun schon seit 2 Tagen eine Loesung fuer mein Problem zu finden, aber komme leider nicht weiter.

    Folgendes:

    Ich habe ein Formular, in das neue User samt Rechte eingetragen werden koennen. Die Rechtevergabe wird ueber einen Radiobutton vergeben.

    Ich schreibe dann den Value (0,1,2 oder 3) in die Datenbank. Nun soll es aber die Moeglichkeit geben, Daten auch zu editieren. Dafuer muss einfach nur auf einen Usernamen geklickt werden und es erscheint das Formular mit den Werten aus der Datenbank. So schoen so gut, doch wie gebe ich an, welche Radiobuttons vorher geklickt wurde?

    Aus einem anderen Board habe ich diesen Ansatz erhalten:




    Code:
      
    <tr> 
                <td>Kontake</td>
               <% For i = 0 To 3 %> 
              <td>
              <input type="radio" name="1" value="<%= i %>"
              <% If i = str_RightsID Then Response.Write(" checked ") %>
              /><br/></td>
             <% Next %>
    </tr>
    
    <tr> 
                <td>Gallerie</td>
               <% For i = 0 To 3 %> 
              <td>
              <input type="radio" name="2" value="<%= i %>"
              <% If i = str_RightsID Then Response.Write(" checked ") %>
              /><br/></td>
             <% Next %>
    </tr>
    
    <tr> 
                <td>Sicherheit</td>
               <% For i = 0 To 3 %> 
              <td>
              <input type="radio" name="3" value="<%= i %>"
              <% If i = str_RightsID Then Response.Write(" checked ") %>
              /><br/></td>
             <% Next %>
    </tr>
    Das klappt auch, leider aber bei nur einem Bereich, wie Ihr aber seht habe ich 3 Bereiche. Ich lese den Wert so aus der DB aus.

    Code:
    while not rs.eof
    str_UserName=rs.fields("UserName").value 
    str_UserPass=rs.fields("UserPass").value
    str_UserID=rs.fields("UserID").value
    str_RightsID=rs.fields("RightsID").value
    str_AreaID=rs.fields("AreaID").value
    
    rs.movenext
    wend
    Nun verstehe ich das so, das die Datensaetze durchlaufen werden und dann natuerlich am Ende der letzte Datensatz in str_RightsID steht. Die anderen Werte werden also gar nicht erst angegeben sondern schon vorher ueberschrieben. Ergebnis: Die Userrechte sind fuer alle 3 Bereich gleich.

    Wie kann ich es aber so machen das ich fuer die 3 Bereiche, die jeweils 4 Radiobuttons haben, den jeweils richtigen angezeigt bekomme? Ich tippe mal auf ein Array das ich wohl fuellen muss, komme damit aber leider nicht weiter.

    Ich hoffe wirklich das mir jemand helfen kann, ich habe bisher keine Loesung im Internet gefunden und stehe sonst echt auf dem Schlauch. Vielen Dank im voraus.

    Gruss Luka

  • #2
    1. wegen name="1" usw. bitte lesen http://de.selfhtml.org/html/referenz...#id_idref_name

    2. wer hindert dich daran die Ausgabe der R-Buttons in die While-Schleife zu integrieren?

    Kommentar


    • #3
      Hi,

      Mit der While Schleife habe ich auch schon ausprobiert aber das Problem ist das ich dann auch 4 mal Sicherheit, 4 mal Gallerie und 4 mal Kontakte dort stehen habe. Ich weiss einfach nicht, wie ich das umgehen kann.

      Gruss Luka

      Kommentar


      • #4
        Ähm ... wie meinst du das denn Bitte erläutern. So wie es bisher steht, liest du pro Schleifendurchlauf ein rs.fields("RightsID").value, wofür steht das?

        Vielleicht zeigst du auch mal deine Abfrage und eventuell die DB-Tbl-Struktur.

        Kommentar


        • #5
          Okay, hier meine DB Struktur:

          tblUser:
          UserID (Autowert) PrimaryKey
          UserName
          UserPass

          tblUserrechte:
          UserrechteID (Autowert) PrimaryKey
          UserID Fremdschluessel
          RechteID
          BereichsID

          tblRechte:
          RechteID (Autowert) PrimaryKey
          Rechte (z.B. lesen, schreiben)

          tblBereiche:
          BereichsID (Autowert) PrimaryKey
          Bereiche (z.B Sicherheit, Galerie)


          Die Ausgabe sieht also so aus das ich eine Tabelle habe:

          nix lesen schreiben alles
          Kontakte
          Sicherheit
          Gallerie

          Dann sind da halt Radiobuttons, die die Moeglichkeit bieten, das jeweilige Recht anzuklicken. Beim editieren klicke ich nun halt auf den Usernamen und moechte nun natuerlich genau dieses Formular mit den jeweiligen Werten angezeigt bekommen, damit ich da etwas aendern kann. Ich hoffe Du verstehst jetzt was ich meine. Ich habe also in der tblUserrechte 3 mal den User 100 mit seinem jeweiligen Userrecht im jeweiligen Gebiet.

          Mein Problem sind nun halt die Radiobuttons, alles andere funktioniert bereits.

          Vielleicht einen Tip?

          Kommentar


          • #6
            und deine Abfrage?

            Kommentar


            • #7
              Code:
              		
              strSelect = "SELECT tblUser.UserID,tblUser.UserName,tblUser.UserPass, 
              
              tblUserRights.RightsID, tblUserRights.AreaID FROM tblUSer INNER JOIN 
              
              tblUserRights ON tblUserRights.UserID=tblUser.UserID WHERE 
              
              tblUser.UserID= ('" & Request.querystring("UserID") &"') "

              Kommentar


              • #8
                OK, folgenden Ablauf schlage ich vor:
                Code:
                - Abfrage absetzen und Prüfen auf EOF 
                - UserDaten:
                   * str_UserName=rs.fields("UserName").value 
                   * str_UserPass=rs.fields("UserPass").value
                   * str_UserID=rs.fields("UserID").value
                  auslesen und geeignet ausgeben
                - while beginnen
                     Button-Daten auslesen
                     for beginnen
                        HTML-Code für Button ausgeben, jedoch nicht schliessen
                        prüfen:
                            Laufwert = db-Wert -> checked setzen
                        HTML-Tag schliessen
                     end for
                     nächster DS
                   end while
                Viel Erfolg.

                Kommentar


                • #9
                  Hi,

                  ich glaube ich bin auf dem richtigen Weg:

                  Code:
                  while not rs.eof%>
                  <tr>
                  <%
                  str_AreaID=rs.fields("AreaID").value
                  str_Area=rs.fields("Area").value
                  str_RightsID=rs.fields("RightsID").value
                  
                  	
                  For i = 0 To 3 %>
                  
                  <td>
                  <% response.Write(str_Area)%>
                   
                  <input type="radio" name="<%=str_AreaID%>" value="<%= i %>"
                  <% If i = str_RightsID Then Response.Write(" checked ") %>
                    /><br/></td>
                  
                  <% Next 
                  rs.movenext   
                  %>
                  </tr>
                  <% wend %>
                  So wie es aussieht funktioniert es soweit, nur habe ich noch einen Schoenheitsfehler. Ich moechte ja in der ersten Spallte jeweils den Bereich stehen haben. (Sicherheit,Kontakte,Gallerie) Doch wie bekomme ich das denn hin. So wie es jetzt oben steht, steht in jeder Spalte der Reihe der Begriff. Das ist natuerlich Mist, da ich es nur einmal haben moechte. Ich kann es aber auch nicht vorher schon schreiben. Wie kann ich das denn nun loesen?

                  Vielen dank schonmal fuer Deine Hilfe.

                  Gruss Luka

                  Kommentar


                  • #10
                    was hälst du davon, wenn du die Ausgabe der betreffenden Spalte außerhalb der for-Schleife machst . Außerdem halte ich für unfug, wenn du die Options des Radio-Buttons jeweis in einer Tabellenspalte plazierst.
                    Zuletzt geändert von asp2php; 01.02.2005, 10:16.

                    Kommentar


                    • #11
                      Ich habs !!!

                      Code:
                      while not rs.eof%>
                      <tr>
                      <%
                      str_AreaID=rs.fields("AreaID").value
                      str_Area=rs.fields("Area").value
                      str_RightsID=rs.fields("RightsID").value
                      response.Write("<td>"&str_Area&"</td>")
                           
                      For i = 0 To 3 %>
                      <td>
                      <input type="radio" name="<%=str_AreaID%>" value="<%= i %>"
                      
                      <% If i = str_RightsID Then Response.Write(" checked ") %>
                        /><br/></td>
                      <% Next 
                      
                      rs.movenext   
                      %></tr><%
                      wend%>
                      So funktioniert es endlich. Ich kann es gar nicht glauben. Nun muss ich nur noch die update Funktion angleichen, hoffe es gibt damit keinen Aerger.

                      Nochmal vielen, vielen Dank fuer die Hilfe.

                      Gruss Luka

                      Kommentar


                      • #12
                        denke aber bitte hieran:
                        Original geschrieben von asp2php
                        1. wegen name="1" usw. bitte lesen http://de.selfhtml.org/html/referenz...#id_idref_name
                        denn IMHO hast du i.M. immer noch:
                        Code:
                        str_AreaID=rs.fields("AreaID").value
                        ...
                        ... name="<%=str_AreaID%>"

                        Kommentar


                        • #13
                          Mmh, nun habe ich doch mehr Probleme mit dem SQL Update als gedacht und es sind mal wieder die Radiobuttons schuld.

                          Also auf der Bearbeiten Seite werden mir die Buttons, mit den Werten aus der DB, angezeigt. Nun moechte ich natuerlich im Stande sein, diesen Wert zu aendern.

                          Code:
                           	set conn = server.CreateObject("ADODB.Connection")
                          
                          '----------- Connection öffnen
                           	conn.Open strComplete
                          
                          
                           strUpdate = "SELECT * FROM tblUser WHERE UserID= ('" & Request.Form("UserID")&"')"
                          
                          strUpdate2= "SELECT * FROM tblUserRights WHERE UserID= ('" & Request.Form("UserID")&"')"
                          	
                          '----------- Recordset öffnen
                          ' --- Globale Datei zum Öffnen eines Recordset-Objekts 
                          Set rs = Server.CreateObject("ADODB.Recordset") 
                          Set rs2 = Server.CreateObject("ADODB.Recordset") 
                          
                          ' --- Objektname.open "SQLString", Aktive Verbindung, CursorType, Öffnungsmodus 
                          rs.Open strUpdate, conn, 3, 3 
                          rs2.Open strUpdate2, conn, 3, 3 
                          	
                          if rs.Supports (adUpdate) Then ' --- Überprüfen, ob sich der Datensatz aktualisieren läßt
                          	
                          rs.Fields("UserName") = Request.Form("UserName")          	
                          rs.Fields("UserPass") = Request.Form("UserPass") 	
                          rs.Update 
                          	
                          			
                          while not rs2.eof
                          
                          For i = 0 To 3	
                          
                          rs2.Fields("RightsID")=Request.Form("i")
                          
                          NEXT
                          
                          rs2.movenext   
                          
                          wend
                          			
                          rs2.Update
                          	
                          Else
                                       Response.Write("<h2>An error occured</h2>") ' --- Bei Fehler erfolgt eine Meldung
                           
                          	End if
                          
                          
                          
                          
                           set conn = nothing
                          Ich bekomme aber leider keinen Wert eingetragen, sondern nur <NULL> und das auch nur im ersten Datensatz. Er updated also die DB nur leider nicht so wie gewuenscht. Ich werde noch wahnsinnig mit diesen Radiobuttons. Ich hoffe jemand hat einen Ansatz fuer mich. Ach, noch was, kann man eigentlich 2 Tabellen gleichzeitig updaten?

                          Gruss Luka

                          Kommentar


                          • #14
                            sag mal machst du absichtlich, oder bist du schwer von Begriff? Ich habe dir schon 2 mal darauf hingewiesen, aber du liest ja nicht.

                            Kommentar


                            • #15
                              @ asp2php

                              erstmal moechte ich mich fuer Deine Hilfe bedanken und entschuldigen,
                              wenn ich mich so ungeschickt anstelle. Ich habe es natuerlich schon
                              gelesen, das man seine radiobuttons so nicht benennt, der Grund
                              warum ich es aber noch nicht geandert habe liegt darin, dass
                              es ja soweit lief und ich in anderen Bereichen die wirklichen Probleme
                              hatte. Daher wollte ich nicht noch viel am Namen aendern, sondern
                              mich erst um die anderen Probleme kuemmern und wenn das
                              klappt halt die Namen.

                              Mein update hat am Ende uebrigens geklappt, doch nun habe
                              ich mich in den letzten Tagen entschieden, noch ein wenig
                              mehr dynamic in die Sache zu bringen. Das war fatal.

                              Mein Plan:
                              Wenn ich einen neuen User anlege, erscheint das Formular,
                              dort habe ich die Radiobuttons fuer die verschiedenen Bereiche.
                              Hier mein\Quellcode zum Auslesen der Radiobuttons. (Ja, die Namen `
                              sind immer noch nicht geandert, ich behalte das aber im Hinterkopf,
                              versprochen)

                              Code:
                              strSelect="SELECT AreaID,Area,DefaultRight FROM tblArea "
                              conn.Execute strSelect
                              
                                  
                              '----------- Recordset öffnen
                              Set rs = Server.CreateObject("ADODB.Recordset") 
                              
                              ' --- Objektname.open "SQLString", Aktive Verbindung, CursorType, Öffnungsmodus 
                              rs.Open strSelect, conn, 3, 3
                              i=0
                               
                              while not rs.eof
                                              
                              AreaID=rs.fields("AreaID").value
                              str_Area=rs.fields("Area").value
                              str_DefaultRight=rs.fields("DefaultRight").value
                              
                              response.Write("<td>"&str_Area&"</td>")
                              For i = 0 To 3 %>
                              <td>
                              <input type="radio" name="<%=AreaID%>" value="<%=i%>"
                              <% If i = str_DefaultRight Then Response.Write(" checked ") %>/>
                                          
                              </td>
                              <%
                              Next 
                              response.Write("</tr>")
                              rs.movenext   
                              wend%>
                              Wenn das Formular nun abgeschickt wird, moechte ich natuerlich
                              die Radiobuttons auslesen und per Insert in die DB eintragen.
                              Das versuche ich mit folgendem Sourcecode:

                              Code:
                              ' --- tblUserRights fuellen Schleife solange bis alle Radiobuttons
                               durchlaufen wurden
                              
                              FOR i= 1 to 6
                                                              
                              strSQL2 = "INSERT INTO tblUserRights
                              (UserID,AreaID,RightsID) VALUES
                              ('" & rs.Fields("UserID") & "','" 
                              & Request.Form("AreaID") & "','" & Request.Form(""& i &"") & "')" 
                              
                              conn.execute(strSQL2)        
                              NEXT
                              response.Write("User has been added")
                              Tja, der User wird eingetragen, nur bekomme ich leider sowohl
                              fuer AreaID eine 0 eingetragen als auch fuer RightsID.

                              Ich stehe hier wirklich auf der Leitung und hoffe es kann mir
                              jemand einen Tip geben. Vielen, vielen Dank im voraus.
                              Zuletzt geändert von Luka; 07.02.2005, 04:01.

                              Kommentar

                              Lädt...
                              X