Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Kalender mit Timestamps aus einer DB füttern

Diskussion: Kalender mit Timestamps aus einer DB füttern im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hab i-wie ein Problem, die Termine die in der DB stehen, als Termine im Kalender zu markieren. Gebe ich ...

Antwort
Alt 07.05.08, 18:47   #1 (permalink)
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Kalender mit Timestamps aus einer DB füttern

Anzeige

Hab i-wie ein Problem, die Termine die in der DB stehen, als Termine im Kalender zu markieren.
Gebe ich dem Kalender manuell einen Stamp, geht das alles soweit.
Ich denke ich hab da einfach nen riesen Denkfehler...

Hier die Kalender:

PHP-Code:
<?php
$date            
getdate();
$currentmonth    $date[mon];
$year            $date[year];
?>
<table width="100%" border="0" class="calendar">
    <tr>
        <th colspan="7"><?php echo $months[$currentmonth]. " " $year?></th>
    </tr>
    <tr>
        <th>Mo</th>
        <th>Di</th>
        <th>Mi</th>
        <th>Do</th>
        <th>Fr</th>
        <th>Sa</th>
        <th>So</th>
    </tr>
    <tr>
        <?php
            $datum            
Convert2Date(time());
            
$result         GetMySQLData("SELECT * FROM Appointment WHERE Oeffentlich = true"); 
            
            
            
$today            $datum[0];
            
$firstofmonth     mktime(000date("m"), 1date("Y"));
            
$offset         = (date('w'$firstofmonth) -1) % 7;
            
$dayspermonth     date("t");
            
$appointment    Convert2Date("1210261832");
            
            for(
$i 0$i $offset$i++) 
                echo 
'<td></td>';
            
            for(
$i=1$i <= $dayspermonth$i++)
            {
                if(
mysql_num_rows($result)) { // gucken ob was im Query drinsteckt
                    
while($row mysql_fetch_assoc($result)) {
                        
$Appointment Convert2Date($row['Datum']);
                        if(
$i == $Appointment[0]){
                            if(
$i == $offset){
                                echo 
'<td class="appointmentonsunday">'.$i.'</td>';}
                            else{
                                echo 
'<td class="appointment">&nbsp;</td>';
                            }
                        }
                    }
                }
                if(
$i == $today){
                    if(
$i == $offset){
                        echo 
'<td class="todayissunday">'.$i.'</td>';
                    }
                    else{
                        echo 
'<td class="today">'.$i.'</td>';
                    }
                }
                elseif(
$i == $offset){
                    echo 
'<td class="sunday">'.$i.'</td>';
                }
                else{
                    echo 
'<td>'.$i.'</td>';
                }
                
                if( ((
$i $offset) % == 0) && ($i <= $dayspermonth)){
                    echo 
'</tr><tr>';
                } 
            }
        
?>
</table>
Hier die Funktion Convert2Date:
PHP-Code:
function Convert2Date($timestamp)
{
        
$Date = array(date("d",$timestamp),date("m",$timestamp),date("Y",$timestamp));
        
        return 
$Date;

Un die Funktion GetMySQLData:
PHP-Code:
function GetMySQLData($SQLStatement)
{
        if(
$localhost == "true"){
            @
mysql_connect(localhostroot" ") OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());}
        else{
            @
mysql_connect(localhostusr entferntpw entfernt) OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());}
        
mysql_select_db(db entfernt) OR die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
        
$result mysql_query($SQLStatement) OR die(mysql_error());
        return 
$result;

Vllt findet einer von euch den Fehler.
Vllt gibts auch etwas was ich verkürzen kann oder besser machen kann.

Wäre echt nett :)
reaLInsanity ist offline   Mit Zitat antworten
Alt 07.05.08, 21:51   #2 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Arrow

Dein Fehler liegt darin, dass du zwar am Anfang dein Query ausführst und dort sicherlich auch ein paar Ergebnisse bekommst. Die Auswertung der Ergebnisse ist aber Murks. Du gehst jeden Tag des Monats in einer Schleife durch und prüfst darin dann, ob es Ergebnisse bei deinem Query gab. Dann gehst du alle Ergebnisse durch... nur leider wird das Resultset nie zurückgesetzt. Das heißt, nachdem du für den ersten Tag alle Ergebnisse durchgegangen bist (und ggf. kein passendes gefunden hast), wird bei den übrigen Tagen die Zeile 38 nichts mehr bewirken.

