Datenbankabfrage und tabellenanzeige mit ausblendung

  • Hi,
    hätte mal eine zwecks Tabellendarstellung.
    hab unten mal auch den code angehängt.
    es geht eigentlich um 2 probleme.

    -die erste sache ist, dass ich ich versuchen will, daten von einer datenbank in einer tabelle in html darzustellen bzw das gelingt auch. nur möchte ich, dass bei der abfrage nicht alle 11 spalten der tabelle angezeigt werden, sondern nur die ersten 4 spalten und die weiteren 7 erst, wenn ich auf die entsprechende zeile in den ersten vier spalten klicke. also wenn ich eine zeile anklicke, von den ersten 4 spalten, dann sollen die anderen spalten aufpoppen oder in irgendeiner form dargestellt werden.
    wäre super, wenn mir jemand einen ansatz geben kann.
    die header-spalten sind im <th>-tag definiert.

    -das zweite problem geht um die darstellung von den datensätzen, welche anfangs beschränkt sind, sprich es sollen pro seite 10 sätze angezeigt werden und für die restlichen soll man weiterspringen können auf die weiteren seiten. begrenzen geht mit mit LIMIT im Sql-befehl aber es sollen alle datensätze angezeigt werden, nur nicht auf einer seite.

    vielen dank für die tipps, nadine


    if ("send_data".equals(strMode)) {
    String entryid = request.getParameter("entryid");
    String clause = new String();
    String sql = new String();

    //user contraints
    ResultSet constraint = statement.executeQuery("SELECT attribute, operator, value FROM gugubarra_opt.constraint_user_topics WHERE sessionid='"+session.toString()+"' AND data_typ='user';");

    while (constraint.next()) {
    int attribute = Integer.valueOf(constraint.getObject(1).toString()).intValue();
    int operator = Integer.valueOf(constraint.getObject(2).toString()).intValue();
    String value = constraint.getObject(3).toString();
    clause += clause.length()>0 ? " AND " : "";
    String strAttribute = ATTRIBUTES_USER[attribute];

    if (operator==0) {
    clause += "("+ATTRIBUTES_USER[attribute]+"<='"+value+"'";
    }
    else if (operator==1) {
    clause += "("+ATTRIBUTES_USER[attribute]+"<'"+value+"'";
    }
    else if (operator==2) {
    clause += "("+ATTRIBUTES_USER[attribute]+"='"+value+"'";
    }
    else if (operator==3) {
    clause += "("+ATTRIBUTES_USER[attribute]+">'"+value+"'";
    }
    else if (operator==4) {
    clause += "("+ATTRIBUTES_USER[attribute]+">='"+value+"'";
    }
    }

    sql = "SELECT a.user_id FROM gugubarra_opt.user a "+(clause.length()>0?" WHERE "+clause:"");

    //topics contraints
    constraint = statement.executeQuery("SELECT attribute, operator, value FROM gugubarra_opt.constraint_user_topics WHERE sessionid='"+session.toString()+"' AND data_typ='topics';");

    while (constraint.next()) {
    int attribute = Integer.valueOf(constraint.getObject(1).toString()).intValue();
    int operator = Integer.valueOf(constraint.getObject(2).toString()).intValue();
    String value = constraint.getObject(3).toString();

    sql = ("SELECT b.user_id FROM gugubarra_opt.nops_topics a, gugubarra_opt.user_nops b WHERE a.nop_id=b.nop_id AND a.topic_id='"+attribute+"' AND a.weight"+(operator==0?"<":">")+value+" AND b.user_id IN ("+sql+")");
    }

    ResultSet result = statement.executeQuery("SELECT a.user_id, a.login, a.name, a.surname, a.birthday, a.street, a.city, a.zip, a.email, a.phone, a.nationality FROM gugubarra_opt.user a WHERE a.user_id IN ("+sql+") ORDER BY a.user_id;");
    %>

    <table border="1">
    <thead>
    <tr>
    <th class="table1">User-ID</th>
    <th class="table1">Login</th>
    <th class="table1">Name</th>
    <th class="table1">Surname</th>
    <th class="table1">Birthday</th>
    <th class="table1">Street</th>
    <th class="table1">City</th>
    <th class="table1">Zip</th>
    <th class="table1">Email</th>
    <th class="table1">Phone</th>
    <th class="table1">Nationality</th>
    </tr>
    </thead>
    <tbody>
    <% while(result.next()) { %>
    <tr>
    <td align="center" valign="middle" class="table2"><%= result.getObject(1) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(2) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(3) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(4) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(5) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(6) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(7) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(8) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(9) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(10) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(11) %></td>
    </tr>
    <% } %>
    </tbody>
    </table>
    <% } %>
    <br>
    </div>
    </body>
    </html>

  • Also, wenn ich das richtig verstanden haben, meinst du cirka sowas:
    http://dodo.bplaced.net/ueber_mich/musik/
    (keine kritik am design, bitte ;D muss ich mal überarbeiten^^

    Also du machst das so, dass du die <tr> mittels CSS versteckst. "display:none;"
    Und wenn man auf einen Link klickt, wird ein JavaScript gestartet, das alle betreffenden Zeilen auf "style.display = 'table-row'" setzt.
    Dazu gibst du am besten den <tr> einen Namen und gehst mittels document.getElementsByName("hiddenTR") alle in einer Schleife durch.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Ich habe mal folgendes gemacht, was aber nicht klappt...
    das in der tabelle quasi 4 spalten angezeigt werden und die restlichen nicht, was auch klappt. dann klick ich auf den link den ich für eine spalte eingebaut habe, nämlich für User_id, also elemente für user_id die von der datenbank abgeholt werden sind mit einer link unterlegt, jedoch passiert nichts beim anklicken.
    habe auch anstatt style.display style.visibility="visible"; probiert.


    <script type="text/javascript">
    function onoff() {


    if(document.getElementByID)

    document.getElementID("hiddenTR").style.display = "table-row";


    }
    </script>


    tr><th class="table1">User-ID</th>
    <th class="table1">Login</th>
    <th class="table1">Name</th>
    <th class="table1">Surname</th></tr>

    <tr style="display:none"; id="hiddenTR">
    <th class="table1">Birthday</th>
    <th class="table1">Street</th>
    <th class="table1">City</th>
    <th class="table1">Zip</th>
    <th class="table1">Email</th>
    <th class="table1">Phone</th>
    <th class="table1">Nationality</th>
    </tr>
    </thead>
    <tbody>
    <% while(result.next()) { %>

    <tr><td align="center" valign="middle" class="table2"><a href="#" onclick="onoff()"><%= result.getObject(1) %></a></td>

    <td align="center" valign="middle" class="table2"><%= result.getObject(2) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(3) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(4) %></td></tr>

    <tr style="display:none"; id="hiddenTR">

    <td align="center" valign="middle" class="table2"><%= result.getObject(5) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(6) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(7) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(8) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(9) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(10) %></td>
    <td align="center" valign="middle" class="table2"><%= result.getObject(11) %></td>
    </tr>

  • hast du einen link?
    Bitte benutze den BB-HTML-Tag vom Forum.

    Du kannst mit Firefox oder Opera auch eine Fehlerkonsole anzeigen lassen (unter Extras)
    Die zeigt die alle JavaScript-Fehler

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Hey,
    lag mit der Schweinegrippe flach;((

    BB-Tag?Hmm, muss ich das kennen.
    ALso die Link zu deiner HP war gut, sowas meinte ich ja....
    ICh habe jetzt quasi eine Tabelle mit 4 Spalten: user id, login, name , surname.
    darunter werdend eren elemente abgerufen und darunter ist eine zeile, die ich verstecke mit display:none im tr-tag, wie du es beschrieben hattest. diese zeile besteht quasi aus einer neuen tabelle(zeigt die anderen 8 attribute als kopf und darunter die passenden elemente.

    was ich will ist, dass wenn ich zum bsp auf den ersten datensatz klicke in der zelle mit user-id, dass sich dann diese versteckte zeile öffnet und bei einem zweiten klick wieder versteckt.
    user_id ist deshalb passend, weil alle elemente die ich von der datenbank abrufe eindeutig sind. ich muss irgendwie prüfen ind er java skript funktion, welche zelle ich gerade angeklickt habe, damit das programm weiß, welche versteckte zeile er den öffnen soll?
    habe aber grad keinen plan wie das umzusetzen ist weiter. kopiere mal einige codezeilen hier rein: vielleicht ist mein ansatz ja total falsch.

    das habe ich als skript:

    <script type="text/javascript" language="javascript">

    function setVisibility(popup) {

    if(popup)
    document.getElementById(popup).style.visibility = "visible";
    }

    </script>

    ----------------------------------------------------------------------------------

    hier eine zeile wo das "onclick" eingebaut ist. in dieser zeile ruft er alle elemente für den kopf user_id auf.

    <td class="table4" onclick="setVisibility(popup)" ><%= result.getObject(1) %></td>

    ------------------------------------------------------------------------------------

    hier die zeile, wo der ganze bereich versteckt werden soll anfangs. in dem tr-tag sind wie gesagt die anderen 8 spalten eingebaut inklusive der elemente die abgerufen werden.

    <tr id="popup" style="display:none">


    müsste er da nicht schon was machen jetzt? also wenn ich quasi auf irgendeine zelle in der spalte user_id(eindeutig) klicke, dass er dann das entsprechende versteckte feld aufpoppt?
    bzw irgendeins zumindest, denn er weiß ja nicht, was er wo aufmachen soll....

    stehe gerade irgendwie auf dem schlauch..

    vielleicht lieg ich aber auch ganz falsch gerade?

    danke und lieben gruß

  • Dazu musst Du die ID in der Funktion in Anführungszeichen schreiben, sonst denkt JavaScript "popup" wäre eine Variable.

    Code
    setVisibility('popup')

    Bitte auch mal an der Fehlerkonsole nachschauen, wenn Du Probleme hast - denn dort wäre dir das sofort aufgefallen. Falls Du nicht weißt was die Fehlerkonsole ist, dann such im Forum oder bei Google ;)

  • Hi danke für die Antwort.
    Sollte auch eine VAriable sein....habe es jetzt anders gelöst...nach 2 Tagen:/..schwere Geburt.
    Habe noch ein anders Problem, wo ich nicht weiß ob soweit der Ansatz richtig ist.

    Problem:
    In meiner Tabelle ruf ich Werte von einer Datenbank auf....ich will, dass immer nur 10 Sätze pro Seite angezeigt werden.
    Somit habe ich in meiner Sql-Abfrage in Java Server Pages im Sql-Befehl folgendes noch drinstehen: LIMIT 0,10. Damit zeigt er mir auch schonmal die ersten 10 nur an.
    Jetzt habe ich einen zweiten SQL-Befehl daruntergeschrieben nur mit count* und ohne LIMIT, wo er die Datensaätze alle zählt.
    Diesen Wert kann ich doch jetzt in eine Variable speichern vom Typ Object und den Wert auslesen. Dann muss ich im HTML-Code wo die Tabelle dargestellt wird, also den ganzen Code in eine For-schleife setzen, die entsprechend dem Wert von count* durchgeführt wird......?? oder?
    wie sag ich HTML aber, dass er blättern soll bzw wie realisiere ich das Seitenblättern in Html?
    Vielleicht hat jemand eine super Idee....
    Danke und viele Grüße

  • PHP
    $limit = 10;
    $page = $_GET['page'];
    $start_at = $page * $limit;
    $sql = "... LIMIT $start_at, $limit";

    So mach ich das meistens, ist so auch recht simpel. Man braucht aber noch eine 2te Abfrage in dem Fall um zu überprüfen ob es einen Link für die nächste Seite geben soll oder nicht (oder man macht den Limit um 1 höher und zeigt das letzte Ergebniss nicht an).

  • Erstmal danke für die Antworten...ich hatte mittlerweile schon angefangen das leicht anders zu machen....das Problem aktuell ist, dass ich nicht weiß wie ich eine Seite neu lade, wenn ich auf die entsprechende Seitenlink clicke...bzw die Tabelle soll neu geladen werden.

    Folgende Abschnitte habe ich(java server pages):

    int pages;
    pages = (rows/10); // rows sind die gesamten datensätze
    out.println(pages);
    int start = 0;
    int start_at = 0;

    SELECT( blabla.......LIMIT "+start_at+", 10; )

    Danach kommt die Tabelle in HTML...
    Darunter wieder JAva:

    <% for (start=0; start<=pages; start++){ %>
    <% start_at = start * 10;%>

    <a href="" onclick=""><%=start%></a>
    <%}%>


    Wen ich die Tabelle anzeigen lasse, zeigt er mir zehn Sätze an und darunter die Links(soviele wie es Datensätze im 10er-block gibt)
    Nur passiert beim anklicken der link nicht so viel..habe das mal rot markiert...da komme ich nicht weiter? Wie lade ich die ganze Seite neu, so dass quasi das Select mit neuem Limit/offset-Wert neu lädt..

    danke schonmal.


    mal eine ganz andere frage: wenn ich in html in einem textfeld ein "ß" eingebe, stürzt die seite immer ab, weiß jemand wieso....umlaute gehen, nur kein ß.


    danke und lg

  • Kleine Korrektur...kann irgendwie nicht so gut logisch denken(das liegt nicht daran, dass ich kein junge bin!^^).....also in meiner 'Forschleife erzeuge ich die entsprechende Anzahl an links unten, was auch richtig ist , denke ich.
    bis jetzt dachte ich auch, dass ich das neue laden der seite mit den neuen werten auch in einer Forschleife machen kann, was ja quatsch ist, da er ja die schleife beim start ganz durchläuft.
    oder kann ich das href was ich in der Schleife habe doch drinlassen und muss nur sagen, was ich beim onclick machen soll??
    irgendwie hänge ich gerade. danke.:confused: