php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.07.2011, 15:03  
Neuer Benutzer
 
Registriert seit: 04.07.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
switchit befindet sich auf einem aufstrebenden Ast
Standard Urlaubskalender - Problem mit Datenbankabfrage

Hallo Leute,

Ich bin gerade dabei für unsere Abteilung einen Urlaubskalender zu programmieren, soweit klappt das auch alles ganz gut. Am ende sollte das in etwa so aussehen:
http://wiki.gsi.de/cgi-bin/view/TWiki/HolidaylistPlugin

Eine einfache Liste mit Namen und den Daten.
Meine Tabelle steht schon, es werden auch schon die Datenbankeinträge verarbeitet, eben nur nicht richtig.

http://www.physi.uni-heidelberg.de/~...tion/index.php

Die MySQL Datenbank heisst "vacation" und hat 2 Tabellen , einmal "user" und "urlaub". In der Tabelle "user" stehen einfach nur die Namen der Leute aus der Gruppe drin, diese Namen werden dann automatisch in die Tabelle gebracht. Die Tabelle "urlaub" hat die Spalten id,name,von,bis,wo.
Aus diesen Daten soll nun die Tabelle erzeugt werden. Nun komme ich nicht mehr weiter, das Problem ist das in der Tabelle immer nur der letzte eingetragene Datensatz des Users angezeigt wird. Ich habe schon eine Menge ausprobiert, komme aber auf keinen grünen Zweig ... Vielleicht könnt ihr mir ja weiterhelfen

Hier ist noch der php code von der index.php:

PHP-Code:
    <?php
        
//INCLUDE DATABASE INFORMATION
        
include("dbconnect.php");
        
$date time();
        echo 
'<table border=1>';
        echo 
'<tr>';
        echo 
'<td>Name</td>';
        
//GENERIEREN DER 30 TAGE + TABELLE
        
for($i=0$i 31;$i++){
            
$newdate $date $i 24 60 60
            
//30 Tage + 24 Stunden + 60 Minuten * 60 Sekunden 
            
echo '<td>';
            echo 
date('d-m-Y'$newdate);    
            echo 
'</td>';
        }
        echo 
'</tr>';
        
//MYSQL ABFRAGE AUFLISTEN DER NAMEN
        
$ergebnis mysql_query("SELECT nachname FROM user");
        while(
$row mysql_fetch_object($ergebnis))
            {
              
$name $row->nachname;
                    echo 
'<tr><td>';
              echo 
$name;
              echo 
'</td>';
            
              for(
$i=0$i 31;$i++){
                
// NEUER TIMESTAMP GENERIEREN
                
$newdate $date $i 24 60 60;
                
$dateact =  date('Y-m-d'$newdate);
            
//MYSQL ABFRAGE DATUM VON BIS 
                
$vacatemysql_query("SELECT von, bis FROM urlaub WHERE name LIKE '$name'");
            while(
$query mysql_fetch_object($vacate)){
                
$von $query->von;
                
$bis $query->bis;
            }

                if (
$dateact==$von || $dateact==$bis){
                    echo 
"<td>X</td>";
                }
                else{
                    echo 
'<td> </td>';
                 }
                 
$von="";
                 
$bis="";            
                }
              echo 
'</tr>';

            }
        echo 
'</table>';
        echo 
'<br>';
    
    
?>

Geändert von switchit (07.07.2011 um 15:07 Uhr).
switchit ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 07.07.2011, 15:08  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Du verwendet einen Datums-Bereich (von / bis), hast aber eine Abfrage, die auf ein exaktes Datum abfragt:

