Ankündigung

Einklappen
Keine Ankündigung bisher.

Sternzeichen

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

  • Ambience
    hat ein Thema erstellt Sternzeichen.

    Sternzeichen

    Hallo,

    ich hab hier im htdocs ordner noch ein Sternzeichenscript für Communities gefunden. Hab es ein wenig modifiziert, es sollte aber leicht verständlich sein:

    PHP-Code:
    <?php
    function sternzeichen($day$month
    {
      
    $zodiac = array(
        
    0  => 'Steinbock',
        
    1  => 'Steinbock'
        
    2  => 'Wassermann'
        
    3  => 'Fische'
        
    4  => 'Widder',
        
    5  => 'Stier',
        
    6  => 'Zwilling',
        
    7  => 'Krebs',
        
    8  => 'L&ouml;we',
        
    9  => 'Jungfrau',
        
    10 => 'Waage',
        
    11 => 'Skorpion',
        
    12 => 'Sch&uuml;tze'
        
    );
     
        
    $dates = array(
          
    0  => array(mktime(0,0,0,12,22), mktime(0,0,0,12,31)),
          
    1  => array(mktime(0,0,0,01,01), mktime(0,0,0,01,19)),
          
    2  => array(mktime(0,0,0,01,20), mktime(0,0,0,02,18)),
          
    3  => array(mktime(0,0,0,02,19), mktime(0,0,0,03,20)),
          
    4  => array(mktime(0,0,0,03,21), mktime(0,0,0,04,19)),
          
    5  => array(mktime(0,0,0,04,20), mktime(0,0,0,05,20)),
          
    6  => array(mktime(0,0,0,05,21), mktime(0,0,0,06,21)),
          
    7  => array(mktime(0,0,0,06,22), mktime(0,0,0,07,22)),
          
    8  => array(mktime(0,0,0,07,23), mktime(0,0,0,08,22)),
          
    9  => array(mktime(0,0,0,08,23), mktime(0,0,0,09,22)),
          
    10 => array(mktime(0,0,0,09,23), mktime(0,0,0,10,23)),
          
    11 => array(mktime(0,0,0,10,24), mktime(0,0,0,11,21)),
          
    12 => array(mktime(0,0,0,11,22), mktime(0,0,0,12,21))
          );
     
          foreach(
    $dates as $k => $v
          {
            if(
    mktime(000$month$day) >= $v[0] && mktime(000$month$day) <= $v[1]) 
            {
                return 
    $zodiac[$k];
             }
          }
     
          return 
    false;
       }
     
       echo 
    sternzeichen(3112); // Tag, Monat
    ?>

  • nikosch
    antwortet
    Stimmt, 0 muß ich so oder so benutzen. Also:
    PHP-Code:
      // nur ein Vergleich, nicht bis zu 12
      
    if ($iDay $aZod[$iMonth][0])
        {
        
    // nur für den Index 1
        
    $aZod[0] = $aZod[12];
        return (
    $aZod[$iMonth 1][1]);
        } 

    Einen Kommentar schreiben:


  • David
    antwortet
    Wofür brauchst Du da %12 ?

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Ich finde die Implementierung nicht gut.
    - Es werden redundaten Daten verwendet (Anfangsdatum eines TKZ und Enddatum des vorherigen bedingen einander).
    - Wenn auch für die paar Elemente zu vernachlässigen: Die Schleife durchläuft die Daten unnötigerweise - schließlich gibt es eine Art Regelmäßigkeit.
    - bei der Angabe von Tag und Monat ist der Weg über timestamps schlicht unnütz. Das sieht man sehr gut an den vielen Nullen im Ausdruck: mktime(0,0,0,2,19)

    Mein Gegenvorschlag nutzt den Monat als Array-Schlüssel:

    PHP-Code:
    function sternzeichen2 ($iDay$iMonth)    {

      
    // Prüft nicht auf Gültigkeit der Parameter

      //  Startmonat => (Startdatum , Bezeichner)
      
    $aZod = array (
                    
    1  => array (20 'Wassermann') ,
                    
    2  => array (19 'Fische'    ) ,
                    
    3  => array (21 'Widder'    ) ,
                    
    4  => array (20 'Stier'     ) ,
                    
    5  => array (21 'Zwilling'  ) ,
                    
    6  => array (22 'Krebs'     ) ,
                    
    7  => array (23 'Löwe'      ) ,
                    
    8  => array (23 'Jungfrau'  ) ,
                    
    9  => array (23 'Waage'     ) ,
                    
    10 => array (24 'Skorpion'  ) ,
                    
    11 => array (22 'Schütze'   ) ,
                    
    12 => array (22 'Steinbock' ) ,
                    );

      
    // nur ein Vergleich, nicht bis zu 12
      
    if ($iDay $aZod[$iMonth][0])
        {
        
    // nur für den Modulo
        
    $aZod[0] = $aZod[12];

        return (
    $aZod[($iMonth 1) % 12][1]);
        }

      return (
    $aZod[$iMonth][1]);
      } 
    Ich kapiere das bei Wiki nicht (Angaben wie Krebs: 20./21. Juni–22./23. Juli). Falls Tierkreiszeichen einer Schaltjahrregelung unterliegen, könnte man noch die Abweichung mit in den Datensatz packen und den Versatz auf die $iDay-Angabe draufrechnen.

    Einen Kommentar schreiben:


  • drieling
    antwortet
    Das ist viel zu Allgemein, starte lieber einen eigenen Thread und schildere dein Problem genauer.

    Einen Kommentar schreiben:


  • Sec
    antwortet
    Habe auch mal eine frage haben eine große chatplattform unser Programmierer ist leider gegangen nun versuchen wir selbr so gut s geht an php aber sind leider anfänger wie bkomme ich das sternzeichen in die profile eingebunden?kann mir jemand da helfen?

    Einen Kommentar schreiben:


  • Montellese
    antwortet
    Zitat von jak21 Beitrag anzeigen
    Richtig - habe ich auch nicht - aber man wird wohl noch fragen dürfen?!
    Natürlich darf man fragen, ich habe dir ja auch drei oder viermal geantwortet oder nicht?

    Zitat von jak21 Beitrag anzeigen
    Eine gute Antwort wäre gewesen, "schreib mal an diese Stelle das und das rein dann wird das rauskommen."
    Hier wirst du selten eine Antwort erhalten, die gerade die Lösung enthält, da wir eigentlich wollen, dass die Fragenstellenden auch noch selber ein bisschen etwas zur Lösung beitragen und nicht einfach eine komplette Lösung aufgetischt bekommen, weil sie so nichts lernen.

    Zitat von jak21 Beitrag anzeigen
    Übrigens der Tip mit der angegebenen URL hat mich zum Schmunseln gebracht. Ich habe mir den Newsscript und das Gästebuch angeschaut, eine lange Liste von Script gelesen wo am Ende immer stand: "Aber diesen Script kann man nicht empfehlen".
    Fängst du ein Buch immer erst bei Kapitel 39 oder 40 an, wenn du keine Ahnung hast, worum es in den vorherigen 38 Kapiteln geht? Normalerweise fängt man bei 1 an und arbeitet sich dann langsam zu den hinteren Kapiteln vor.

    Zitat von jak21 Beitrag anzeigen
    Danke für die Aufheiterung.
    Möchte an den Spruch erinnern: "Wenn man keine Ahnung hat, einfach mal die ....................."
    Da ich ja Ahnung von PHP habe, trifft das ja auf mich nicht zu. Ich habe nur so reagiert, weil ich 3 mal versucht habe auf einfachste Weise zu erklären, was du an dem ganzen Missverstanden hast. Nur hatten deine Antworten auf meine Erklärungen irgendwie nicht viel mit dem gemeinsam, was ich dir erklären wollte und da ich das hier freiwillig mache, kann ich mir auch mal erlauben nicht immer nur nette Dinge zu schreiben, wenn mir etwas nicht passt. Es war überhaupt nicht persönlich gemeint, aber es ist leider immernoch so, dass viele Leute, die überhaupt keine Ahnung von PHP haben, hierher kommen und gleich hoch hinaus wollen und dafür halt fixfertige Script brauchen, weil sie ja keine Ahnung haben, wie man selber welche schreibt. Das ist aber genau das Gegenteil davon, was in diesem Forum angeboten wird. Hier wird einem Hilfestellung in Form von Denkanstössen (und ab und an mal auf Fehler in Scripts hinweisen) gegeben, aber definitiv keine fertigen Scripts. Ich habe 3x versucht dir einen meiner Meinung nach sehr einfachen Denkanstoss zu geben.

    Aber wenn mein Hilfeversuch so wenig geschätzt wird....
    Irgendwie vergessen die Leute, die hier Fragen stellen, immer wieder, dass sie froh sein können, dass ihnen geholfen wird. Stattdessen wird es als selbstverständlich angesehen und sobald mal nicht gleich geantwortet wird oder die Antwort nicht 100% das ist, was man erwartet hat, wird gleich gemeckert.....

    Einen Kommentar schreiben:


  • jak21
    antwortet
    Richtig - habe ich auch nicht - aber man wird wohl noch fragen dürfen?!

    Eine gute Antwort wäre gewesen, "schreib mal an diese Stelle das und das rein dann wird das rauskommen."

    Übrigens der Tip mit der angegebenen URL hat mich zum Schmunseln gebracht. Ich habe mir den Newsscript und das Gästebuch angeschaut, eine lange Liste von Script gelesen wo am Ende immer stand: "Aber diesen Script kann man nicht empfehlen".

    Danke für die Aufheiterung.
    Möchte an den Spruch erinnern: "Wenn man keine Ahnung hat, einfach mal die ....................."

    Einen Kommentar schreiben:


  • Montellese
    antwortet
    ...NEIN!
    Das Script zeigt an jedem Datum das korrekte Sternzeichen an, sonst würde es ja auch keinen Sinn machen ein Script für Sternzeichen zu schreiben, wenn es sowieso nur Steinbock ausgibt.

    Es macht den Anschein, dass du überhaupt keine Ahnung von PHP bzw von Programmierung allgemein hast. Falls du dich damit beschäftigen willst, damit du eines Tages verstehen wirst, was ich dir versucht habe zu erklären, arbeite dieses Tutorial gaaaanz gründlich durch: #php/QuakeNet Tutorial - Einführung.

    Einen Kommentar schreiben:


  • jak21
    antwortet
    Sternzeichen

    Habe das jetzt so verstanden das das Script auch im August "Steinbock" schreibt und nicht Löwe.

    Danke für die Anwort.

    Das Thema kann man schliessen.

    Einen Kommentar schreiben:


  • Montellese
    antwortet
    Das Script gibt nicht aus, welches Sternzeichen momentan aktuell ist! Das Script gibt das Sternzeichen aus, das an dem Datum, das du der Funktion übergibst (im Beispiel der 01.01 bzw. 1.Januar), aktuell ist => Du musst den Aufruf der Funktion so anpassen, wie auch immer du es brauchst.

    Einen Kommentar schreiben:


  • jak21
    antwortet
    Sternzeichen

    Danke für die schnelle Antwort - aber heute ist doch erst der 19.11. und das ist kein Steinbock.

    Oder muss im Script was angepasst werden?

    Danke

    Einen Kommentar schreiben:


  • Montellese
    antwortet
    Wieso? Die Funktion wird im Script als Beispiel folgendermassen aufgerufen:
    PHP-Code:
    sternzeichen(1,1); // Tag, Monat 
    und die Ausgabe ist "Steinbock", was sehr wohl stimmt, da vom 22.Dezember - 20. Januar Steinbock angesagt ist. Wenn du die Funktion für ein anderes Datum verwenden willst, musst du die einfach die Parameter, mit denen du die Funktion aufrufst
    PHP-Code:
    sternzeichen(tag,monat); 
    anpassen.

    Das Script einfach 1:1 kopieren klappt natürlich schon, gibt aber kaum das zurück, was man will....

    Einen Kommentar schreiben:


  • jak21
    antwortet
    Wenn man den Script aufruft, meldet er sich mit einem falschen Sternzeichen.

    Bin php Neuling - aber das ist mir aufgefallen.

    Zu sehen unter http://www.m1d.de/test/sternzeichen.php

    Gibts da eine Verbesserung?

    Einen Kommentar schreiben:


  • Igäl
    antwortet
    Ich bin Fan von kompakten Scripts und als ich das gesehen habe, dachte ich mir: Das muss doch nicht sein. Zwei Arrays die so viel Platz brauchen

    Drum hab ich die Arrays kurz zu nem Hash zusammengefasst. Natürlich ist Ambiences Lösung völlig in Ordnung. Meine ist halt eine andere Herangehensweise.

    PHP-Code:
    <?php
    function sternzeichen($day$month)    {

        
    $zod = array(
            
    'Steinbock' => array(mktime(0,0,0,12,22), mktime(0,0,0,12,31)),
            
    'Steinbock' => array(mktime(0,0,0,01,01), mktime(0,0,0,01,19)),
            
    'Wassermann' => array(mktime(0,0,0,1,20), mktime(0,0,0,2,18)),
            
    'Fische' => array(mktime(0,0,0,2,19), mktime(0,0,0,3,20)),
            
    'Widder' => array(mktime(0,0,0,3,21), mktime(0,0,0,4,19)),
            
    'Stier' => array(mktime(0,0,0,4,20), mktime(0,0,0,5,20)),
            
    'Zwilling' => array(mktime(0,0,0,5,21), mktime(0,0,0,6,21)),
            
    'Krebs' => array(mktime(0,0,0,6,22), mktime(0,0,0,7,22)),
            
    'L&ouml;we' => array(mktime(0,0,0,7,23), mktime(0,0,0,8,22)),
            
    'Jungfrau' => array(mktime(0,0,0,8,23), mktime(0,0,0,9,22)),
            
    'Waage' => array(mktime(0,0,0,9,23), mktime(0,0,0,10,23)),
            
    'Skorpion' => array(mktime(0,0,0,10,24), mktime(0,0,0,11,21)),
            
    'Sch&uuml;tze' => array(mktime(0,0,0,11,22), mktime(0,0,0,12,21))
        );

        foreach(
    $zod AS $zodiac => $date_arr)    {
            if(
    mktime(0,0,0,$month,$day)>=$date_arr[0] && mktime(0,0,0,$month,$day)<=$date_arr[1])    {
                return 
    $zodiac;
            }
        }

        return 
    "F&uuml;r das eingegebene Datum wurde kein Sternzeichen gefunden";
    }

    echo 
    sternzeichen(1,1); // Tag, Monat
    ?>
    Gruss
    De Igäl

    Einen Kommentar schreiben:

Lädt...
X