Barksalot: Anmerkung zu $mysqli: KW als Spalte einfügen

Beitrag lesen

Hallo Regina,

Das fehlen vollständigen oder zusammemnhängenden Quelltextes verhindert zuverlässig, dass Dir geholfen werden kann.

ich kann dir nicht mehr zeigen wie hier im Forum steht, denn ich habe nicht mehr. Ich weiß nicht warum du immer wieder auf diesem Thema herumhackst?

$admin_kalenderarten = admin_kalenderarten($mysqli);

// Monate auf Deutsch
$monate = array(
            
            1=>"Januar", 
            2=>"Februar", 
            3=>"März", 
            4=>"April", 
            5=>"Mai", 
            6=>"Juni", 
            7=>"Juli",
            8=>"August", 
            9=>"September",
            10=>"Oktober", 
            11=>"November", 
            12=>"Dezember"

        );

// Anzuzeigenden Monat aus $_GET["ym"] laden und auf 1. des Monats einstellen
$timestamp = get_anzeigemonat_timestamp();

$showYear = date('Y', $timestamp);
$showMonth = date('m', $timestamp);

// H3 Title
$html_title = sprintf("%04d / %02d", $showYear, $showMonth);
  
// Prev & Next / Monat Link
$nextMonth = date('Y-m', mktime(0, 0, 0, $showMonth+1, 1, $showYear));
$prevMonth = date('Y-m', mktime(0, 0, 0, $showMonth-1, 1, $showYear));

// <tr>...</tr> Zeilen für die Kalenderausgabe konstruieren
$weeks = erzeuge_kalenderwochen($timestamp, $mysqli, $teile25);

/**
 * Ermittle den Timestamp für den 1. des anzuzeigenden Monats. Der Monat wird 
 * im Query-Parameter ym übergeben. Fehlt der oder hat falsches Format, wird
 * der aktuelle Monat verwendet.
 * 
 * @return int    Unix-Timestamp des ersten Tages im Anzeigemonat
 */
function get_anzeigemonat_timestamp() {
    $ym = filter_input(INPUT_GET, "ym",
                       FILTER_VALIDATE_REGEXP,
                       [ 'options' => [ 'regexp'=>'/\d{4}-\d{1,2}/' ] ]);
  
    // Parameter fehlt oder die Validierung ist gescheitert
    if (is_null($ym) || $ym === false) 
    {
        $ym = date('Y-m');
    }

    // $ym ist jetzt immer im Format yyyy-mm.
    // Entweder durch Regex bestätigt, oder von date geliefert.
    $parts = explode("-", $ym);

    //                         Monat               Jahr                               
    return mktime(0,0,0,intval($parts[1]),1,intval($parts[0]));
}

/**
 *  Generiert Table Rows mit Kalendereinträgen. Daten werden automatisch beschafft.
 *
 * @return array   Ein Array mit fertigen HTML Fragmenten pro Row
 */
function erzeuge_kalenderwochen($firstOfMonth, $mysqli, $teile25) 
{
    $thisMonth = date("Y-m", $firstOfMonth);
    $showYear  = intval(date('Y', $firstOfMonth));
    $showMonth = intval(date('m', $firstOfMonth));
    
    // date('w') liefert 0:So 1:Mo 2:Di usw...
    // Finde Wochentag des Monatsersten, +6, %7, ergibt Wochentag des Tages zuvor.
    // Diese Tagesnummer ist die Anzahl von leeren Feldern vor dem 1. des Monats
    // $day wird die auszugebende Tagesnummer sein, d.h. um N Felder leerzulassen,
    // wird $day auf 1-N initialisiert.
    $weekDayBeforeFirst = (6 + intval(date('w', $firstOfMonth))) % 7;
    $day = 1 - $weekDayBeforeFirst;
    
    // Kalender zusammenbauen
    // Tagesdatum und YYYY-MM Form des aktuellen Monats ermitteln
    $today = date('Y-m-d', time());
    // Anzahl der Tage im Anzeigemonat ermitteln
    $day_count = intval(date('t', $firstOfMonth));
    // $weeks: Ein Eintrag pro Anzeigewoche
    $weeks = [];
    
    while ($day <= $day_count)
    {
        // Negative Werte oder zu große Werte für $day sind kein Problem, die werden
        // von mktime in den passenden Monat verschoben.
        $weekNr = date('W', mktime(0,0,0,$showMonth, $day, $showYear));
        $weekParts = [ "<td class='kw'>$weekNr</td>" ];
        
        // Die 7 Tage einer Woche aufbereiten
        for ($i=0; $i<7; $i++)
        {
            $weekParts[] = formatiere_tag($thisMonth, $day_count, $day, $today, $mysqli, $teile25);
            $day++;
        }
    $weeks[] = "<tr>".implode('', $weekParts)."</tr>";
    }
    return $weeks;
}

