php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.12.2007, 07:47  
Benutzer
 
Registriert seit: 28.07.2007
Beiträge: 38
pPanther
Standard Kalender Problem

Hallo alle zusammen!

Ich bin gerade dabei meinen ersten Kalender zu programmieren.
Bis jetzt funktioniert ja alles wunderbar, bis auf eine Kleinigkeit.
Als Spielerei habe ich eine Mouseover-Funktion.
So werden z.B. Geburtstage färbig bzw. fett im Kalender markiert, fährt man mit der Maus drüber, so kommt eine kleine Box, in der dann der Name des Geburtstagskindes und dessen Alter drinnen steht.
Mein Problem ist, dass er zwar die Tage richtig markiert, wenn jemand GB hat, allerdings steht in der Mouseover-Box immer nur der Name des ersten GB-Kindes vom Monat.


Hier mal der Code:
PHP-Code:
/**
    * Ermittelt die Anzahl der Tage des gewaehlten Monats, und gibt diese formatiert aus
    * Dabei werden Geburtstage beruecksichtigt und im Kalender gekennzeichnet
    */
    
private function Tage(){

      
//ermitteln der Tage im Monat
    
$anzahl date("t"mktime(000$this->monat1$this->jahr));

    
//Starttag = 1. des Monats
    
for($i 1$i <= $anzahl$i++){

      
$wochentag date("w"mktime(000$this->monat$i$this->jahr));

          
$alleTage[$i] = array($i => $wochentag);

        }

        
//Wochentag des 1. des Monats feststellen
        
$starttag date("w"mktime(000$this->monat1$this->jahr));

        
//Aktuelles Datum feststellen
        
$aktuellesDatum date("j. n. Y");

        
//Ausgabe
        
$html '';
        
$html .= '<table border="0" width="100%" class="kalender" align="center">
                                <tr>
                                  <colgroup align="center" span="7">
                                  <td>Mo</td>
                                    <td>Di</td>
                                    <td>Mi</td>
                                    <td>Do</td>
                                    <td>Fr</td>
                                    <td>Sa</td>
                                    <td>So</td>
                                </tr>
                                <tr>'
;

        
//Wenn 1. kein Montag ist
        
if($starttag != 1){

          for(
$n=1$n $starttag$n++){

              
$html .= '<td></td>';

            }

        }

        
//Alle Tage ausgeben
        
foreach($alleTage as $key => $tag){

            foreach(
$tag as $nr => $wochentag){

              
//Feststellen, wer an dem Tag Gebursttag hat
              
$gebNamen $this->ermittleGeburstage($nr);

              
//aktuellen Tag fett/faerbig markieren
              
if(date("j. n. Y"mktime(000$this->monat$nr$this->jahr)) == $aktuellesDatum)
                
$html .= '<td><font color="' FARBTHEMA '">[b]' $nr '[/b]</font></td>';

          else{
                if(
$gebNamen){

                  
$query $this->queryHolen() . '&amp;aktion=details';
                  
$nr $this->baueLink($query$nr);

                        
$html .= '<td>
                                            <div style="position:relative; font-size:100%;" onmouseover="zeige_tooltip(\'kalender_events\');"
                                onmouseout="verstecke_tooltip(\'kalender_events\');">[b]' 
$nr '[/b]
                              <div id="kalender_events" style="display:none;">Geburtstage: ' 
$gebNamen '
                              </div>
                                </div></td>'
;

                  }
                    else{

                      
$html .= '<td>' $nr '</td>';

                    }

                }

          
//Nach 7 Tagen neue Zeile beginnen
                
if($wochentag %== 0)
              
$html .= '</tr><tr>';

            } 
//Ende foreach2

        
}  //Ende foreach

        
$html .= '</tr>
                            </table>'
;

        return 
$html;

    } 
Ich habe mir natürlich schon die Variablen ausgeben lassen. Trotz Schleife übergibt er immer nur den ersten Tag, dadurch stehen bei allen Tagen in der Mouse-Box auch nur die Namen des ersten Tages, wo jemand GB hat.

Die Methode ermittleGeburtstag($tag) funktioniert einwandfrei - habs getestet. Sie liefert mir einwandfrei alle Namen vom gewünschten Tag/Monat und Jahr.

Hat jemand eine Idee warum das mit meiner Maus-Box nicht funktioniert?
__________________
Ich bin gut schon gut, aber böse bin ich noch besser!
pPanther ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.12.2007, 10:42  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo pPanther,

ich bezweifle etwas, dass dir die Methode ermittleGeburstage() wirklich immer die richtigen Ergebnisse liefert, denn dort wird nur ein Tag, nicht aber ein Monat übergeben.

Das Thema Mouse-Box ist für mich eher ein JavaScript-Problem. Dieses sollte aber besser unter der Sektion "(X)HTML, CSS & JavaScript" diskutiert werden. Ich kann dir da aber leider nicht helfen, da der Code der Funktion nicht einsehbar ist.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 09.12.2007, 12:52  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Also deine Variablen- und Funktions-Benennung ist suboptimal:
$nr, queryHolen(), Tage()?

Bezeichnest du den Monatstag auch im wahren Leben als "Nummer"? Kennst du die Übersetzung für query nicht? Ist es wirklich naheliegend, dass eine Methode Tage() einen Monat tabellarisch ausgibt?

Warum schließt UND öffnest du am Ende der Schleife eine Table-Row (<tr>)? Warum schließt du NACH der foreach-Schleife eine Table-Row? Bau das doch wenigstens mal logisch auf .. Und bevor dein HTML-Code nicht valide ist, brauchen wir eigentlich auch nicht nach HTML oder JavaScript-Fehlern stochern!

Und rück deinen Code ein, oder sieht der bei dir im Editor auch so gräßlich aus?


