Stundenplan oder Terminplaner

Luzie

Erfahrenes Mitglied
Hallo

ich habe mal in Access und asp einen Terminplaner erstellt.

Das ging über mehrere Recordsets und hier wurde an bestimmten Punkten in der Whileschleife ein Filter gesetzt. Das ist im Recordset möglich. Der Filter lag außerhalb der SQL, und das machte das ganze leicht möglich.

Das Ergebnis sieht dann aus wie ein Datenblatt oder ein Stundenplan, wenn ich das so beschreiben darf.

Kennt jemand ein Tut oder eine Beschreibung, wie ich die Ausgabe setzen für php setzen kann?

Der Terminplaner ist nur ein Beispiel, weil ich das nun mal hatte. Mir kommt es im Prinzip darauf an, dass waagerecht Daten ausgeben wird z.B. mit Firmenname oder wie im Beispiel die Stunden, senkrecht Daten mit Produkten oder wie im Beispiel das Datum über mehrere Tage und in der 3. Tabelle sind die beiden ersteren Tabellen miteinander über Daten verbunden. Und dies wird dann hinnerhalb der Tabelle angezeigt.

Ich hänge mal einen Screenshot an, ich brauche nur einen kurzen Denkanstoß.
 

Anhänge

  • tplaner.jpg
    tplaner.jpg
    39,8 KB · Aufrufe: 309
Verstehe jetzt nicht ganz was du genau möchtest? PHP Funktionen dafür oder einen grundsätzlichen Anstoss

Hab aber auch noch keinen Kaffee intus.

Sind zwei gekapselte Schleifen die du brauchst zur Darstellung. For für Tage, For für Stunden .. oder?!
 
Hi

ich hab mir schon gedacht, dass Unklarheiten rüberkommen.

Ich habe nochmals eine andere Ansicht erstellt, möglicherweise wird es hier klarer und einfacher zu verstehen.

http://www.pts.eu/planung/fa.asp

Ich habe 3 Tabellen (tblFirma, tblProdukt und firma2produkt)

Folgende Daten sind eingegeben und verbunden worden.

tblfirma
id fname
------------------
1 Daimler Benz
2 Hoch und Tief
3 Schulze Steinbruch
4 PTS Weiterbildung

tblprodukt
id pname
--------------------
1 Seminar
2 Autos
3 Baumhaus
4 Hochhaus
5 Kies

firma2produkt
fid pid
--------------------
1 2
2 3
2 4
3 5
4 1

Die Ausgabe ist dann in einer Tabelle dargestellt wo Bezüge, wie Koordinaten in einem Punkt dargestellt und festgehalten werden. Ein Stundenplan könnte ähnlich aufgebaut werden.

In ASP lege ich hierfür 3 Recordsets an, also 3x mysql_query, welche dann innerhalb der verschachtelten Schleifen in Bezug gehen. Im Recordset ist es noch möglich, außerhalb einer SQL-Anweisung noch Filter bzw. zusätzliche Bedingungen zu setzen und dies macht es möglich, die Zellen innerhalb der Schleife zu kennzeichnen (gelb).

Ich versuche schon lange, eine ähnliche Anwendung in php zu erstellen, aber ohne Erfolg.

Deshalb mal mein Posting hier, wo die vielen Profis sind :)

Hier mal der ASP-Code

Code:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connection/connections.asp" -->

<%
dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open getMemory
	
function GetDiscRS(sql)
	dim RS
	Set RS = Server.CreateObject("ADODB.Recordset")
	rs.CursorLocation = 3'adUseClient
	rs.CursorType = 3'adOpenStatic
	rs.LockType = 3'adLockOptimistic
	RS.Open sql, objconn
	RS.ActiveConnection = Nothing
	Set getDiscRS = RS
end function

'Ok... Erstmal alle Daten holen:
Set rsProd = getDiscRS("select id, pname from tblProdukt order by id")
Set rsComp = getDiscRS("select id, fname from tblFirma order by id")
Set rsP2C = getDiscRS("select pid, fid from Firma2Produkt" & _
		" order by pID, fID")

Response.write "<table border=1>"
Response.write "<tr><th>Firma/Produkt</th>"
' Produktüberschriften
Do while not rsProd.eof
	Response.write "<th>" & rsProd("pname") & "</th>"
	rsProd.MoveNext
Loop
Response.write "</tr>"
Do while not rsComp.eof
	response.write "<tr><th>" & rsComp("fname") & "</th>"
	rsProd.MoveFirst
	Do while not rsProd.eof
		' Verbindung suchen
		rsP2C.Filter = "pID=" & rsProd("id") & _
				" and fID=" & rsComp("id")
		if rsP2C.eof then 'nicht gefunden
			response.write "<td>&nbsp;</td>"
		Else
			response.write "<td style=""background-color:yellow"">x</td>"
		End if
		rsProd.MoveNext
	Loop
	response.write "</tr>"
	rsComp.MoveNext