/**
 * Formatiere das HTML Fragment für einen Kalendertag
 * 
 * @param  \mysqli $mysqli        mysqli-Objekt für Datenbeschaffung
 * @param  string  $date          Anfragedatum, yyyy-mm-tt
 * @param  bool    $aktuellerTag  True um Tag als aktuelles Datum zu formatieren
 * @return string
 */
function formatiere_tag($thisMonth, $day_count, $day, $today, $mysqli, $teile25)
{

    if ($day < 1 || $day > $day_count) 
    {
        return "<td class='emptyDay'></td>";
    }

    $date = $thisMonth . sprintf('-%02d', $day);


    // Daten beschaffen

    $datumTermine = kalender_termine($mysqli, $date, $teile25, 3);

    ##### Debugging #####################################################
    echo "<pre>Testausgabe:\n\n";
    echo '$datumTermine: '; print_r( $datumTermine );
    echo "\n" . '$date: '; print_r( $date );
    echo "\n" . '$teile26: '; print_r( $teile25 );
    //exit;
    #####################################################################

    $anzTermineGesamt = count_alle_kalender_termine($mysqli, $date, $teile25);

    var_dump($datumTermine);
    
    $dayClasses = ($date == $today ? "today " : "");
    $dayHtml = "<td class='$dayClasses calendarDay'>"
             . formatiere_tag_header($date, $day, $anzTermineGesamt);
    
    foreach ($datumTermine as $termin)
    {
        $dayHtml .= formatiere_termin($termin);
    }

    return $dayHtml . '</td>';
}


/**
 * Ermittle alle Kalendereinträge zu einem Datum und einer Liste von Empfängern
 *
 * @param \mysqli      $mysqli     Eine MySQLI Connection
 * @param string       $datum      Das Abfragedatum im Format yyyy-mm-dd
 * @param string[]     $teile25    Komma-getrennte Liste der möglichen Kalenderarten (k_art)
 *
 * @return Array 
 */