Zitat:
Ich habe mir natürlich schon die Variablen ausgeben lassen ... Die Methode ermittleGeburtstag($tag) funktioniert einwandfrei
Du merkst deinen Widerspruch? Du behauptest also alle Variablen und Methoden sind in Ordnung, funktionieren tut es aber trotzdem nicht ..

Was steht denn in $gebNamen, wenn die Darstellung nicht funktioniert?
Zergling-new ist offline  
Alt 09.12.2007, 18:28  
Benutzer
 
Registriert seit: 28.07.2007
Beiträge: 38
pPanther
Standard

Also zuerst mal danke für die Antworten.

Also der gezeigte Code ist der meiner Meinung nach der wichtigste Abschnitt.
Natürlich rücke ich Code ein, aber die Formatierung ging beim Kopieren verloren, und ich bearbeite sicher nicht Zeile für Zeile nach.

Meine Methode ermittleGeburtstag($tag) arbeitet korrekt, da das Jahr und das Monat aus der Session bzw. aus dem GET Array kommen. Diese Abfragen passieren schon lange vorher.
Bevor ich die Namen, die ich von ermitttleGeburtstag per return bekomme, meiner Toolbox übergebe, passt alles.
Er gibt mir das Datum des Tages richtig aus und die Namen dazu.
2 Zeilen weiter, in der Toolbox läufts total falsch.

Zum Rest:
Mag schon sein, dass er chaotisch ist. Will ich auch nicht bestreiten. Dafür lernt man ja. Und ich bin froh über jeden Anstoss den ich bekomme.
Und das mit dem query ist mir fast peinlich. Hab da wohl was durcheinandergebracht.
__________________
Ich bin gut schon gut, aber böse bin ich noch besser!
pPanther ist offline  
Alt 09.12.2007, 18:39  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Tja, wir könnten jetzt alle mal raten, wie der von ermittleGeburstage($nr); zurückgegebene String (oder wie auch immer geartete Datentyp) aussieht. Die sinnvolle Alternative: Du postest hier einen var_dump dieser Variable und/oder eine relevanten Teil des html Quelltextes, aus dem die tatsächliche Ausgabe ersichtlich wird.
nikosch ist offline  
Alt 09.12.2007, 18:57  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Schreibe ich undeutlich?

Zitat:
Und bevor dein HTML-Code nicht valide ist, brauchen wir eigentlich auch nicht nach HTML oder JavaScript-Fehlern stochern!
Ich sag das doch nicht weil ich ein Validitätsnerd bin, sondern weil es dir verdammt noch mal hilft Fehler zu finden!
Zergling-new ist offline  
Alt 10.12.2007, 17:04  
Benutzer
 
Registriert seit: 28.07.2007
Beiträge: 38
pPanther
Standard

Nein Zergling, du schreibst nicht undeutlich. Ich habe ganz genau verstanden was du meinst. Und deswegen melde ich mich erst wieder wenn ich meinen Mist ausgebessert habe und nach nochmaligem Überlegen den Fehler nicht selbst finde.

Ich meinte eigentlich nur danke für die Kritik, denn ich kann damit umgehen - auch mit negativer.
__________________
Ich bin gut schon gut, aber böse bin ich noch besser!
pPanther ist offline  
Alt 11.12.2007, 08:50  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Verwende doch einfach das title-Attribut:
Code:
<td title='$gebNamen'>...
, dann kannst du dir die onmousover()/onmouseout()-Funktionen sparen
__________________
Gruss
L
lazydog ist offline  
Alt 12.12.2007, 18:14  
Benutzer
 
Registriert seit: 28.07.2007
Beiträge: 38
pPanther
Standard

So ich hab das inzwischen in Ordnung gebracht und ich weiß auch warum es nicht funtionieren kann.
Ein id Element in XHTML darf nur einmal vorhanden sein. Da ich aber mit der Schleife arbeite, gibts das id Element mit gleichem Namen mehrmals. Dadurch keine Funktion.
Über einen anderen Lösungsansatz habe ich noch nicht nachgedacht, da ich (leider)momentan keine Zeit für`s programmieren habe.
Aber ich werde mir das mit dem Title Attribut mal näher anschauen und sicher eine andere Lösung finden.
__________________
Ich bin gut schon gut, aber böse bin ich noch besser!
pPanther ist offline  
Alt 12.12.2007, 18:24  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Zitat von pPanther
Ein id Element in XHTML darf nur einmal vorhanden sein. Da ich aber mit der Schleife arbeite, gibts das id Element mit gleichem Namen mehrmals. Dadurch keine Funktion.
Das ist natürlich absolut richtig. Wenn Du magst schau Dir mal mein Tutorial an:
http://www.phpfriend.de/forum/ftopic62110.html
Dort beschreibe ich die Umsetzung dynamischer divs anhand eines class Attributes. Quasi ein automatisches onmouseover...

Im übrigen hast Du Dein Problem falsch geschildert. Die richtige Beschreibung wäre gewesen: im Html werden die Geburtstags-divs eingefügt, aber die Javascript-Funktion öffnet nur das erste per onMouseover Event.
nikosch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
Tagesansicht bei Kalender macht Probleme Borlox PHP Tipps 2006 20 30.06.2006 13:05
Problem mit height Party-Pix HTML, Usability und Barrierefreiheit 3 29.03.2006 14:17
Template problem webmaster_andre HTML, Usability und Barrierefreiheit 4 25.02.2006 22:50
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
Kalender in PHP PHP Tipps 2005 3 14.01.2005 16:27
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
[Erledigt] PHP Upload (Master Value/Local Value Problem) PHP-Fortgeschrittene 5 23.11.2004 07:21
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:12 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.