loop
Response.write "</table>"


objConn.close
set objConn=nothing
%>
 
Zuletzt bearbeitet:
Hi!

Hier mal mein PHP-Script zu deinem ASP:

PHP:
<?php

// Datenbankanbindung
$host = "localhost";
$user = "Admin";
$pwd = "admin06";
$db = "firmendaten";

$conn = @mysql_connect($host, $user, $pwd);
if ($conn == false) {
	echo "Keine DB-Verbinung möglich";
         exit();
}

mysql_select_db($db);

// Tabelle erstellen
$html =  "<table border=1>\n";
$html .= "<tr><th>Firma/Produkt</th>\n";

// Produktüberschriften
$result1 = mysql_query("select id, pname from tblProdukt order by id");
while($rows_Produkte = mysql_fetch_object($result1)) {
   $html .=  "<th>".$rows_Produkte->pname."</th>\n";
 }
$html .= "</tr>\n\n";

// Datensätze
$result2 = mysql_query("select id, fname from tblFirma order by id");
while($rows_Firmen = mysql_fetch_object($result2)) {
	$html .=  "<tr>\n<th>".$rows_Firmen->fname."</th>\n";

        	$result3 = mysql_query("select pid, fid from Firma2Produkt order by pID, fID");
         while($rows_FirmenProdukt = mysql_fetch_object($result3)) {
           $result4 = mysql_query("select id, pname from tblProdukt order by id");
           while($rows_Produkte = mysql_fetch_object($result4)) {

                    if($rows_FirmenProdukt->fid == $rows_Firmen->id && $rows_FirmenProdukt->pid == $rows_Produkte->id) {
                         $html .=  "<td style=\"background-color:yellow\">x</td>\n";
                    }
                    else {
                    	$html .=  "<td>&nbsp;</td>\n";

                     }
                }
         }
         mysql_free_result($result3);
	mysql_free_result($result4);

	$html .=  "</tr>\n";
}
$html .=  "</table>\n";

mysql_close($conn);

// Ausgabe
echo $html;

?>

Ich benutze zur Datenbankanbindung immer eine Klasse, daher ist mir die
Syntax nicht mehr so geläufig, sollte aber gehen.
Habe das Script noch nicht testen können.
Probier es mal aus, ob es funktioniert.
Bin gespannt!

EDIT:
Ich arbeite normalerweise mit einer Klasse für die DB-Anbindung, sodass ich jetzt etwas Schwierigkeiten
bei der manuellen Gestaltung habe.
Das Script ist jetzt angepasst, aber er gibt leider noch zu viele Spalten aus.
Warscheinlich durch die beiden geschachtelten While-Abfragen.

Vielleicht kann einer der anderen weiterhelfe? Tipps?

Viele Grüße,
Jacka
 
Zuletzt bearbeitet:
Hallo Jacka,

erstmal vielen Dank für Deine Mühe, das ist in etwa das, wie ich auch probiert habe.

Aber die Sache mit den Foreach-Schleifen und dem Objekt das funktioniert bei mir leider nicht.

Folgende Meldung erschient

Trying to get property of non-object in E:\root\dd\datenblatt.php on line 20

und das für alle Zeilen.

Ich habe das jetzt zwar mit dem Error_reporting unterdücken können, weiß aber nicht, wie ich das Objekt jetzt initialisieren muss.

Das Ergbnis bringt leider keine Daten, noch nichtmals die 1. Schleife wird dargestellt, leider.

Dann habe ich das ganze wieder in Whileschleifen gesetzt, da werden zwar die Daten in den Läng- und Querachsen dargestellt, aber die Zellen in der Mitte bleiben nach wie vor leer.

Hier nochmal die Änderungen

PHP:
<?php

// Ok... Erstmal alle Daten holen:
$result = mysql_query("select id, pname from tblProdukt order by id"); 
//$rows_Produkte = mysql_fetch_object($result);

$result1 = mysql_query("select id, fname from tblFirma order by id"); 
//$rows_Firmen = mysql_fetch_object($result1);

$result2 = mysql_query("select pid, fid from Firma2Produkt order by pID, fID"); 
//$rows_FirmaProdukt = mysql_fetch_object($result2);

// Tabellenkopf
$html =  "<table border=1>";
$html .= "<tr><th>Firma/Produkt</th>";

// Produktüberschriften
while ($p = mysql_fetch_object($result)) {
    $html .= "<th>".$p->pname."</th>";
}
   $html .= "</tr>";