function kalender_termine($mysqli, $datum, $teile25, $limit = false) {

    $values = $teile25;
    $empfaengerListe = "'".implode("','", $values)."'";

    $select = "SELECT 
                kt_id,
                kt_kalenderID,
                kt_datum,
                test,
                k_code,
                k_art,
                k_jobNr,
                k_bezeichnung,
                k_auto,
                k_farbe,
                k_datum_von, 
                k_ganztags,
                k_von,
                k_bis,
                f_bezeichnung,
                f_kennzeichen,
                ka_farbe,
                kf_farbe,
                kf_color 

               FROM kalender_termine 
               LEFT JOIN
                 kalender ON kalender.k_code = kalender_termine.kt_kalenderID
               LEFT JOIN
                 fuhrpark ON fuhrpark.f_id = kalender.k_auto
               LEFT JOIN
                 kalender_arten ON kalender_arten.ka_code = kalender.k_art
               LEFT JOIN
                 kalender_terminfarbe ON kalender_terminfarbe.kf_farbe = kalender_arten.ka_farbe

               WHERE kt_datum=?
               AND k_art IN (" . $empfaengerListe . ")
               ORDER by test ASC";

    if ($limit != false) {
                
                $stmt = $mysqli->prepare($select . " LIMIT ?" );
                $stmt->bind_param("ss",  $datum, $limit);
                
    } else {
                
                $stmt = $mysqli->prepare($select );
                 $stmt->bind_param("s",  $datum);
             }
    echo "<pre>". print_r( $select ); echo "</pre>" ;
    $stmt->execute();

######### temporär Einfügen #############################################
      if ( $mysqli -> error ) {
          echo "<pre>";
          printf("Errormessage: %s\n", $mysqli -> error);
          echo "<hr>";
          echo $select;
          exit;
      }
########################################################################

    $stmt->bind_result(
          $kt_id,
          $kt_kalenderID,
          $kt_datum,
          $test,
          $k_code,
          $k_art,
          $k_jobNr,
          $k_bezeichnung,
          $k_auto,
          $k_farbe,
          $k_datum_von,
          $k_ganztags, 
          $k_von,
          $k_bis,
          $f_bezeichnung,
          $f_kennzeichen,
          $ka_farbe,
          $kf_farbe,
          $kf_color
     );
}

/**
 * Zähle die Kalendereinträge zu einem Datum und einer Liste von Kalenderarten
 *
 * @param \mysqli      $mysqli     Eine MySQLI Connection
 * @param string       $datum      Das Abfragedatum im Format yyyy-mm-dd
 * @param string[]     $teile25    Komma-getrennte Liste der möglichen Kalenderarten (k_art)
 *
 * @return int Anzahl Einträge
 */

function Count_Alle_Kalender_Termine($mysqli, $datum, $teile25) {
// Bis eine bessere Abfrage bereitstelt, auf die alte Technik der unlimitierten
// Abfrage zurückfallen
   $termine = Kalender_Termine($mysqli, $datum, $teile25);
   return count($termine);
}

function formatiere_tag_header($date, $day, $anzTermine)
{

    $dailyLink = '<a href="tageskalender.php?date='.$date .'">';
    if ($anzTermine > 3)
    {
        $header = "$day - {$dailyLink}Alle $anzTermine anzeigen</a>";
    }
    else
    {
        $header = $dailyLink.$day."</a>";
    }
    return "<div class='dayHeader'>$header</div>";
}

function formatiere_termin($termin) {

    // Formatiere_Datenblatt_Link wählt k/f-Bezeichnung automatisch aus.
    // Formatiere_JobNr_und_Zeit gibt nur ein <span> aus wenn die JobNr 
    //     gefüllt oder ein Zeitraum angefordert ist. Sonst kommt '' zurück.
    if ($termin["kt_datum"] == $termin["k_datum_von"])
    {
        if ($termin["k_ganztags"] == "0")
        {
            $terminHoehe = '';
            $terminInhalt = formatiere_datenblatt_link($termin) . formatiere_jobNr_und_zeit($termin, true);
        }
        else
        {
            $terminHoehe = 'min-height: 37px;';
            $terminInhalt = formatiere_datenblatt_link($termin) . formatiere_jobNr_und_zeit($termin, false);
        }
    }
    else
    {
        $terminHoehe = 'height: 37px;';
        // Wochentag des Termindatums prüfen
        $datum = getdate(strtotime($termin["kt_datum"]));
        if ($datum['wday'] == 1)    // Montag
        {
            $terminInhalt = formatiere_datenblatt_link($termin) . formatiere_jobNr_und_zeit($termin, false);
        }
        else
        {
            $terminInhalt = '';
        }
    }
    return '<div style="background:'.$termin["ka_farbe"].'; margin-bottom:5px; padding-left:8px;'.$terminHoehe.'">' 
         . $terminInhalt 
         . '</div>';
}