Zitat:
PHP-Code:
if ($dateact==$von || $dateact==$bis
Du müsstest schon abfragen, ob der aktuelle Tag sich innerhalb des Bereiches befindet... nicht nr, ob es exakt Start oder Ende ist.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 07.07.2011, 15:19  
Neuer Benutzer
 
Registriert seit: 04.07.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
switchit befindet sich auf einem aufstrebenden Ast
Standard

Das stimmt, ich müsste ihm einen Bereich angeben, dann würden in diesem Bereich die Zellen mit einem "X" ausgefüllt werden. Aber darum geht es mir momentan gar nicht. Mein größtes Problem ist das er immer nur den letzten Datensatz anzeigt, selbst wenn mehrere existieren. Ich denke es liegt an der Schleife oder an der Abfrage...
switchit ist offline   Mit Zitat antworten
Alt 07.07.2011, 15:24  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
PHP-Code:
            while($query mysql_fetch_object($vacate)){
                
$von $query->von;
                
$bis $query->bis;
            } 
Da ist dein Knackpunkt... du liest alle Datensätze aus, speicherst aber nur den letzten (du überschreibst die Ergebnisse der vorherigen Datensätze solange, bis du beim letzten Wert angekommen bist, wo die Schleife dann verlassen wird).
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 07.07.2011, 15:27  
Neuer Benutzer
 
Registriert seit: 04.07.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
switchit befindet sich auf einem aufstrebenden Ast
Standard

Genau! Das macht sinn das er dann nur den letzten anzeigt, wie kann ich das verhindern? Müsste ich die IF Abfrage in die while Schleife einbauen?
switchit ist offline   Mit Zitat antworten
Alt 07.07.2011, 15:32  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Im Prinzip schon.

Allerdings solltest du den Code umstellen. Du hast eine for-Schleife, die 31 mal durchlaufen wird. Darin hast du jedesmal wieder die Abfrage auf die Datensätze des Users (30 mal zu häufig).

Besser: Lies die Daten des Benutzers, speicher sie in ein Array zwischen.
Dann durchlauf die Tagesschleife (31 mal) und durchsuch nur noch das Array mit den Benutzerdaten aus der Datenbank. Wesentlich performanter, als immer wieder eine neue Query rauszufeuern.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 07.07.2011, 15:39  
Neuer Benutzer
 
Registriert seit: 04.07.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
switchit befindet sich auf einem aufstrebenden Ast
Standard

Danke! Ich werde das Script dann mal ändern...
switchit ist offline   Mit Zitat antworten
Alt 07.07.2011, 16:06  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hilfe, ich hasse schlechtgeschriebene Urlaubstools. Ich musste mich gerade erst mit einem rumschlagen und ein neues schreiben. Bitte trenn zumindest Verarbeitung von Ausgabe!
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 07.07.2011, 16:24  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
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

Immer wieder erstaunlich, dass es für so viele Allerweltsanwendungen immer noch keine etablierten Lösungen auf dem Markt gibt.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 08.07.2011, 12:51  
Neuer Benutzer
 
Registriert seit: 04.07.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
switchit befindet sich auf einem aufstrebenden Ast
Standard

Da ich ein PHP Anfänger bin, hatte ich auch erst nach einer fertigen Lösung gesucht, habe aber leider nix passendes gefunden.

Ich habe meinen Code nun mal geändert und habe die SQL abfragen außerhalb der Schleifen platziert.

Mein Problem ist immer noch das ich nicht weiß wie ich die Abfrage pro Tabellenfeld stellen muss. Ich denke der Teil mit der "if" Anweisung stimmt nicht... Kann mir da jmd weiterhelfen?

PHP-Code:
        //MYSQL ABFRAGE, NAME, VON, BIS
        
$vacate mysql_query("SELECT name, von, bis FROM urlaub");
        
$user mysql_query("SELECT nachname FROM user");
        while(
$userrow mysql_fetch_array($user)){
        echo 
"<tr>";
        echo 
"<td>";
        echo 
$userrow['nachname'];
        echo 
"</td>";    
        for(
$i=0$i 31;$i++){
            
// neuer timestamp generieren
            
$newdate $date $i 24 60 60;
            
$dateact =  date('Y-m-d'$newdate);
            
// array auslesen
            
while($daterow mysql_fetch_array($vacate)){                
                
//test Ausgabe, überprüfung der daten                
                
echo $daterow['name'];                
                echo 
$daterow['von'];
                echo 
"=";
                echo 
$daterow['bis'];
                echo 
"<br>";
                
//überprüfen der daten
                
if($daterow['von']<=$daterow['bis'] && $userrow['nachname']==$daterow['name']){
                    echo 
"<td>X</td>";
                }
            }
            echo 
'<td>�*</td>';
           }
        echo 
"</tr>";
        } 
switchit ist offline   Mit Zitat antworten
Antwort


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
Problem mit swfobjects R4v3r JavaScript, Ajax und mehr 8 21.09.2008 14:17
[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
Datenbankabfrage mit variablen select-Auswahlfeldern tinchen PHP Tipps 2006 1 11.04.2006 10:40
Problem bei Datenbankabfrage PHP Tipps 2006 3 19.03.2006 18:48
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
problem bei distinct datenbankabfrage... Promaetheus Datenbanken 2 25.01.2006 17:28
[Erledigt] suche Lösung für logisches Problem bei Datenbankabfrage Datenbanken 10 25.01.2006 13:28
[Erledigt] Problem mit komplexer Datenbankabfrage Datenbanken 3 23.12.2005 22:02
[Erledigt] Problem mit Datenbankabfrage Datenbanken 3 09.12.2005 20:03
Problem bei Datenbankabfrage PHP Tipps 2005-2 10 17.10.2005 14:55
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
Problem mit einer Datenbankabfrage Borlox PHP Tipps 2004 3 19.09.2004 20:23
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php urlaubskalender, php urlaubskalender tabelle, urlaubskalender php, php sql urlaub abfragen, php kalender mit datenbankabfrage, urlaubskalender, urlaubskalender uni heidelberg, mysql datenbank urlaub, holidaylistplugin, urlaubskalender cgi, php urlaub kalender, mysql datum von bis

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:48 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