Übergabe $_POST aus einer Tabellenzelle

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

  • Übergabe $_POST aus einer Tabellenzelle

    Ein frohes neues Jahr an alle Forenmitglieder.

    Ich bearbeite gerade einen Dienstplaner der die Schichtdienste aller Angestellten anzeigt.

    Dazu wird nach Auswahl eines Monat/Jahr eine Tabelle angezeigt in der horizontal die Tage des Monats und vertikal alle Angestellten untereinander dargestellt werden.
    Die eingetragenen Dienstarten (Tagschicht, Nachtschicht ect. ) werden bei jedem Angestellten an dem entsprechenden Tag (mit entsprechender Formatierung und ggf. vorhandenem Kommentar als 'title') angezeigt.
    Nun möchte ich das beim anklicken einer Tabellenzelle der entsprechende Datumswert für den angeklickten Tag (Spalte) und die NutzerID des angeklickten Nutzers (Zeile) zur Ersteingabe bzw. Bearbeitung mittels $_POST übergeben werden.
    Das onklick event befindet sich im Tag der Tabellenzelle: (echo "<td onclick='document.edit_data.submit()'; align='center'"


    PHP-Code:
    <div>
        <fieldset class="table_list">
            <form class="frm" name='edit_data' method='POST' action='planning.php?mpkt=1'> 
            <table class="table" align='center'>
                <thead class="frm">
                    <tr class="frm">
                        <th align='left' width='160px'></th>

                        <?php
                        
    // Schleife für Tage des Monats / 1.Zeile
                        
    for ($selTag 1$selTag <= date("t",$selDatum); $selTag++)
                        {
                            
    $selDatum mktime(000$selMonat$selTag$selJahr);        // selektietes Datum als "timestamp"
                            
    $df_tag Dienstfrei($selMonat$selTag$selJahr);              // Übergabewert Funktion Dienstfrei [0]=Mo.-Fr. [1]=Sa. [2]=Sa+ [3]=So./Feiertag
            
                            
    $ferien_tag Ferien($selMonat$selTag$selJahr);              // Übergabewert Funktion Ferien [0]=keine Ferien [1]=Ferien in Bayern
            
                            
    echo "<th align='center' width='28px' ";
                                IF (
    $df_tag)
                                {
                                    echo 
    "bgcolor='#DDDDDD' ";
                                }
                                Else
                                {
                                    echo 
    "bgcolor='#F5F5F5' ";        
                                }
                                IF (
    $_aktDatum == $selDatum)
                                {
                                    echo 
    "style='border: solid 1px red; padding-top 3px'>";
                                }
                                Else
                                {
                                    echo 
    "style='border: none; padding-top: 3px'>";        
                                }
                                
    # Ausgabe Tage u. Bezeichnung des Wochentags                        
                                
    echo date ("d"$selDatum) . "<br>" .
                                
    "<div style='font-size: 10px;  ";
                                
    # Ausgabe der Ferien in Bayern
                                
    IF ($ferien_tag)
                                {
                                    echo 
    "border-bottom: solid 5px #85ADAD;' title='Ferien'>";
                                }
                                Else
                                {
                                    echo 
    "border-bottom: solid 5px transparent;'>";        
                                }
                                echo 
    strtr(date("w"$selDatum), $arrTage_kz) . "</div>";                            
                            echo 
    "</th>";
                        }
                        
    ?>    
                    </tr>
                </thead>        
                <?php
                
    // Gruppierung der Datensätze nach Fachbereichen            
                
    $sql_o "SELECT * FROM `unitc`
                        INNER JOIN `organ` ON organ.orgkey = unitc.fk_orgkey
                        WHERE `orgid` = '
    $_OID'               
                        ORDER BY `unitcid` asc"
    ;
                
    $res_o mysql_query($sql_o);
                
                while(
    $row=mysql_fetch_array($res_o))
                {    
                    
    $cid $row['unitcid'];
                    
    $cname $row['unitcname'];
                    echo 
    "<tr class='frm'>";    
                        echo 
    "<td class='frm_o' colspan='$selTag' >";
                            echo 
    $cname;                        
                        echo 
    "</td>";    
                    echo 
    "</tr>";

                    
    // Zeilenweise Auflistung der Nutzer (Hauptbereich der Tabelle)                
                    
    $sql_u "SELECT `rankshort`, `surname`, `forename`, userid FROM `user`
                            INNER JOIN `rank` ON rank.rankkey = user.fk_rankkey
                            INNER JOIN `role` ON role.rolekey = user.fk_rolekey
                            INNER JOIN `organ` ON organ.orgkey = user.fk_orgkey
                            INNER JOIN `unitc` ON unitckey = user.fk_unitckey
                            WHERE `staffno` != 0 AND `orgid` = '
    $_OID' AND `unitcid` = $cid             
                            ORDER BY `roleid` desc, `rankid` desc, `surname` asc"
    ;
                    
    $res_u mysql_query($sql_u);
                    
                    while(
    $row=mysql_fetch_array($res_u))
                    {    
                        
    $rank $row['rankshort'];
                        
    $name $row['surname'];
                        
    $vname $row['forename'];
                        
    $userid $row['userid'];
                        echo 
    "<tr class='frm'>";    
                            
    //    1. Spalte Personal (DstG, Name, Vorname)            
                            
    echo "<td align='left'>";
                                echo 
    $rank " " $name " " $vname;
                            echo 
    "</td>";
                            
    //  Tagesspalten für den entsprechenden Monat
                            
    for ($selTag 1$selTag <= date("t",$selDatum); $selTag++)
                            {
                                
    $selDatum mktime(000$selMonat$selTag$selJahr);        // selektietes Datum als "timestamp"
                                
    $df_tag Dienstfrei($selMonat$selTag$selJahr);              // Übergabewert Funktion Dienstfrei [0]=Mo.-Fr. [1]=Sa. [2]=Sa+ [3]=So./Feiertag

                                
    echo "<td  onclick='document.edit_data.submit()'; align='center'";                        
                                    IF (
    $df_tag)
                                    {
                                        echo 
    "bgcolor='#DDDDDD' ";
                                    }
                                    Else
                                    {
                                        echo 
    "bgcolor='#F5F5F5' ";        
                                    }
                                    IF (
    $_aktDatum == $selDatum)
                                    {
                                        echo 
    "style='border:solid 1px red'>";
                                    }
                                    Else
                                    {
                                        echo 
    "style='border:none'>";        
                                    }    
                                    
                                    
    // Zeilenweise Auflistung der Nutzerdaten (Hauptbereich der Tabelle)    
                                    
    $selDatum date("Y-m-d",$selDatum);    # Umwandlung in strTime in Datumsformat            
                                    
    $sql_d "SELECT fk_userid, shiftdate, shiftshort, shiftcolour, comments
                                    FROM `data_
    $_OID`                            
                                    INNER JOIN `shift` ON `shift`.shiftkey = `data_
    $_OID`.fk_shiftkey
                                    WHERE `data_
    $_OID`.fk_userid = '$userid' AND shiftdate = '$selDatum'";
                                    
    $res_d mysql_query($sql_d);
                
                                    while(
    $row=mysql_fetch_array($res_d))
                                    {
                                        
    $fk_userid $row['fk_userid'];                                
                                        
    $shiftdate $row['shiftdate'];
                                        
    $shiftshort $row['shiftshort'];
                                        
    $shiftcolour $row['shiftcolour'];
                                        
    $comments $row['comments'];


                                        
    // <div> für Formatierung der Daten und Anzeige der Kommentare
                                        
    echo "<div style='line-height: 16px; font-weight: 100; background: $shiftcolour; ";
                                        If (
    $comments != NULL
                                        {
                                            echo 
    "font-weight: 700; font-style: italic;' title='$comments";            # Format u. Ausgabe  'Comments'
                                        
    }
                                        echo 
    "' >";    
                                        echo 
    $shiftshort "</div>";    # Ausgabe Schichtart                
                                    
    }
    // Formularfelder für Datum und NutzerId (hier noch als Text später 'hidden')                        
    echo "<input type='text' name='sDatum' value='$selDatum'>";    // Datum der Spalte
    echo "<input type='text' name='sUser' value='$userid'>";        // UserId der Benutzerzeile

                                
    echo "</td>";
                            }
                        echo 
    "</tr>";                            
                    }
                }        
                
    ?>
            </table>
            </form>
        </fieldset>    
    </div>
    <?php
    $S 
    $_POST['sDatum'];
    $U $_POST['sUser'];
    echo 
    $S "/" $U;
    ?>
    ...
    die Input Felder in den Zellen zeigen die korrekten Werte an, aber beim klick auf eine Zelle werden diese nicht richtig übergeben.
    Ich vermute das bei der Übermittlung der Daten die "letzten" Werte aus den Schleifen übergeben werden, aber ich habe keine Ahnung wie ich das abfangen kann.
    Wäre nett wenn mir jmd helfen könnte.

  • #2
    Worked as designed. Du überschreibst jedes Mal den Namen des Input-Feldes, also wird auch nur der letzte Wert übermittelt. Mach mal Folgendes
    PHP-Code:
    echo "<input type='text' name='sDatum[]' value='$selDatum'>";
    echo 
    "<input type='text' name='sUser[]' value='$userid'>"
    und dann lass dir das mit einem print_r ausgeben. Dann verstehst du es.

    Gruß
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Datenbankabfragen haben übrigens inmitten der HTML-Ausgabe nichts verloren. Halte dich an das EVA-Prinzip.

      SELECT * sollte niemals verwendet werden. Gib im SELECT immer die Spalten an, die du im Ergebnis erwartest.

      Du beachtest die Kontextwechsel nicht. Werte, die du in HTML-Code einfügst, müssen mit htmlspecialchars() maskiert werden. Werte, die du in SQL-Code einfügst, müssten mit mysql_real_escape_string() maskiert werden.

      Die mysql_* Funktione sind veraltet und sollten nicht mehr verwendet werden. Als Alternative gibt es mysqli und PDO.

      Kommentar


      • #4
        @ Kropff:

        die Ausgabe von
        PHP-Code:
        $S $_POST['sDatum'];
        echo 
        print_r($S,true); 
        liefert folgendes Ergebnis:
        Array ( [0] => 2015-01-01 )

        Alles klar, aber wie kann ich das ändern?

        Kommentar


        • #5
          @ h3ll:

          Wenn das so funktioniert wie ich mir das vorstelle versuche ich die Datenbankabfragen aus dem html-teil zu nehmen und passe auch die select-Anweisungen entsprechend an. Auch die mysql_* Funktionen möchte ich dann auf mysqlli umstellen.
          Da ich aber Änfänger bin und nicht sofort den Überblick verlieren möchte, versuche ich es erst zu realisieren (mit den mir teil-bekannten alten) und dann anzupassen.
          Die folgende Aussage verstehe ich nicht richtig, versuche mir aber die "Grunglagen" anzueignen.

          Zitat von h3ll
          Du beachtest die Kontextwechsel nicht. Werte, die du in HTML-Code einfügst, müssen mit htmlspecialchars() maskiert werden. Werte, die du in SQL-Code einfügst, müssten mit mysql_real_escape_string() maskiert werden.

          Kommentar


          • #6
            Ich habe mir nun 2 Arrays erstellt
            PHP-Code:
            $s_arr [$selTag]  = $selTag;
            $s_arr [$selTag][$userid]   = $userid
            und meine Input-Felder wie folgt angepasst
            PHP-Code:
            echo "<input type='text' name='sDatum[$selTag]' value='$s_arr[$selTag][$selDatum]'>";    // Datum der Spalte
            echo "<input type='text' name='sUser[$userid]' value='$s_arr[$selTag][$userid]'>";    // UserId der Benutzerzeile 
            als Ergebnis wird nun in jeder Zelle der Tageswert u. die Userid angezeit
            -----------------------------------------------------
            1[2015-01-01]. | 2[2015-01-02]. | 3[2015-01-03]. |
            1[d215c89a].... | 2[d215c89a].... | 3[d215c89a].... |
            -----------------------------------------------------
            1[2015-01-01]. | [COLOR="blue"]2[2015-01-02][/COLOR]. | 3[2015-01-03]. |
            1[7e4986c7].... | [COLOR="blue"]2[7e4986c7][/COLOR].... | 3[7e4986c7].... |
            -----------------------------------------------------
            1[2015-01-01]. | 2[2015-01-02]. | 3[2015-01-03]. |
            1[3afa2593].... | 2[3afa2593].... | 3[3afa2593].... |
            -----------------------------------------------------

            allerdings bekomme ich es nicht hin die entsprechenden Werte zu über geben.
            Wie schaffe ich es, das beim anklichen des "blauen" Tabellenfeldes die Werte der Input-Felder übergeben werden.

            Soll:
            sDatum = 2015-01-02
            sUser = 7e4986c7


            PHP-Code:
            print_r $s_arr ); 
            liefert folgendes Ergebnis
            Array
            (
            [1] => 1
            [2] => 2
            [3] => 3
            [4] => 4
            [5] => 5
            [6] => 6
            [7] => 7
            [8] => 8
            [9] => 9
            [10] => 10
            [11] => 11
            [12] => 12
            [13] => 13
            [14] => 14
            [15] => 15
            [16] => 16
            [17] => 17
            [18] => 18
            [19] => 19
            [20] => 20
            [21] => 21
            [22] => 22
            [23] => 23
            [24] => 24
            [25] => 25
            [26] => 26
            [27] => 27
            [28] => 28
            [29] => 29
            [30] => 30
            [31] => 31
            [32] => Array
            (
            [d215c89a] => d215c89a
            [7e4986c7] => 7e4986c7
            [3afa2593] => 3afa2593
            [bd83e97e] => bd83e97e
            [8eb82cd2] => 8eb82cd2
            [e130e8f5] => e130e8f5
            [24d5ee15] => 24d5ee15
            [207e55a1] => 207e55a1
            [b148c4a1] => b148c4a1
            [7d91a0cb] => 7d91a0cb
            [d83631b2] => d83631b2
            [b213426f] => b213426f
            [5791d5fb] => 5791d5fb
            [548fadcc] => 548fadcc
            [ef7c7242] => ef7c7242
            [a0c679c3] => a0c679c3
            [252d7be6] => 252d7be6
            [561d0daf] => 561d0daf
            [3f24094b] => 3f24094b
            [2d0fb2ca] => 2d0fb2ca
            [f56f5af0] => f56f5af0
            [9ac53996] => 9ac53996
            [9d7dbe68] => 9d7dbe68
            [5bd1abbb] => 5bd1abbb
            [62244eee] => 62244eee
            )
            )

            vorab Danke für eine mögliche Hilfestellung

            Kommentar


            • #7
              Zitat von Heavy-Dee Beitrag anzeigen
              Wenn das so funktioniert wie ich mir das vorstelle versuche ich die Datenbankabfragen aus dem html-teil zu nehmen und passe auch die select-Anweisungen entsprechend an. Auch die mysql_* Funktionen möchte ich dann auf mysqlli umstellen.
              Ich halte es nicht besonders Zielführend als Anfänger erst das Falsche zu lernen, nur um es dann später umändern zu müssen. Da hast du nur doppelte Arbeit.

              Kommentar


              • #8
                naja wahrscheinlich hast du recht.
                Beim nächsten Abschnitt im obigen Projekt versuche ich es gleich anders.
                Aber erst mal brüte ich weiter über meiner Datenübergabe.

                Kommentar


                • #9
                  da ich zur Umsetzung des Themas noch einige Zeit benötigen werde, möchte ich diesen Thread beenden.
                  Zeitgleich möchte ich mich hiermit jegliche Art der Unterstützung in diesem Forum bedanken!

                  Kommentar

                  Lädt...
                  X