function Formatiere_Datenblatt_Link($termin)
{
    $text  = ($termin["k_auto"] == "") ? $termin["k_bezeichnung"] : $termin["f_bezeichnung"];
    $url   = '/kalender-datenblatt.php?code='.$termin["k_code"];
    $farbe = 'color:'.$termin["kf_color"];
            
    return '<a href="'.$url.'" style="'.$farbe.'">'.shortText($text, 15).'</a>';
    //return '<span style="color:'.$termin["kf_color"].'"><a href="'.$url.'" style="'.$farbe.'">'.shortText($text, 15).'</a></span>';
}

/**
 * Formatiere JobNr und Zeitraum eines Termineintrags.
 * 
 * Ist die JobNr leer und kein Zeitraum gefordert, wird ein Leerstring zurückgegeben.
 * 
 * Ist die JobNr bestückt und ein Zeitraum gefordert, werden beide durch " - " getrennt.
 * 
 * Das Ergebnis wird in einen span mit style-Attribut eingehüllt, das die Farbe gemäß
 * Datenbank setzt. TODO: Unnötige Styles ins CSS verlegen!
 * 
 * @param  array $termin       Terminzeile aus dem SQL Ergebnis
 * @param  bool  $mitZeitraum  true übergeben um auch den Zeitraum auszugeben
 * 
 * @return string              HTML-Text mit span Element, das die Werte enthält
 */
function Formatiere_JobNr_und_Zeit($termin, $mitZeitraum)
{
    $parts = [];
    if ($termin['k_jobNr'] != '')
    {
        $parts[] = $termin['k_jobNr'];
    }
    if ($mitZeitraum)
    {
        $parts[] = $termin['k_von'].' bis '.$termin['k_bis'].' Uhr';
    }
    if (count($parts) == 0)
    {
        return '';
    }
    return '<span style="color:'.$termin["kf_color"].'; font-size:10px; display: block; padding-bottom: 2px;">'
           . implode(' - ', $parts)
           . '</span>';
}

Bis bald!
Bernd

0 117

KW als Spalte einfügen