Ich würde also die Termine vor dem Durchlauf der einzelnen Tage in einem Array o.ä. zwischenspeichern.
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 07.05.08, 21:58   #3 (permalink)
Themenstarter
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard

also wenn ich das richtig verstanden habe:

- Timestamps & ID aus der DB lesen, in in Array packen
- Daten umwandeln mittels Convert2Date
- In Kalender eintragen.


Also anfür sich hab ich das verstanden, aber ei könnte ich das umsetzen?
Ich steh grad etwas auf dem Schlauch und seh den Wald vor lauter Bäume nicht mehr ?(
reaLInsanity ist offline   Mit Zitat antworten
Alt 07.05.08, 22:12   #4 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Standard

Das hast du schon richtig verstanden, nur im Code haut deine Reihenfolge eben nicht hin. Du wertest das Ergebnis deiner SQL-Abfrage zum falschen Zeitpunkt aus. mysql_fetch_assoc() holt sich immer einen Datensatz und springt dann zum nächsten in deinem Resultset $result. Das Problem ist nur, dass nachdem du für den Monatsersten alle Ergebnisse durchgegangen bist, du nicht mehr zum ersten Datensatz zurückspringen kannst. Am 2. des Monats beginnst du wieder mit mysql_fetch_assoc() einen Datensatz abzurufen, aber es gibt keinen mehr...

Du musst also das Auslesen deiner Ergebnisse vor der Schleife über die Tage des Monats machen, z.B. so:

PHP-Code:

$termine 
= array();

while ( 
$row mysql_fetch_assoc $result ) )
{
    
$termine[] = Convert2Date $row 'Datum' ] );
}

for ( 
$i 1$i $dayspermonth$i++ )
{
    foreach ( 
$termine as $termin )
    {
        if ( 
$termin ] == $i )
        {
            ...
        }
    }

__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 07.05.08, 22:37   #5 (permalink)
Themenstarter
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard

Hab das mal eingebaut, funkioniert auch super. Jedoch werden die Termine, doppelt eingetragen.

PHP-Code:
<?php
            $datum            
Convert2Date(time());
            
$result         GetMySQLData("SELECT * FROM Appointment WHERE Oeffentlich = true"); 
            
            
$termine = array();
            
$today            $datum[0];
            
$firstofmonth     mktime(000date("m"), 1date("Y"));
            
$offset         = (date('w'$firstofmonth) -1) % 7;
            
$dayspermonth     date("t");
            
$appointment    Convert2Date("1210261832");
            
            for(
$i 0$i $offset$i++) 
                echo 
'<td></td>';
            while ( 
$row mysql_fetch_assoc $result ) )
            {
                
$termine[] = Convert2Date $row 'Datum' ] );
            }
            
            for(
$i=1$i <= $dayspermonth$i++)
            {
                
                foreach ( 
$termine as $termin )
                {
                    if ( 
$termin ] == $i )
                    {
                        if(
$i == $offset){
                            echo 
'<td class="appointmentonsunday">'.$i.'</td>';
                        }
                        else{
                            echo 
'<td class="appointment">'.$i.'</td>';
                        }
                    }
                }
                    
                if(
$i == $today){
                    if(
$i == $offset){
                        echo 
'<td class="todayissunday">'.$i.'</td>';
                    }
                    else{
                        echo 
'<td class="today">'.$i.'</td>';
                    }
                }
                elseif(
$i == $offset){
                    echo 
'<td class="sunday">'.$i.'</td>';
                }
                else{
                    echo 
'<td>'.$i.'</td>';
                }
                
                
                if( ((
$i $offset) % == 0) && ($i <= $dayspermonth)){
                    echo 
'</tr><tr>';
                } 
            }
        
?>
BTW: Gibt es nicht ne möglichkeit PHP zu debuggen, wie das mit normal Windows-Forms geht?! Das würde viel Mühe und Fragerei sparen
Angehängte Grafiken
Dateityp: jpg Unbenannt.jpg (7,2 KB, 117x aufgerufen)
reaLInsanity ist offline   Mit Zitat antworten
Alt 08.05.08, 11:52   #6 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Arrow