while ($f = mysql_fetch_object($result1)) {
	$html .=  "<tr><th>".$f->fname."</th>";

	while ($fp = mysql_fetch_object($result2)) {	
	
	//foreach($rows_FirmaProdukt as $firmaproduct) {
		while ($p1 = mysql_fetch_object($result)) {
                // foreach($rows_Produkte as $product) {
           		if($fp->pid == $p1->id && $fp->fid == $f->id) {
	        		$html .=  "<td>&nbsp;</td>";
	 		}
           		else {
           			$html .=  "<td style=\"background-color:yellow\">x</td>";
                         }
           	}
         }
	$html .=  "</tr>";
}
$html .=  "</table>";

mysql_close($verbindung);

// Ausgabe in HTML
echo $html;

?>
 

Anhänge

  • dbl2.jpg
    dbl2.jpg
    7,9 KB · Aufrufe: 52
Hi!

Wie bereits im meinem EDIT erwähnt:
Habe ich beim Test auch bemerkt..

So, macht er es zumindest, aber er gibt zu viele Spalten ein.
Warscheinlich durch die zwei While-Schleifen. :confused:

PHP:
<?php

// Datenbankanbindung
$host = "localhost";
$user = "Admin";
$pwd = "admin06";
$db = "firmendaten";

$conn = @mysql_connect($host, $user, $pwd);
if ($conn == false) {
    echo "Keine DB-Verbinung möglich";
         exit();
}

mysql_select_db($db);

// Tabelle erstellen
$html =  "<table border=1>\n";
$html .= "<tr><th>Firma/Produkt</th>\n";

// Produktüberschriften
$result1 = mysql_query("select id, pname from tblProdukt order by id");
while($rows_Produkte = mysql_fetch_object($result1)) {
   $html .=  "<th>".$rows_Produkte->pname."</th>\n";
 }
$html .= "</tr>\n\n";

// Datensätze
$result2 = mysql_query("select id, fname from tblFirma order by id");
while($rows_Firmen = mysql_fetch_object($result2)) {
    $html .=  "<tr>\n<th>".$rows_Firmen->fname."</th>\n";

            $result3 = mysql_query("select pid, fid from Firma2Produkt order by pID, fID");
         while($rows_FirmenProdukt = mysql_fetch_object($result3)) {
           $result4 = mysql_query("select id, pname from tblProdukt order by id");
           while($rows_Produkte = mysql_fetch_object($result4)) {

                    if($rows_FirmenProdukt->fid == $rows_Firmen->id && $rows_FirmenProdukt->pid == $rows_Produkte->id) {
                         $html .=  "<td style=\"background-color:yellow\">x</td>\n";
                    }
                    else {
                        $html .=  "<td>&nbsp;</td>\n";

                     }
                }
         }
         mysql_free_result($result3);
    mysql_free_result($result4);

    $html .=  "</tr>\n";
}
$html .=  "</table>\n";

mysql_close($conn);

// Ausgabe
echo $html;

?>

Vielleicht weiß einer der anderen noch eine Möglichkeit? Tipps?
 
Hi

ich habs :D

Es lag an den Whileschleifen.
Ich habe ja oben geschrieben, dass im ASP-Scirpt außerhalb der SQL-Anweisung eine Bedingung gesetzt werden kann. Dann wird abgefragt auf eof, ob ein Datensatz vorkommt und und und.... So spart man sich eine zusätzliche Schleife.

Ich habe das jetzt nochmals in php versucht und einfach eine Bedingung auf die 3. Tabelle gesetzt, die Schleife weggelassen und schwups...das wars!!

Danke Jacka, ohne Dich wäre ich auch nicht drauf gekommen, ich hätte z.B. keine 4. Query angelegt. :)

PHP:
$result2 = mysql_query("select id, fname from tblFirma order by id"); 
while($rows_Firmen = mysql_fetch_object($result2)) {
    $html .=  "<tr>\n<th>".$rows_Firmen->fname."</th>\n";
	
	  $result4 = mysql_query("select id, pname from tblProdukt order by id");
           while($rows_Produkte = mysql_fetch_object($result4)) {
        
      $result3 = mysql_query("select pid, fid from Firma2Produkt 
	  where pid= $rows_Produkte->id and 
	  fid = $rows_Firmen->id order by pID, fID");
	  if(mysql_num_rows($result3) ==0){
                     $html .=  "<td>&nbsp;</td>\n";
                    }
                    else {
                        $html .=  "<td style=\"background-color:yellow\">x</td>\n";;

                }
         }
		  $html .=  "</tr>\n";
         mysql_free_result($result3);
    mysql_free_result($result4);   
}
$html .=  "</table>\n";

mysql_close($verbindung);

// Ausgabe
echo $html;
 
:eek: Gehirnverstopfung...

Dabei bin ich eigentlich Meister im "Mammut-SQL-Anweisungen bauen".. blöd.

Aber na ja, hauptsache es läuft! :)

Viele Grüße,
Jacka
 
Zurück