Barksalot
  • php
  1. 1
    Regina Schaukrug
    1. 0
      Barksalot
      1. 0
        Regina Schaukrug
        1. 0
          Barksalot
          1. 1
            Regina Schaukrug
            1. 0
              Barksalot
              1. 1
                Regina Schaukrug
                1. 0
                  Barksalot
              2. 0
                Rolf B
                • php
                • programmiertechnik
                1. 0
                  Barksalot
                  1. 0
                    Rolf B
                    1. 0
                      beatovich
                2. 0
                  Barksalot
                  1. 0
                    Rolf B
                    1. 0
                      Barksalot
                      1. 0
                        Rolf B
                      2. 1
                        Rolf B
                        1. 0
                          Barksalot
                      3. 0

                        Hier mal meine Vorgehensweise

                        Regina Schaukrug
                        1. 0

                          (Fortsetzung)

                          Regina Schaukrug
                        2. 0

                          2. Fortsetzung: Termine

                          Regina Schaukrug
                          1. 0
                            Barksalot
                            1. 0
                              Regina Schaukrug
                              1. 0
                                Barksalot
                                1. 0
                                  Regina Schaukrug
                                  1. 0
                                    Barksalot
                                    1. 0
                                      Regina Schaukrug
                                      1. 0
                                        Barksalot
                                        1. 0
                                          Regina Schaukrug
                                    2. 0
                                      Rolf B
                              2. 0
                                beatovich
                                1. 0
                                  Regina Schaukrug
                                  1. 0
                                    beatovich
                              3. 0
                                Regina Schaukrug
                              4. 0
                                Rolf B
                  2. 2
                    Rolf B
                  3. 2
                    Rolf B
                    1. 0
                      MudGuard
                      1. 0
                        Rolf B
                        1. 0
                          dedlfix
                      2. 0
                        Regina Schaukrug
                    2. 0
                      Barksalot
                      1. 0
                        Regina Schaukrug
                        1. 0
                          Barksalot
                          1. 0
                            Regina Schaukrug
                            1. 0
                              Barksalot
                      2. 0
                        Rolf B
                        1. 0
                          Barksalot
                          1. 0
                            Rolf B
                            1. 0
                              Barksalot
                              1. 0
                                Regina Schaukrug
                                1. 0
                                  Barksalot
                                  1. 0
                                    Regina Schaukrug
                                    1. 0
                                      Barksalot
                                      1. 0
                                        Regina Schaukrug
                                        1. 0
                                          Barksalot
                                          1. 0
                                            Regina Schaukrug
                                            1. 0
                                              Barksalot
                                              1. 0
                                                Regina Schaukrug
                                                1. 0
                                                  Barksalot
                                                  1. 0
                                                    Regina Schaukrug
                                                    1. 0
                                                      Barksalot
                                                      1. 0
                                                        Regina Schaukrug
                                                        1. 0
                                                          Barksalot
                                                          1. 0
                                                            Regina Schaukrug
                                                            1. 0
                                                              Barksalot
                                                              1. 0

                                                                Anmerkung zu $mysqli: KW als Spalte einfügen

                                                                Barksalot
                                                                1. 0
                                                                  Regina Schaukrug
                                                                  1. 0
                                                                    Barksalot
                                                                    1. 0
                                                                      Regina Schaukrug
                                                                      1. 0
                                                                        Barksalot
                                                                        1. 0
                                                                          Rolf B
                                                                        2. 0
                                                                          Regina Schaukrug
                                                                          1. 0
                                                                            Barksalot
                                                                            1. 0
                                                                              Regina Schaukrug
                                                                              1. 0
                                                                                Barksalot
                                                                                1. 0
                                                                                  Regina Schaukrug
                                                                                  1. 0
                                                                                    Barksalot
                                                                                2. 0
                                                                                  Barksalot
                                                                                  1. 0
                                                                                    Rolf B
                                                                                    1. 0
                                                                                      Barksalot
                                                                                      1. 1
                                                                                        Regina Schaukrug
                                                                                        1. 0
                                                                                          Barksalot
                                                                                          1. 0
                                                                                            Rolf B
                                                                                      2. 0
                                                                                        Rolf B
                                                                                        1. 0
                                                                                          Barksalot
                                                                                  2. 0
                                                                                    Regina Schaukrug
                                                                                    1. 0
                                                                                      Barksalot
                                                                                      1. 0
                                                                                        Regina Schaukrug
                                                                                        1. 0
                                                                                          Barksalot
                                                                                          1. 0
                                                                                            Regina Schaukrug
                                                                                            1. 0
                                                                                              Barksalot
                                                                                              1. 0
                                                                                                Rolf B
                                                                                              2. 0
                                                                                                Regina Schaukrug
                                                                2. 0
                                                                  Rolf B
                                                                  1. 0
                                                                    Barksalot
                                                                    1. 0
                                                                      Rolf B
                3. 0
                  pl
                  • perl
                  • programmiertechnik
                  1. 0
                    Rolf B
                    1. 0
                      pl
                    2. 0
                      pl
          2. 0

            Einträge anordnen

            Barksalot
            1. 0
              pl
              1. 0
                Barksalot
                1. 0
                  Rolf B
                  1. 0
                    pl
  2. 1

    Danke!

    Barksalot
    1. 1
      Rolf B
      1. 0
        Barksalot
        1. 0
          Rolf B
          1. 0

            Grundsatzdiskussion bind ./. fetch_assoc und prepare ./. mysqli_real_escape_string

            Regina Schaukrug
            1. 0
              Rolf B
              1. 0
                Barksalot
                1. 0
                  Regina Schaukrug
                  1. 0
                    Rolf B
                    1. 0

                      Humor...

                      Regina Schaukrug
                      • menschelei