Diesmal ist das Problem in Zeile 36. Nachdem du (eventuell) in deiner Schleife schon einen Termin ausgegeben hast, wird hier eine weitere Tabellenzelle für diesen Tag angelegt. Du müsstest dieses IF also noch erweitern und in jedem Schleifendurchlauf eine weitere Variable definieren, in der ein Flag steht, ob ein Termin eingefügt wurde oder nicht.
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 09.05.08, 14:17   #7 (permalink)
Themenstarter
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard

Also ich hab jetzt mal eine Variable reingeprügelt, jedoch scheint es nicht zu fuktionieren wie ich will ôo

PHP-Code:
for($i 0$i $offset$i++) 
                echo 
'<td></td>';
            
            for(
$i=1$i <= $dayspermonth$i++)
            {
$appointmentset "";
                if(
mysql_num_rows($result)) { // gucken ob was im Query drinsteckt
                    
while($row mysql_fetch_assoc($result)) {
                        
$Appointment Convert2Date($row['Datum']);
                        if(
$i == $Appointment[0]){
                            if(
$i == $offset){
                                echo 
'<td class="appointmentonsunday">'.$i.'</td>';
$appointmentset=true;}
                            else{
                                echo 
'<td class="appointment">&nbsp;</td>';
$appointmentset=true;
                            }
                        }
                    }
                }
                if(
$i == $today AND $appointmentset != true){
                    if(
$i == $offset){
                        echo 
'<td class="todayissunday">'.$i.'</td>';
                    }
                    else{
                        echo 
'<td class="today">'.$i.'</td>';
                    }
                }
                elseif(
$i == $offset){
                    echo 
'<td class="sunday">'.$i.'</td>';
                }
                else{
                    echo 
'<td>'.$i.'</td>';
                }
                
                if( ((
$i $offset) % == 0) && ($i <= $dayspermonth)){
                    echo 
'</tr><tr>';
                } 
            } 
EDIT:
hat geklappt:
PHP-Code:
<?php
            $datum            
Convert2Date(time());
            
$result         GetMySQLData("SELECT * FROM appointment WHERE Oeffentlich = 1"); 
            
            
$termine         = array();
            
$today            $datum[0];
            
$firstofmonth     mktime(000date("m"), 1date("Y"));
            
$offset         = (date('w'$firstofmonth) -1) % 7;
            
$dayspermonth     date("t");
            
$appointment    Convert2Date("1210261832");
            
            for(
$i 0$i $offset$i++) 
                echo 
'<td></td>';
            while ( 
$row mysql_fetch_assoc $result ) )
            {
                
$termine[] = Convert2Date $row 'Datum' ] );
            }
            
            for(
$i=1$i <= $dayspermonth$i++)
            {
            
$appointmentset "";
                foreach (
$termine as $termin)
                {
                    if (
$i == $termin[0])
                    {
                        if(
$i == $offset)
                        {
                            echo 
'<td class="appointmentonsunday">'.$i.'</td>';
                            
$appointmentset true;
                        }
                        else
                        {
                            echo 
'<td class="appointment">&nbsp;</td>';
                            
$appointmentset true;
                        }
                    }
                }
                if(
$i == $today AND $appointmentset != 1)
                {
                    if(
$i == $offset)
                    {
                        echo 
'<td class="todayissunday">'.$i.'</td>';
                    }
                    else
                    {
                        echo 
'<td class="today">'.$i.'</td>';
                    }
                }
                elseif(
$i == $offset AND $appointmentset != 1)
                {
                    echo 
'<td class="sunday">'.$i.'</td>';
                }
                elseif(
$appointmentset != 1)
                {
                    echo 
'<td>'.$i.'</td>';
                }
                
                if( ((
$i $offset) % == 0) && ($i <= $dayspermonth))
                {
                    echo 
'</tr><tr>';
                }
            }
        
?>
Hatte vergessen in den anderen If's auch zu prüfen... ?(
reaLInsanity ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Kalender mit Timestamps aus einer DB füttern
Themen-Optionen
Ansicht

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

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Hintergrund "Kalender" .:L Applikationen 5 30.08.07 18:11
Kalender synchronisieren Revenant Internet Allgemein 0 03.06.07 13:16
Outlook (Kalender) frankconvex Windows 3 08.12.06 10:54
Kalender Chaosempire Downloads 5 05.08.05 19:56
[HABO] Kalender XeonX Die Problemzone 2 11.01.04 21:00


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61