Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Wöchentlicher Wechsel

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Wöchentlicher Wechsel

    Hallo Forum!

    Ich habe schon einige Zeit nicht mehr mit php gearbeitet ... ergo: viele Kenntnisse sind wieder weg

    Gerade sitze ich an einer winzigen php-Seite.
    Eine SQL-Datenbank enthält 14 Einträge, jeweils bestehend aus [ID] und [INHALT], beginnend mit ID=1.

    Abrufen und ausgeben ist kein Problem. Nun möchte ich aber, dass die Ausgabe wöchentlich wechselt ... also nach 14 Wochen (ID = 14) wieder mit der ID 1 begonnen wird.

    Hat dazu jemand einen Tipp für mich?

    Vielen Dank,
    Bernd


  • #2
    Abrufen und ausgeben ist kein Problem. Nun möchte ich aber, dass die Ausgabe wöchentlich wechselt ... also nach 14 Wochen (ID = 14) wieder mit der ID 1 begonnen wird.
    haste schon was versucht, sql oder php?

    Kommentar


    • #3
      Hast du auch schon eine Logik dafür überlegt? Also wie willst du erkennen, wann du welche ID anzeigst? Wie weißt du wann du zuletzt welche angezeigt hast.. müsste man speichern, oder errechnen (52 KW : 14 = 4 Zufall? )

      Oder zB in der DB pro Eintrag von und bis speichern und dann auf das Tagesdatum DATE() mit BETWEEN abfragen, etc.. aber die Konzeption der Logik obliegt dir.

      LG
      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Beginnend von einem Startdatum die Differenz in Wochen zum aktuellen Tag berechnen (DateTime::diff) und Modulo 14, 1 addieren und fertig ist dein Index.
        PHP-Klassen auf github

        Kommentar


        • #5
          mit (DateTime::diff) wie jspit schrieb ist wohl die schnellste Art.

          Kommentar


          • #6
            PHP-Code:
            $today = new DateTime();
            $maxIds 14;
            $currentWeek = (int)$today->format('W');
            $currentWeek 15;//zum testen
            $currentId $currentWeek%$maxIds;
            var_dump($currentId); 
            oder

            PHP-Code:
            $sql ="SELECT inhalt FROM hintergrundbilder WHERE id = DATE_FORMAT(NOW(),'%W') % count(id)"//nicht sicher ob das mit dem count einfach so klappt, vielleicht braucht man ein subselect 
            apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

            Kommentar


            • #7
              Wow!
              Danke für Eure zahlreichen Antworten. Da werde ich mich morgen gleich mal dran setzen.

              Vielen Dank & Grüße,
              Bernd

              Kommentar


              • #8
                Den Gedanken die Wochennummer zu nutzen hatte ich Anfangs auch. Hat nur den kleinen Schönheitsfehler, das zum neuen Jahr immer ein Sprung (z.B. von 11 -> 1) drin ist.
                Ist halt die Frage wie wichtig es Bernd ist, alle Einträge streng gleichberechtigt zu behandeln.

                LG jspit
                PHP-Klassen auf github

                Kommentar


                • #9
                  Konnte doch nicht bis morgen warten und hab' es gleich ausprobiert!

                  Danke, BlackScorp!
                  Das konnte super eingebaut werden.

                  Vielen Dank & Grüße,
                  Bernd

                  Kommentar


                  • #10
                    Zitat von BlackScorp Beitrag anzeigen
                    PHP-Code:
                    $today = new DateTime();
                    $maxIds 14;
                    $currentWeek = (int)$today->format('W');
                    $currentWeek 15;//zum testen
                    $currentId $currentWeek%$maxIds;
                    var_dump($currentId); 
                    Nur sicherheitshalber ... lass mal ein Jahr durchlaufen.. Entweder ich habe einen Fehler gemacht oder es wird die Nr. 14 nie angezeigt...

                    PHP-Code:
                    $maxIds 14;

                    for (
                    $i 1$i <= 53$i++) {
                        
                    $currentWeek $i;
                        
                    $ID $currentWeek $maxIds;
                        
                    printf("KW: %2d -> ID: %2d <br>"$i$ID);

                    Code:
                    KW:  1 -> ID:  1
                    KW:  2 -> ID:  2
                    KW:  3 -> ID:  3
                    KW:  4 -> ID:  4
                    KW:  5 -> ID:  5
                    KW:  6 -> ID:  6
                    KW:  7 -> ID:  7
                    KW:  8 -> ID:  8
                    KW:  9 -> ID:  9
                    KW: 10 -> ID: 10
                    KW: 11 -> ID: 11
                    KW: 12 -> ID: 12
                    KW: 13 -> ID: 13
                    KW: 14 -> ID:  0
                    KW: 15 -> ID:  1
                    KW: 16 -> ID:  2
                    KW: 17 -> ID:  3
                    KW: 18 -> ID:  4
                    KW: 19 -> ID:  5
                    KW: 20 -> ID:  6
                    KW: 21 -> ID:  7
                    KW: 22 -> ID:  8
                    KW: 23 -> ID:  9
                    KW: 24 -> ID: 10
                    KW: 25 -> ID: 11
                    KW: 26 -> ID: 12
                    KW: 27 -> ID: 13
                    KW: 28 -> ID:  0
                    KW: 29 -> ID:  1
                    KW: 30 -> ID:  2
                    KW: 31 -> ID:  3
                    KW: 32 -> ID:  4
                    KW: 33 -> ID:  5
                    KW: 34 -> ID:  6
                    KW: 35 -> ID:  7
                    KW: 36 -> ID:  8
                    KW: 37 -> ID:  9
                    KW: 38 -> ID: 10
                    KW: 39 -> ID: 11
                    KW: 40 -> ID: 12
                    KW: 41 -> ID: 13
                    KW: 42 -> ID:  0
                    KW: 43 -> ID:  1
                    KW: 44 -> ID:  2
                    KW: 45 -> ID:  3
                    KW: 46 -> ID:  4
                    KW: 47 -> ID:  5
                    KW: 48 -> ID:  6
                    KW: 49 -> ID:  7
                    KW: 50 -> ID:  8
                    KW: 51 -> ID:  9
                    KW: 52 -> ID: 10
                    KW: 53 -> ID: 11
                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Zitat von hausl Beitrag anzeigen
                      Nur sicherheitshalber ... lass mal ein Jahr durchlaufen.. Entweder ich habe einen Fehler gemacht oder es wird die Nr. 14 nie angezeigt...
                      Dafür die 0. Noch ein +1 und es passt zu den IDs die von 1-14 gehen ...

                      Kommentar


                      • #12
                        Dann geht der Bereich aber von 2 - 14, dh ohne die 1, oder?

                        Ah... ok .. dann komme ich auf das - ich glaub jetzt weiß ich auch was jspit vorher meinte, der Beginn ist nicht bei 1, aber dann passt es vom Rhytmus.

                        PHP-Code:
                        $maxIds 14;

                        for (
                        $i 1$i <= 53$i++) {
                            
                        $currentWeek $i;
                            
                        $ID $currentWeek $maxIds;
                            
                        $ID++;
                            
                        printf("KW: %2d -> ID: %2d <br>"$i$ID);

                        Code:
                        KW:  1 -> ID:  2 
                        KW:  2 -> ID:  3 
                        KW:  3 -> ID:  4 
                        KW:  4 -> ID:  5 
                        KW:  5 -> ID:  6 
                        KW:  6 -> ID:  7 
                        KW:  7 -> ID:  8 
                        KW:  8 -> ID:  9 
                        KW:  9 -> ID: 10 
                        KW: 10 -> ID: 11 
                        KW: 11 -> ID: 12 
                        KW: 12 -> ID: 13 
                        KW: 13 -> ID: 14 
                        KW: 14 -> ID:  1 
                        KW: 15 -> ID:  2 
                        ...
                        KW: 52 -> ID: 11 
                        KW: 53 -> ID: 12
                        Oder so, dann würde es von der Reihe entsprechend auch starten... gut das ist dann ja Kosmetik ...

                        PHP-Code:
                        $maxIds 14;

                        for (
                        $i 1$i <= 53$i++) {
                            
                        $currentWeek $i;
                            
                        $ID $currentWeek $maxIds;
                            
                        $ID = ($ID === 0) ? $maxIds $ID;
                            
                        printf("KW: %2d -> ID: %2d <br>"$i$ID);

                        Code:
                        KW:  1 -> ID:  1 
                        KW:  2 -> ID:  2 
                        KW:  3 -> ID:  3 
                        KW:  4 -> ID:  4 
                        KW:  5 -> ID:  5 
                        KW:  6 -> ID:  6 
                        KW:  7 -> ID:  7 
                        KW:  8 -> ID:  8 
                        KW:  9 -> ID:  9 
                        KW: 10 -> ID: 10 
                        KW: 11 -> ID: 11 
                        KW: 12 -> ID: 12 
                        KW: 13 -> ID: 13 
                        KW: 14 -> ID: 14 
                        KW: 15 -> ID:  1 
                        KW: 16 -> ID:  2 
                        ...
                        KW: 52 -> ID: 10 
                        KW: 53 -> ID: 11
                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar


                        • #13
                          Die Ungleichverteilung der Id's beim Code von BlackScorp zeigt sich erst beim Test über mehrere Jahre. Die letzten Id's von 12-14 sind seltener vertreten als die anderen.
                          Wenn damit z.B. Werbung rotieren soll, kann ich mir vorstellen das einige Kunden sich benachteiligt fühlen. Da schon Code fürs C&P gepostet wurde, kann ich meinen hinterherwerfen:
                          PHP-Code:
                          $maxId 14;  //id = 1...$maxId
                          $id = (date_create("2015-2-3")->diff(date_create())->days/7)%$maxIds+1
                          Die id's sind im Bereich gleichverteilt.

                          LG jspit
                          PHP-Klassen auf github

                          Kommentar

                          Lädt...
                          X