große tabelle, arrays merken - brauche ich cookies?



  • hallo und guten morgen!

    ich habe eine riesen tabelle und ein <form> drumherum. die tabelle fülle ich per php/sql. jetzt gibt es in jede zeile der tabelle ein textfeld um werte einzugeben und eine checkbox um diesen wert dannn zu bestätigen (prüfe ich mit js).

    ok, jetzt habe ich einen "tabellen-filter" eingebaut und habe schwierigkeiten mir die eingegebenen werte in den textfeldern bzw. die angeklickten checkboxen zu merken - der filter ruft die index.php neu auf und alle eingaben sind weg. die textfelder und die checkboxen sind im html jeweils als array definiert.

    der filter link ist ein area-shape href.. daher hatte ich bisher keinen erfolg mit irgendwelchen hidden-variablen. der link löst leider nicht die form aus, habe auch schon viele variationen von diesem prinzip hier ausprobiert:

    <area shape="rect" alt="13" coords="419,194,472,235" href="java\1:document.myform.submit()">
    

    die frage ist nun, ob ich cookies benutzen muss/soll oder eher versuche alle werte per post/get zu übergeben? oder sogar alles in eine datenbank schreiben?

    ich wäre für einen tipp dankbar!
    schöne grüße,
    chrs

    --
    so sehen textfeld und checkbox in jeder zeile aus:
    java\1: checkBox() prüft, ob textfeld ok ist und setzt dann automatisch die checkbox.
    java\1: checkBoxTrue() wenn checkbox gesetzt wird, soll vorher das textfeld geprüft werden und ggf eine fehlermeldung ausgeben.

    <table action=".." name="myform"..> .. <form..> .. etc.
    echo '<td><input id="textfield['.$i.']" onchange="checkBox(this, '.$i.')" name="menge['.$i.']" type="number" class=textfeld value="'.$vorschlag.'"></td>';
    echo '<td><input name="bestaetigung['.$i.']" onclick="checkBoxTrue(this, '.$i.')" type="checkbox"></td>';
    

    so sieht ein filter-link aus (liegt innerhalb der form):

    <area shape="rect" alt="13" coords="419,194,472,235" href="index.php?place=13">
    


  • Hallo,

    1. Was ist ein Tabellen-Filter?
    2. Was ist <table action=".." name="myform">?
    3. Wieso speicherst du die Daten nicht wenn du das Form schon abschickst?

    LG, Micha



  • chrs schrieb:

    der link löst leider nicht die form aus, habe auch schon viele variationen von diesem prinzip hier ausprobiert:

    <area shape="rect" alt="13" coords="419,194,472,235" href="java\1:document.myform.submit()">
    

    korrektur: sorry, das ausführen der form ist garnicht mein ziel!
    ich habe "nur" das problem mir die daten aus textfeld/checkbox zu merken, wenn der filter benutzt wurde, sprich die index.php neu aufgerufen wird. die form ansich funktioniert super - nur die übergabe der daten beim benutzen der filter-funktion eben nicht.



  • RandomAccess85 schrieb:

    1. Was ist ein Tabellen-Filter?

    ich rufe die seite neu auf mit index.php?place=x, wobei je nach x-wert eine verschiedene sql-anweisung abgefragt wird. je nach auswahl werden verschiedene werte in der tabelle angezeigt.

    RandomAccess85 schrieb:

    2. Was ist <table action=".." name="myform">?

    nur eine kurzform für

    <form action="index.php" method="post" name="bestellen">
    

    RandomAccess85 schrieb:

    3. Wieso speicherst du die Daten nicht wenn du das Form schon abschickst?

    ich will erstmal garnicht die form abschicken. erst soll mit dem filter gearbeitet werden. später dann soll die form abgeschickt werden. (was aber auch funktioniert..)



  • Hallo,

    es ist doch aber klar, dass wenn du die Seite neuaufrufst sämtliche Änderungen zurückgesetzt werden! Javascript-Variablen bleiben nicht erhalten. Du könntest deren Inhalte in Cookies speichern oder eben doch den submit verwenden und die Änderungen beim "Ausführen des Filters" speichern...

    ODER dich mit AJAX beschäftigen!

    LG, Micha



  • Das Attribut action= gibt es nicht für <table>.
    Jedes Input muß eine eigene ID haben.

    Ich würde den Test ins JS verlegen, abhängig vom Ergebnis dann
    alles setzen oder halt nicht.

    Wenn die Inputs auch noch einen name= habe, können die Werte
    beim Neu-Senden der Seite wieder eingefügt werden..

    Mir scheint der komplette Code enthält noch einiges an Fehlern.
    Validiere mal, am Besten wäre ein Link zu einer Demo.

    Noch eins: Arrays gibt es in HTML nicht.



  • Scheppertreiber schrieb:

    Das Attribut action= gibt es nicht für <table>.

    tippfehler, ich meinte natürlich <form>

    Scheppertreiber schrieb:

    Jedes Input muß eine eigene ID haben.

    die textfelder haben ja eine eigene id. wieso muss die checkbox auch eine haben? reicht da nicht der name?

    Scheppertreiber schrieb:

    Ich würde den Test ins JS verlegen, abhängig vom Ergebnis dann
    alles setzen oder halt nicht.

    der test der textfelder ist ja bereits in js realisiert und funktioniert auch. darum gehts ja garnicht.

    Scheppertreiber schrieb:

    Wenn die Inputs auch noch einen name= habe, können die Werte
    beim Neu-Senden der Seite wieder eingefügt werden..

    meinst du über ein submit der form? das mache ich ja auch, nur geht es mir um ein aktion, die noch VOR dem submit passieren soll.

    Scheppertreiber schrieb:

    Mir scheint der komplette Code enthält noch einiges an Fehlern.
    Validiere mal, am Besten wäre ein Link zu einer Demo.

    sorry, is im intranet. habe aber auch schon validiert, keine fehler.

    Scheppertreiber schrieb:

    Noch eins: Arrays gibt es in HTML nicht.

    ich meinte id="irgendwas['.$i.']", wobei $i für jede zeile einzigartig ist. dadurch werden mir eben auch für jede zeile einzigartige id's erzeugt. für mich ist das wie ein array.. variable mit index halt:)

    --
    @RandomAccess85
    schade, dass die variablen verloren gehen.. ich probiere gerade das mit den cookies. habe leider probleme ein js-array in ein cookie zu schreiben.
    ich habe es so probiert:

    var rows = new Array();
    

    jeder erfolgreicher test speichert die zeile in das array:

    var hRow = hiddenRows.push(el);
    

    .. das funktioniert laut debug.

    eine einfache variabel in ein cookie schreiben funktioniert. nur wie mache ich das mit einem array?
    zum lesen schreiben benutze ich die cookie funktionen von der w3c-seite

    und hey.. danke für eure hilfe:-)



  • Mal 'ne blöde Frage: Was soll eigentlich dabei herauskommen ?

    Wenn es nur um die Validierung des Inhalts jedes Inputs geht und Du dann
    automatisch die Ankreuzer setzt ist ein Array eh nicht notwendig. Vor dem
    submit kannst Du ja abfragen ob alle gesetzt sind.



  • Scheppertreiber schrieb:

    Mal 'ne blöde Frage: Was soll eigentlich dabei herauskommen ?

    Wenn es nur um die Validierung des Inhalts jedes Inputs geht und Du dann
    automatisch die Ankreuzer setzt ist ein Array eh nicht notwendig. Vor dem
    submit kannst Du ja abfragen ob alle gesetzt sind.

    der ablauf sieht so aus:

    - aufrufen von index.php erzeugt eine liste aller "artikel"
    - wenn der filter aufgerufen wird, so wird die liste der "artikel" eben kürzer
    - in jeder dieser ansichten können daten verändert bzw. per checkbox markiert werden
    - nachdem durch die filter gesurft wurde und überall was angeklict wurde, soll die form bestätigt werden und alle ausgewählten artikel sollen in einer übersicht angezeigt werden.

    im prinzip ist es sowas wie ein shop-system. nur das bei mir nicht eingekauft wird:)



  • Hallo,

    ich bleib dabei: Cookies oder AJAX (dynamische Inhalte). Vielleicht geht es auch irgendwie über Sessions (PHP).

    LG, Micha



  • Ach so ...

    Sowas habe ich auch 🙂

    Ich habe dazu eine Tabelle, der tbody ist dazu scrollbar. in thead jeweils
    Button in den Spaltenköpfen (lösen die Suche und Sortierung nach der Spalte aus)
    und darunter die Suchbegriffe zum "Filtern". Die tr haben je eine id um diese,
    wenn sie angeklickt werden, als aktiv zu kennzeichnen. So ein Häkchen habe ich
    bei einem Job auch, an und abklickbar.

    Es ist ein Dokumentenarchiv, mit klick auf eine Zeile wird das zugehörige PDF
    geladen und angezeigt. Das An- und Wegklicken sende ich per HTTPRRequest ans
    Programm damit es das in eine db (sqlite) einträgt. Da jede Zeile eine id hat
    (dazu den int primary key verwendet) kann man das schön einfach wiederfinden.

    Gib der Zeile einfach einen onClick-Handler der die x setzt. Per JS und CSS
    (zB mit display:none) könntest Du auch einzelne Zeilen komplett ausblenden.

    Erst wenn alles fertig ist, absenden. Den Rest dann auf ... überprüfen und
    verarbeiten.



  • so eine ajax-variante hatte ich auch schonmal implementiert. leider war das performance-technisch arg unbefriedigend. daher suche ich lieber nach was anderem, oder ist deine js/css geschichte auch bei >2000 zeilen noch schön schnell?

    ich muss da nochmal ne nacht drüber schlafen:)
    schöne grüße



  • Du brauchst doch nur per JS CSS-Attribute zu setzen. Du hast keine 2000 Zeilen
    auf dem Bildschirm.

    Ehrlich gesagt, 2000 Zeilen sind keine gute Lösung - eher ein konzeptioneller Fehler 🙂



  • naja, dafür hab ich den filter eingebaut. die zeilen werden doch auch "geladen", selbst wenn ich display:none mache oder? hmm. das muss ich mir nochmal genauer anschauen.. klingt interessant.

    schöne grüße


Anmelden zum Antworten