Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Übergabe $_POST aus einer Tabellenzelle

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Ü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.
    Gruß
    Heavy-Dee


  • #2
    @ Moderator:
    Versehentlich bei Fortgeschrittenen eingestellt.
    Bitte zu den Anfängern verschieben.
    Gruß
    Heavy-Dee

    Kommentar


    • #3
      Du hast eine (große) Form und viele, gleichnamige Formelemente.

      Grundlagen HTML Formulare: Was passiert, wenn du mit einer Form mehrfach Elemente mit gleichem Namen verschickst?
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        @ lstegelitz:

        ach so, das Input-Feld "name='sDatum'" ist ja theoretisch ca. 600mal (20Nutzer / 30Tg) vorhanden.
        Aber wie kann ich das abfangen?
        An dem Key der Datentabelle ja nicht, weil bei der Erstbefüllung ja noch kein Datensatz vorhanden ist.
        Gruß
        Heavy-Dee

        Kommentar


        • #5
          Der Schlüssel ist, im HTML auch eckige Klammern für ein Array zu verwenden:
          PHP-Code:
          <input type="text" name="sDatum[5]" value="<?php echo $_POST["sDatum"][5]; ?>">
          Tutorials zum Thema Technik:
          https://pilabor.com
          https://www.fynder.de

          Kommentar


          • #6
            Crossposting: http://www.php-resource.de/forum/php...llenzelle.html
            while (!asleep()) sheep++;

            Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

            Kommentar


            • #7
              ... habe ich gemacht um mehrere Meinungen und Ansichten zu bekommen.
              Bin ja auf Hilfe angewiesen.
              Hat mir auch schon geholfen bzgl. "htmlspecialchars()" und "mysql_real_escape_string()"

              @ Andreas:
              leuchtet mir ein, aber auf den ersten versuch hat das so auch nicht funktioniert.
              Bei
              PHP-Code:
              echo "<input type='text' name='sDatum[]' value='$selDatum'>"
              bekomme ich folgende Ausgabe:
              Array ( [0] => 2015-01-01 )
              Gruß
              Heavy-Dee

              Kommentar


              • #8
                ... habe ich gemacht um mehrere Meinungen und Ansichten zu bekommen.
                Ist nicht gerne gesehen und das auch nicht ohne Grund! Lies dir die Forenrichtlinien mal durch!

                Bin ja auf Hilfe angewiesen.
                ...wie jeder andere, der hier im forum postet, auch
                while (!asleep()) sheep++;

                Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

                Kommentar


                • #9
                  @wolf29:
                  die Forenrichtlinien habe ich gelesen und auch verstanden.
                  Wenn du natürlich nur folgende "schlechte Gründe" für Multipostings annimmst,
                  - Die User des ersten Forums haben dem TE nicht schnell genug geantwortet
                  - Der TE glaubt, durch häufiges Posten höher qualifizierte Antworten zu erhalten
                  dann gebe ich dir natürlich recht. (auch wenn das nicht der Hintergrund war).
                  ... also bedeutet das für mich: keine Multipostings mehr.
                  Gruß
                  Heavy-Dee

                  Kommentar


                  • #10
                    Um nicht schon wieder einen Fehler zu begehen,

                    habe ich meine weiteren Erkenntnisse, Lösungsansätze und Versuche hier nicht weiter eingefügt und mich auf ein Forum beschränkt.
                    Leider konnte ich mein Problem bisher nicht lösen, aber ich werde es weiter versuchen. (auch mit fast 50 kann man noch was lernen. )
                    Gruß
                    Heavy-Dee

                    Kommentar


                    • #11
                      Grundlagen HTML

                      Andreas Tipp war richtig...
                      Bau doch mal 2 Beispielformulare, eines mit 2 gleichnamigen Feldnamen ohne eckige Klammern, das andere mit eckigen Klammern und poste beide an ein Script. Dann schau dir an, was dabei herauskommt.
                      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                      Kommentar


                      • #12
                        Mir ist mittlerweile klar das bei Feldnamen ohne Klammer dieses Feld immer neu beschrieben wird und ich daher mit variablen Feldnamen arbeiten muss das Problem ist, das ich das aus irgend einem Grund nicht zum laufen bekomme.

                        PHP-Code:
                        echo "<input type='text' name='Spalte[$Spalte]' value='$Spalte'>"
                        liefert für jedes Tabellenfeld entsprechend der Spalte den Wert "1" oder "2" ..."

                        Bei Abfrage des übermittelten Wertes mit
                        PHP-Code:
                        echo "angew. Spalte: "$_POST['Spalte']; 
                        bekomme ich nur "angew. Spalte: Array" ausgegeben.

                        Bin der Verzweiflung nah.
                        Gruß
                        Heavy-Dee

                        Kommentar


                        • #13
                          Weil $_POST['Spalte'] das Array ist, dass du per Formular übergibst.
                          PHP-Code:
                          var_dump($_POST); 
                          Relax, you're doing fine.
                          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                          Kommentar


                          • #14
                            Zitat von VPh Beitrag anzeigen
                            Weil $_POST['Spalte'] das Array ist, dass du per Formular übergibst.
                            PHP-Code:
                            var_dump($_POST); 
                            ok habe ich gesehen, hilft mir aber auch nicht.
                            Seit 3 Tagen suche ich wie verrückt und sehe vor lauter Wald die Bäume nicht mehr.

                            Es kann doch nicht so schwer sein den Feldwert der angeklickten Tabellenzelle zu übergeben.
                            Gruß
                            Heavy-Dee

                            Kommentar


                            • #15
                              Zitat von Heavy-Dee Beitrag anzeigen
                              ... habe ich gemacht um mehrere Meinungen und Ansichten zu bekommen.
                              In wievielen Foren hast du denn nachgefragt? Mindestens 3, oder noch mehr?
                              Zitat von Heavy-Dee Beitrag anzeigen
                              Bin ja auf Hilfe angewiesen.
                              Das ist kein Grund für Crosspostings!!! Crossposter müssen bei mir grundsätzlich auf Hilfe verzichten.
                              Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                              Kommentar

                              Lädt...
                              X