BlackBoard » Design, Programmierung & Entwicklung » Projekte » PHP Ministranteneinteilung online » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Ministranteneinteilung online
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
inde inde ist männlich
the r33l !n[)3


images/avatars/avatar-2005.jpg

Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...

Ministranteneinteilung online       Zum Anfang der Seite springen

Hallo liebe BBler...

Also, bevor ich meine Sachen erläutre, wisst dass ich seit ca. 10 Jahren Ministrant in einer katholische Pfarrgemeinde bin. Seit 3 Jahren bin ich nicht mehr aktiv sondern kümmre mich verstärkt um Jugendarbeit.

Mir ist da jetzt ne neue Idee - vielleicht nur ne Spinnerei - gekommen und ich möchte das umsetzen. Viele Pfarreien haben eigene Ministrantenhomepages, so eine möchte ich nun auch basteln. Soweit kein Problem, ich hab das nötige Handwerkszeug und KnowHow.

Auf dieser Seite sollen in Zukunft auch die Diensteinteilungen gemacht werden. Ich erklär mal wie das bei uns so läuft:

Es gibt Einteilungen für Weihnachten, Hl. Drei Könige, Klappern, Ostern, Maiprozessionen, usw.

Die Einteilungen enthalten Dienste, z.B.
- Weihnachten -
* Kindermette
* Christmette
* Erster Weihnachtsfeiertag
* Zweiter Weihnachtsfeiertag

Diese Dienste wiederum haben noch genauere Angaben:
Kindermette, 18:00 Uhr (Uhrzeit), neue Kirche (Ort), Weihrauch: Person A, Person B, Leuchter: Person C, Person D, Ministranten: Person E, ... , Person H (also verschiedene Ämter)

Außerdem gibt es ein Minimum das jeder Messdiener erfüllen soll (bsp. zwei Dienste pro Einteilung)

Jetzt ist die Frage wie ich das umsetze in PHP mit Datenbank.

Bis jetzt hab ich mir üebrlegt man bräuchte folgende Tabellen:

code:
1:
2:
3:
4:
5:
6:
7:
TABELLE ministranten
SPALTEN
mini_id
name
email
...
code:
1:
2:
3:
4:
5:
6:
7:
TABELLE einteilungen
SPALTEN
e_id
titel
gültigkeit von bis
mindest_dien_anzahl
...
code:
1:
2:
3:
4:
5:
6:
7:
TABELLE dienste
SPALTEN
d_id
titel
uhrzeit
treffpunkt
...
code:
1:
2:
3:
4:
TABELLE ämterarten
SPALTEN
amtart_id
amtart
code:
1:
2:
3:
4:
5:
6:
TABELLE ämter
SPALTEN
amt_id
d_id
amtart_id
anzahl

code:
1:
2:
3:
4:
5:
6:
TABELLE eingetragene minis
eintrag_id
mini_id
e_id
d_id
amtart_id


Ja, das waren soweit meine überlegungen... jetzt ist das ganze aber ziemlich verschachtelt und ich überleg ob es nicht vielleicht auch einfacher ginge. Vielleicht fällt jemandem von euch dazu was ein. Vielleicht habt ihr selbst ähnliches mal gemacht und könnt mir n paar tips für die möglichst unkomplizierte umsetzung geben. Wär echt dankbar!

__________________
MfG

the r33l !n[)3 [ http://www.indetonation.de ]

Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")
20.05.2006 14:46 inde ist offline E-Mail an inde senden Beiträge von inde suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Hm, also ich würde das mit der Tabelle Ministranten schon mal anders machen.
Ministrant ist ja eigentlich nur eine Rolle. Z.b. du bist das ja nicht,
müsstest aber evtl. auch im System sein, um eintragungen etc. zu überwachen.
Also würde ich eine Tabelle User machen, wo alle Benutzerdaten und der Login drin ist.
Dann würde ich noch eine Tabelle mit Rollen machen, und diese mit den Nutzern
verknüpfen. So kannst du dann auch den Pfarrer z.b. in die Sache integrieren,
falls der mal wissen will, was seine Schäfchen so machen Augenzwinkern

Ansonsten sieht das schon ganz vernünftig aus.

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
20.05.2006 16:17 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
inde inde ist männlich
the r33l !n[)3


images/avatars/avatar-2005.jpg

Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...

Themenstarter Thema begonnen von inde
      Zum Anfang der Seite springen

Jo, das war schon so geplant also "Usertabelle", ich hab sie jetzt nur als Ministrantentabelle dargestellt... also auf jedenfall in dieser Tabelle sollen alle (also auch ich, der Pfarrer, unser Gemeindereferent) verzeichnet sein. Weiter sollen die User verschiedenen Gruppen angehören (also verschiedene Rechte haben). Wie kann cih das dann am besten machen? Die Struktur der anderen Tabellen meinst du ist also in Ordnung. Gut, dann werd ich das so machen. Allerdings hat sich das Ziel ein wenig verändert, wenn auch nur minimal. Das Eintragen der Dienste für die Ministranten entfällt, die Dienste werden von einem authorisierten Oberministrant eingetragen. DIe normalen Minis können nur 1. einen ganzen EInteilungsplan runterladen und 2. einen Merkzettel für alle Dienste die sich machen runterladen.

__________________
MfG

the r33l !n[)3 [ http://www.indetonation.de ]

Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")
21.05.2006 15:39 inde ist offline E-Mail an inde senden Beiträge von inde suchen
Misel Misel ist männlich
Hüter des Kitkat


images/avatars/avatar-2084.png

Dabei seit: 02.11.2002
Beiträge: 1.203
Herkunft: live://home.berlin.d e

      Zum Anfang der Seite springen

Hast du vielleicht mal ne grafische Übersicht über die Tabellen? So in den reinen Tabellen-"Code" ist das irgendwie unübersichtlich.

__________________
LAUFT! Ich spiele KILLERSPIELE!
22.05.2006 00:14 Misel ist offline E-Mail an Misel senden Homepage von Misel Beiträge von Misel suchen
inde inde ist männlich
the r33l !n[)3


images/avatars/avatar-2005.jpg

Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...

Themenstarter Thema begonnen von inde
      Zum Anfang der Seite springen

Danke für eure Hilfe... allerdings hat sich die Sache mit der Einteilung vorerst mal erledigt... ich hab nochmal alles überdacht und bin zu dem Schluss gekommen die Sache lohnt den Aufwand nicht. Wir werden wohl auch weiterhin unsere Einteilungen mit Word schreiben und dann austeilen.

Allerdings bin ich noch auf eine Sache gekommen die ich auf dieser Seite einbauen möchte:

Gibt es die möglichkeit verschiedene Dateien in einem Verzeichnis abzulegen und dieses Verzeichnis für normale Benutzer nicht zugänglich zu machen. Angemeldete User sollen auf das Verzeichnis zugreifen dürfen und die Dateien ansehen könne. Geht doch irgendwie? Nur wie?

__________________
MfG

the r33l !n[)3 [ http://www.indetonation.de ]

Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")
25.05.2006 15:52 inde ist offline E-Mail an inde senden Beiträge von inde suchen
Champus Champus ist männlich
BlackBoarder


images/avatars/avatar-2272.png

Dabei seit: 24.03.2002
Beiträge: 1.649
Herkunft: Karlsruhe

      Zum Anfang der Seite springen

Wäre z.B. über HTAccess möglich. Anleitung.

__________________
CorvusCorone -> Champus
25.05.2006 16:43 Champus ist offline Homepage von Champus Beiträge von Champus suchen
inde inde ist männlich
the r33l !n[)3


images/avatars/avatar-2005.jpg

Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...

Themenstarter Thema begonnen von inde
Danke - neues Problem :)       Zum Anfang der Seite springen

Danke ich glaub das werd ich verwenden. Falls ich dazu noch Fragen hab werd ich sie bringen.

Allerdings ist mir heute ein weiteres Problem entstanden. Ich weiß überhaupt nicht wie es dazu gekommen ist und könnte es mir nicht erklären. Ich hab so an einem Script gearbeitet und aktualisierte wieder und wieder die Seite um änderungen und deren Funktionen zu überprüfen. Plötzlich bekam ich mehrere Notice, Waring, und einen Fatal error.

Den Fehlermeldungen konnte ich entnehmen dass offenbar der Code zweimal hintereinander ausgeführt werden. Als Fehlerquelle kommt nur eine Datei in Frage, die zu Beginn jedes Scripts geladen wird.

Obwohl also die Datei zweimal abgearbeitet wird bekomme ich nur eine Ausgabe.

Nun meine Frage: Ist sowas möglich? Wo könnte ich da Fehler gemacht haben?

Ich hab momentan den Code nicht da aber morgen werd ich die entsprechende Datei mal posten... ich weiß echt nicht weiter und bin schon verzweifelt... es geht einfach gar nix mehr.

Falls es was nützt: Ich benutz Smarty als Templatesystem.

__________________
MfG

the r33l !n[)3 [ http://www.indetonation.de ]

Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")
26.05.2006 22:33 inde ist offline E-Mail an inde senden Beiträge von inde suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Verwende einfach require_once() bzw. include_once(), wenn du Dateien einbindest, bei denen du sicherstellen musst, dass sie auch nur einmal eingebunden werden. Ansonsten wäre eine genauere Fehlermeldung und der passende Code schon von essentieller Wichtigkeit Augenzwinkern

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

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

27.05.2006 01:29 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
inde inde ist männlich
the r33l !n[)3


images/avatars/avatar-2005.jpg

Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...

Themenstarter Thema begonnen von inde
      Zum Anfang der Seite springen

Hab ich schon versucht.... vorher hatt ich alles per require eingebunden, jetzt teils mit require_once... behebt zwar einen teil der Probleme, dennoch wird der ganze Mist doppelt ausgeführt...

Hier mal der Code:
php:
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:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
<?php
error_reporting(E_ALL);

##### SESSION STARTEN
session_name("SID");
session_start();

$SID "";

if(empty($_COOKIE["cookies_act"])) {
 
 setcookie("cookies_act"1); 
 $SID session_name()."=".session_id(); 
 
}

echo "test";

##### SMARTY INITIALISIEREN

define('SMARTY_DIR''G:\xampp\htdocs\smarty\\');
// den Pfad entsprechend anpassen. Der Slash am ende muss
// vorhanden sein

require_once(SMARTY_DIR.'Smarty.class.php');
// Die Smarty-Klasse laden

$smarty = new Smarty;
// Neues Objekt erstellen

$smarty->compile_check true;
$smarty->debugging true;

require_once ("admin/data.php");
require_once ("admin/class_db_zugriff.php");
require_once ("functions.php");

##### DATENBANKZUGRIFF
$db = new db_zugriff;

$db->database=$mysql_dbname;
$db->host=$mysql_host;
$db->user=$mysql_user;
$db->pw=$mysql_pw;

$db->connect();

##### SESSION ID in Datenbank schreiben
##### Eintrag in user_onlinetable machen

$session_vorhanden "SELECT COUNT(sid) FROM minis_user_onlinetable WHERE sid LIKE '".session_id()."'";
$session_vorhanden $db->query_first($session_vorhanden);
$session_vorhanden $session_vorhanden[0];
if(!$session_vorhanden) {

 $sql "INSERT INTO minis_user_onlinetable (sid) VALUES ('".session_id()."')";
 $sql $db->query($sql);
 
} 

##### SESSION IP ÃœBERPRÃœFEN ######
if(!isset($_SESSION['IP'])) $_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];

if($_SESSION['IP']!=$_SERVER['REMOTE_ADDR']) {

    end_session();
    $smarty->assign("content_file""session_error.tpl");
    $smarty->display("html_body.tpl");
    exit();

}

##### Seitenvariablen #######

if(isset($_GET['p'])) {
$PAGE $_GET['p'];
$PAGE explode(",",$PAGE);
for($i=0;$i<count($PAGE);$i++) {

  $PAGE[$i] = intval(current($PAGE));
  next($PAGE);
  
}
}
else
 $PAGE 0;

$IP $_SERVER["REMOTE_ADDR"];
$smarty->assign("IP"$IP);
$TIME time();
$smarty->assign("TIME"$TIME);
if(isset($SID))
 $smarty->assign("SID"$SID);
$ACTION_MENU = array();
 $smarty->assign("ACTION_MENU"$ACTION_MENU);


##### USERDATEN ABFRAGEN

if(isset($_SESSION['ID'])) {

 $userdata get_userdata($_SESSION['ID']);
 $smarty->assign("userdata"$userdata);   
  
}

##### USER ONLINE Tabelle aktualisieren

$sql "UPDATE minis_user_onlinetable SET last_activity = '".$TIME."' WHERE sid LIKE '".session_id()."'";
$sql $db->query($sql);

$sql "DELETE FROM minis_user_onlinetable WHERE ".$TIME."-last_activity>60*15";
$sql $db->query($sql);

#####
?>


Und hier am Beispiel meiner home.php, die im Broser aufgerufen wird was weiter passiert...

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<?php
### DATEI: home.php

require_once("global.php");

/* Irgendwelche Funktionen und Anweisungen...
...
...
...
*/

$smarty->assign("content_file""home.tpl");
$smarty->display("html_body.tpl");
?>


So, noch ver Vollständigkeit halber meine html_body.tpl:

code:
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:
<html>
<head>
<title>{$seiten_titel}</title>
<link href="design/standart/style.css" type="text/css" rel="stylesheet">
</head>
<body>
<div class="logo">Hier ist das Logo</div>
<div class="content">

{include file="$content_file"}

</div>
<div class="footer">Footer</div>


<div class="left_navi">
{include file="navigation.tpl"}
{if !isset($userdata)}{include file="login_form.tpl"}{/if}
</div>

<div class="right_navi">{foreach from=$ACTION_MENU item=link key=menu_point}
<a href="{$link}&{$SID}">{$menu_point}</a>{/foreach}
</div>
</body>
</html>


Bitte helft! Ich glaub die global.php wird doppelt ausgeführt, hier die Fehlermeldungen die ich immer, unabhängig von der Datei die aufgerufen wird bekomme:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
Notice: A session had already been started - ignoring session_start() in G:\xampp\htdocs\minis\global.php on line 6

--> Weißt jawohl darauf hin dass session_start(), dass in der global.php gnaz am Anfang steht zweimal versucht wird...

Warning: Cannot modify header information - headers already sent by (output started at G:\xampp\htdocs\minis\global.php:6) in G:\xampp\htdocs\minis\global.php on line 12

--> Gut, halt der Fehler...

Notice: Constant SMARTY_DIR already defined in G:\xampp\htdocs\minis\global.php on line 21

--> Hier ebenfalls, SMARTY_DIR wird in global.php nur einmal definiert... warum versucht das Script das nocheinmal zu machen???


EDIT: Wenn ich in der global.php eine Testausgabe, z.B. echo "test"; mache erscheint "TEST zweimal in der Ausgabe... hier:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
test
--> das erste mal geht alles klar... seht euch die position von test in der global.php an

--> nun wird das ganze anscheinen nocheinmal gemacht, der erste Fehler erscheint:

Notice: A session had already been started - ignoring session_start() in G:\xampp\htdocs\minis\global.php on line 6

--> Hier die test ausgabe:

test

--> Der zweite Fehler:
Notice: Constant SMARTY_DIR already defined in G:\xampp\htdocs\minis\global.php on line 21


__________________
MfG

the r33l !n[)3 [ http://www.indetonation.de ]

Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von inde: 27.05.2006 14:19.

27.05.2006 14:01 inde ist offline E-Mail an inde senden Beiträge von inde suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Das einzige, was mir hier noch einfallen würde, wäre, dass in der home.php noch irgendwo Dateien eingebunden werden oder Sessions gestartet werden... Ansonsten finde ich in dem geposteten Teil keinen Hinweis darauf, was da so schief läuft.

Hast du einen Debugger bei der Hand? Damit ließe sich die Fehlerquelle sicherlich einfach finden. Ansonsten

a) schick mir mal ein Archiv von dem ganzen Kram per PM oder hänge es an den Beitrag an, dann könnte ich mal einen Debugger drüber laufen lassen oder
b) packe mal eine Reihe Debugausgaben in dein Script (also `echo "MARKE 1 | ";` etc. an markanten Stellen, damit du weißt, wo das Script gerade ist, dann kannst du nachvollziehen, ob bestimmte Dateien tatsächlich doppelt eingebunden werden).

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

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

27.05.2006 14:15 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
inde inde ist männlich
the r33l !n[)3


images/avatars/avatar-2005.jpg

Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...

Themenstarter Thema begonnen von inde
      Zum Anfang der Seite springen

Hab noch mal ge"editet"... ich denke das ist das mit der Marke... das merkwürdige ist ja ich ich hab ja vollkommen verschiedene Dateien auf die per Brwoser zugegriffen wird, also home.php, einteilung.php usw...

EDIT: Ich hab jetzt mal ne komplett "nackige" test.php erstellt:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
<?php
#### TESTDATEI

require_once("global.php");

$smarty->assign("seiten_titel""Hallo!");
$smarty->assign("content_file""");
$smarty->display("html_body.tpl");
?>


Es werden also nur noch
global.php, test.php, templates/html_body.tpl, templates/navigation.tpl sowie
design/standart/style.css geladen. Hier die Soucre von navigation.tpl
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<menu>
<li><a href="home.php?{$SID}">Startseite</a></li>
<li><a href="impressum.php?{$SID}">Impressum</a></li>
<li><a href="./forum/">Forum</a></li>
</menu>
{if isset($userdata)}
<h1>Internes Menü</h1>
<menu>
<li><a href="einteilung.php?{$SID}">Einteilungen</a></li>
<li>Telefonliste</li>
<li>Anmeldungen</li>
{if isset($userdata.r.set_permissions)}
<li>Berechtigungen verwalten</li>{/if}
<li><a href="logout.php?{$SID}">Logout</a></li>
</menu>
{/if}


und von style.css
code:
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:
body {
  
 font-family:Verdana; 
 margin:0px;
 padding:0px;
  
}

.logo {

border:1px solid black;
height:100px;

}


.content {
  
 font-size:0.8em;
 margin:0 140px 0 140px;
 padding:15px 40px 15px 40px;
 border:1px solid black;
 min-height:400px;
  
}

.footer {

 height:40px;
 border:1px solid black;

}

.left_navi {
  
 font-size:0.6em;
 position:absolute;
 left:20px;top:130px;
 width:150px;
 border:1px solid black;
 background-color:white; 
  
}

.right_navi {
  
 font-size:0.6em;
 position:absolute;
 right:20px;top:130px;
 width:150px;
 border:1px solid black;
 background-color:white; 
  
}


Aber an denen wird es nicht liegen...

__________________
MfG

the r33l !n[)3 [ http://www.indetonation.de ]

Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von inde: 27.05.2006 14:25.

27.05.2006 14:19 inde ist offline E-Mail an inde senden Beiträge von inde suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Die einzelne Marke sagt dir aber nur, dass die global.php in der Tat mehrfach ausgeführt wird. Nur wo, das weißt du so noch nicht, also füge mal noch ein paar weitere Marken in die Dateien ein, aus denen die global.php aufgerufen wird, so kannst du dich rantasten, wo der 2. Aufruf erfolgt.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

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

27.05.2006 14:22 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
inde inde ist männlich
the r33l !n[)3


images/avatars/avatar-2005.jpg

Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...

Themenstarter Thema begonnen von inde
      Zum Anfang der Seite springen

Daaaaaaaaaaaaaamn... ich hab den Fehler lokalisiert... dicker Fisch!
Anscheinend hab ich gestern eine php Datei die über den Browser aufgerufen werden sollte versehens unter functions.php gespeichert und die wird ja in global.php aufgerufen. Schöne scheiße! Vor allem da jetzt meine functions.php futsch ist... hm... aber irgendwo werd ich noch eine rumliegen haben.

Vielen Dank LX für diesen kleinen Kurs in Debugging smile Schönen Tag noch!

__________________
MfG

the r33l !n[)3 [ http://www.indetonation.de ]

Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von inde: 27.05.2006 14:37.

27.05.2006 14:35 inde ist offline E-Mail an inde senden Beiträge von inde suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

In der admin/data.php, admin/class_db_zugriff.php und functions.php erfolgt auch kein weiterer Zugriff auf die global.php?

Am einfachsten wäre es wie gesagt, wenn du mal ein komplettes Archiv (am besten auch mit DB-Dump mit Testdaten) anhängen würdest.


[EDIT]
Okay, damit ist das wohl geklärt *g

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

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

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LX: 27.05.2006 14:37.

27.05.2006 14:36 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
inde inde ist männlich
the r33l !n[)3


images/avatars/avatar-2005.jpg

Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...

Themenstarter Thema begonnen von inde
      Zum Anfang der Seite springen

Ahhh... ich rast gleich aus... kaum ist man das eine Problem los kommt schon das nächste!

Der php Code wird nicht verarbeitet sondern direkt ausgegeben... allerdings nicht von vorne sondern erst ab einer bestimmten Stelle. Das gilt allerdings komischerweise nur für eine Datei, bei allen anderen tritt das Problem nicht auf. Keine Ahnung was ich wieder falsch gemacht hab.

Ich poste mal die Datei: einteilung.php

php:
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:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
<?php

require_once("global.php");

if(empty($userdata['r']['einteilung_erstellen'])) {
  
 $smarty->assign("content_file""not_authorised.tpl");
 $smarty->display("html_body.tpl");
 exit; 
  
}

switch($PAGE[0]) {
  
 case 1:
  // Neue Einteilung erstellen
  $smarty->assign("seiten_titel""Neue Einteilung erstellen");

  ##### Alle Ã„mter (Rollen) in Array einlesen     
  $sql "SELECT * FROM minis_roles";
  $sql $db->query($sql);
  
  while($row $db->fetch_array($sql)) {

   $roles[$row['roleid']] = $row['role'];

  }
  $smarty->assign("roles"$roles);
 
   $e_arr = array();
   if(!isset($e_arr['titel']))
    $e_arr['titel'] = "";
   if(!isset($e_arr['from']))
    $e_arr['from'] = "";
   if(!isset($e_arr['to']))
    $e_arr['to'] = ""; 
   if(!isset($e_arr['infotext']))
    $e_arr['infotext'] = "";   
     
   $e_arr['termine'] = array(); 
  
  if(isset($PAGE[1]) AND $PAGE[1]==2) {
    
   $DatenOK 1;
   $error "";
   $t_error "";

   
   ##### Daten werden geprüft
   $e_arr['titel'] = $_POST['e_titel'];
   $e_arr['from'] = $_POST['e_from_Year']."-".$_POST['e_from_Month']."-".$_POST['e_from_Day'];
   $e_from_stamp strtotime($e_arr['from']);
   $e_arr['to'] = $_POST['e_to_Year']."-".$_POST['e_to_Month']."-".$_POST['e_to_Day'];
   $e_to_stamp strtotime($e_arr['to']);
   $e_arr['infotext'] = $_POST['e_infotext'];
   $e_arr['anz_termine'] = $_POST['anz_termine'];

   
   for($i=0;$i<$e_arr['anz_termine'];$i++) {
     
     if(!isset($_POST['drop_termin_'.$i])) {
      $wann mktime($_POST['termin_'.$i.'Hour'],
        $_POST['termin_'.$i.'Minute'], 0,
        $_POST['termin_'.$i.'Month'],
        $_POST['termin_'.$i.'Day'],
        $_POST['termin_'.$i.'Year']);
        
      $tmp_roles = array();  

      if($_POST['termin_'.$i.'Year']."-".$_POST['termin_'.$i.'Month']."-".$_POST['termin_'.$i.'Day'] !=
       date("Y-m-j",$wann)) {

       $DatenOK 0;
       $t_error .= "Das angegebene Datum ist ungültig.<br>\n";

       }
      if($wann $e_from_stamp OR $wann $e_to_stamp) {

       $DatenOK 0;
       $t_error .= "Das Datum liegt außerhalt der Gültigkeitsgrenzen.<br>\n";

      }

      ##### Ã„mter auslesen und in temporären Ã„mterarray speichern

      while(list($key,$val) = each($roles)) {
           
       if(isset($_POST[$i.'_role_'.$key]) 
        && count($_POST[$i.'_role_'.$key]>0){
        #&& in_array('drop_role', $_POST[$i.'_role_'.$key])==false) {
          
        $tmp_roles[$key] = $_POST[$i.'_role_'.$key]; 
         
       } 
        
      }      

      ##### Ã„mter hinzufügen
      if(isset($_POST['add_role_to_'.$i]) && $_POST['role_'.$i]>0) {

        $tmp_roles[$_POST['role_'.$i]] = array();

      }

      
      array_push($e_arr['termine'], array('titel' => $_POST['termin_'.$i.'_titel'],
       'wann' => $wann,
       'treffpunkt' => $_POST['termin_'.$i.'_treffpunkt'], 
       'infotext' => $_POST['termin_'.$i.'_infotext'],
       'roles' => $tmp_roles,
       'error' => $t_error));

      unset($wann$tmp_roles);
      $t_error "";
     }
     
    }
    
   ##### e_arr[termine] nach datum sortieren    
   function cmp ($a$b) {
 
    if ($a['wann'] == $b['wann']) return 0;
    return ($a['wann'] < $b['wann']) ? -1;

   }
   
   usort($e_arr['termine'], "cmp");
  
  
    
   
   if($e_arr['titel']=="") {
    
    $DatenOK 0;
    $error .= "Titel fehlt<br/>\n";  
      
   }
   
   if($e_arr['from']=="" 
    OR $e_arr['to']=="" 
#    OR checkdate(date("m", $e_to_stamp), date("d", $e_to_stamp), date("Y", $e_to_stamp))==false 
#    OR checkdate(date("m", $e_from_stamp), date("d", $e_from_stamp), date("Y", $e_from_stamp))==false 
    OR $e_to_stamp<$e_from_stamp) {
     
    $DatenOK 0;
    $error .= "Gültigkeitsdauer fehlerhaft<br/>\n"; 
     
   }
   
   ##### Termin hinzufügen
   if(isset($_POST['add_termin'])) {
     
     array_push($e_arr['termine'], array('titel' => 'neuer Termin', 
      'wann' => '', 
      'treffpunkt' => '', 
      'infotext' => '',
      'roles' => array(),
      'error' => ''));
     
     
    }
    
   if($DatenOK && isset($_POST['save_einteilung'])) {
    
    $e_titel strip_tags($e_titel);
    $sql "INSERT INTO minis_einteilung (titel, from_date, to_date, infotext) 
     VALUES ('$e_titel', '$e_from', '$e_to', '$e_infotext')"; 
    $sql $db->query($sql);
   
   } 
     
 }
  ##### Alle User in Array einlesen
  $sql "SELECT ID_MEMBER, memberName FROM smf_members ORDER BY memberName";
  $sql $db->query($sql);
  while($row $db->fetch_array($sql)) {
    
   $all_members[$row['ID_MEMBER']] = $row['memberName']; 
    
  }
  $smarty->assign("all_members"$all_members);    

 

 
  $e_arr['anz_termine'] = count($e_arr['termine']);
  $smarty->assign("e_arr"$e_arr);
  $smarty->assign("content_file""neue_einteilung.tpl"); 
 break;
 
 case 3:
  // Einteilungen Ãœbersicht
  $smarty->assign("seiten_titel""Einteilungen");
  
  $ACTION_MENU['Neue Einteilung'] = "einteilung.php?p=1";
  
  $smarty->assign("content_file""einteilung.tpl"); 
 break;
 
 default:
  header("Location: einteilung.php?p=3&$SID"); 
 break;     
}

$smarty->assign("ACTION_MENU"$ACTION_MENU);  
$smarty->display("html_body.tpl");

?>


Und das ist was ich ausgegeben bekomme:
Zitat:
assign("content_file", "not_authorised.tpl"); $smarty->display("html_body.tpl"); exit; } switch($PAGE[0]) { case 1: // Neue Einteilung erstellen $smarty->assign("seiten_titel", "Neue Einteilung erstellen"); ##### Alle Ämter (Rollen) in Array einlesen $sql = "SELECT * FROM minis_roles"; $sql = $db->query($sql); while($row = $db->fetch_array($sql)) { $roles[$row['roleid']] = $row['role']; } $smarty->assign("roles", $roles); $e_arr = array(); if(!isset($e_arr['titel'])) $e_arr['titel'] = ""; if(!isset($e_arr['from'])) $e_arr['from'] = ""; if(!isset($e_arr['to'])) $e_arr['to'] = ""; if(!isset($e_arr['infotext'])) $e_arr['infotext'] = ""; $e_arr['termine'] = array(); if(isset($PAGE[1]) AND $PAGE[1]==2) { $DatenOK = 1; $error = ""; $t_error = ""; ##### Daten werden geprüft $e_arr['titel'] = $_POST['e_titel']; $e_arr['from'] = $_POST['e_from_Year']."-".$_POST['e_from_Month']."-".$_POST['e_from_Day']; $e_from_stamp = strtotime($e_arr['from']); $e_arr['to'] = $_POST['e_to_Year']."-".$_POST['e_to_Month']."-".$_POST['e_to_Day']; $e_to_stamp = strtotime($e_arr['to']); $e_arr['infotext'] = $_POST['e_infotext']; $e_arr['anz_termine'] = $_POST['anz_termine']; for($i=0;$i<$e_arr['anz_termine'];$i++) { if(!isset($_POST['drop_termin_'.$i])) { $wann = mktime($_POST['termin_'.$i.'Hour'], $_POST['termin_'.$i.'Minute'], 0, $_POST['termin_'.$i.'Month'], $_POST['termin_'.$i.'Day'], $_POST['termin_'.$i.'Year']); $tmp_roles = array(); if($_POST['termin_'.$i.'Year']."-".$_POST['termin_'.$i.'Month']."-".$_POST[
'termin_'.$i.'Day'] != date("Y-m-j",$wann)) { $DatenOK = 0; $t_error .= "Das angegebene Datum ist ungültig.
\n"; } if($wann < $e_from_stamp OR $wann > $e_to_stamp) { $DatenOK = 0; $t_error .= "Das Datum liegt außerhalt der Gültigkeitsgrenzen.
\n"; } ##### Ämter auslesen und in temporären Ämterarray speichern while(list($key,$val) = each($roles)) { if(isset($_POST[$i.'_role_'.$key]) && count($_POST[$i.'_role_'.$key]>0){ #&& in_array('drop_role', $_POST[$i.'_role_'.$key])==false) { $tmp_roles[$key] = $_POST[$i.'_role_'.$key]; } } ##### Ämter hinzufügen if(isset($_POST['add_role_to_'.$i]) && $_POST['role_'.$i]>0) { $tmp_roles[$_POST['role_'.$i]] = array(); } array_push($e_arr['termine'], array('titel' => $_POST['termin_'.$i.'_titel'], 'wann' => $wann, 'treffpunkt' => $_POST['termin_'.$i.'_treffpunkt'], 'infotext' => $_POST['termin_'.$i.'_infotext'], 'roles' => $tmp_roles, 'error' => $t_error)); unset($wann, $tmp_roles); $t_error = ""; } } ##### e_arr[termine] nach datum sortieren function cmp ($a, $b) { if ($a['wann'] == $b['wann']) return 0; return ($a['wann'] < $b['wann']) ? -1 : 1; } usort($e_arr['termine'], "cmp"); if($e_arr['titel']=="") { $DatenOK = 0; $error .= "Titel fehlt
\n"; } if($e_arr['from']=="" OR $e_arr['to']=="" # OR checkdate(date("m", $e_to_stamp), date("d", $e_to_stamp), date("Y", $e_to_stamp))==false # OR checkdate(date("m", $e_from_stamp), date("d", $e_from_stamp), date("Y", $e_from_stamp))==false OR $e_to_stamp<$e_from_stamp) { $DatenOK = 0; $error .= "Gültigkeitsdauer fehlerhaft
\n"; } ##### Termin hinzufügen if(isset($_POST['add_termin'])) { array_push($e_arr['termine'], array('titel' => 'neuer Termin', 'wann' => '', 'treffpunkt' => '', 'infotext' => '', 'roles' => array(), 'error' => '')); } if($DatenOK && isset($_POST['save_einteilung'])) { $e_titel = strip_tags($e_titel); $sql = "INSERT INTO minis_einteilung (titel, from_date, to_date, infotext) VALUES ('$e_titel', '$e_from', '$e_to', '$e_infotext')"; $sql = $db->query($sql); } } ##### Alle User in Array einlesen $sql = "SELECT ID_MEMBER, memberName FROM smf_members ORDER BY memberName"; $sql = $db->query($sql); while($row = $db->fetch_array($sql)) { $all_members[$row['ID_MEMBER']] = $row['memberName']; } $smarty->assign("all_members", $all_members); $e_arr['anz_termine'] = count($e_arr['termine']); $smarty->assign("e_arr", $e_arr); $smarty->assign("content_file", "neue_einteilung.tpl"); break; case 2: //$e_id = $_GET['e_id'] ? isset($_GET['e_id'] : 0; $smarty->assign("e_id", $e_id); if(isset($PAGE[1]) AND $PAGE[1]==2) { $DatenOK = 1; $error = ""; $e_id = $_POST['e_id']; $d_titel = $_POST['d_titel']; } $smarty->assign("seiten_titel", "Neuen Dienst erstellen"); $smarty->assign("content_file", "neuer_dienst.tpl"); break; case 3: // Einteilungen Übersicht $smarty->assign("seiten_titel", "Einteilungen"); $ACTION_MENU['Neue Einteilung'] = "einteilung.php?p=1"; $smarty->assign("content_file", "einteilung.tpl"); break; default: header("Location: einteilung.php?p=3&$SID"); break; } $smarty->assign("ACTION_MENU", $ACTION_MENU); $smarty->display("html_body.tpl"); ?>


__________________
MfG

the r33l !n[)3 [ http://www.indetonation.de ]

Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")
27.05.2006 16:29 inde ist offline E-Mail an inde senden Beiträge von inde suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Sieht fast so aus, als hätte er hier den '->' Operator mal als '?>' interpretiert. Schau einfach mal, ob der korrekt so geschrieben ist.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

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

27.05.2006 16:45 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
inde inde ist männlich
the r33l !n[)3


images/avatars/avatar-2005.jpg

Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...

Themenstarter Thema begonnen von inde
      Zum Anfang der Seite springen

Jo... die betreffende Zeile 7 ist korrekt!

php:
1:
$smarty->assign("content_file""not_authorised.tpl");


Ja, aber das ist wohl am naheliegensten... kann sowas passieren?

[Edit]
Ich hab mal vor dieser Zeile ein echo "->"; eingefügt... und siehe da! -> wird tatsächlich also ?> interpretiert!!! Was ist da los?

[edit2]
Das Problem hat sich gelöst, hab die Datei neu gespeichert und die alte ersetzt.. ka was da los war.

Nun hab ich aber noch ne Frage zu mysql:

Ich habe in einer Tabelle unter Werte mit entsprechender ID und einem dritten Feld, welches zur Festlegung der Reihenfolge dient. ID = 1 hat also Wert = "lala" und z.B. position = 4 usw.

Nun möchte ich eine zweite Tabelle auslesen in der werte unter angabe der ID der erste Tabelle gespeichert sind. Also z.B. Wert = "huhu" und ID_TAB1 = 1. Nun möchte ich diese Werte aus Tabelle 2 in der Reihenfolge von der in Tabelle eins angegebenen Positionen für die Werte in Tabelle eins abfragen. Geht das irgendwie?

__________________
MfG

the r33l !n[)3 [ http://www.indetonation.de ]

Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von inde: 31.05.2006 07:56.

27.05.2006 16:48 inde ist offline E-Mail an inde senden Beiträge von inde suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Mit JOINs ist das kein Problem. Beispiel:


code:
1:
2:
3:
SELECT tabelle2.wert FROM tabelle1
LEFT JOIN tabelle2 ON tabelle2.id=tabelle1.id
ORDER BY position


__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

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

31.05.2006 10:34 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
inde inde ist männlich
the r33l !n[)3


images/avatars/avatar-2005.jpg

Dabei seit: 14.09.2003
Beiträge: 267
Herkunft: von da wo ihr nie hinwollt...

Themenstarter Thema begonnen von inde
      Zum Anfang der Seite springen

So... ich hab die Arbeit wieder aufgenommen und prompt kommt die nächste Frage: Diesmal MYSQL.

Ich möchte aus drei Tabellen Zeilen löschen die in einer in allen drei vorkommenden Spalte den selben Wert haben. Die Spalte heißt ID_EINTEILUNG.

Ich habe es erst so versucht:

code:
1:
2:
DELETE FROM minis_einteilung, minis_epunkt, minis_emds 
 WHERE ID_EINTEILUNG LIKE '".$PAGE[2]."'


Hat nicht funktioniert... Hier die Fehlermeldung:
code:
1:
2:
3:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ID_EINTEILUNG LIKE '3'' at line 2

1064


Dann so:
code:
1:
2:
3:
4:
DELETE FROM minis_einteilung t1, minis_epunkt t2, minis_emds t3
	 WHERE t1.ID_EINTEILUNG LIKE '".$PAGE[2]."' OR
	  t2.ID_EINTEILUNG LIKE '".$PAGE[2]."' OR
	  t3.ID_EINTEILUNG LIKE '".$PAGE[2]."'


Ebenso, Fehler:
code:
1:
2:
3:
4:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE t1.ID_EINTEILUNG LIKE '3' OR t2.ID_EINTEILUNG LIKE '3' OR t3.ID_EI' at line 2

1064


Geht das zu lösen, so dass ich vielleicht nur eine Abfrage brauche?

__________________
MfG

the r33l !n[)3 [ http://www.indetonation.de ]

Durch Frauen wird immer alles nur noch schwieriger!
Odysseus (in "Troja")
18.06.2006 22:55 inde ist offline E-Mail an inde senden Beiträge von inde suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

1. Wieso LIKE und nicht =?
2. Wozu alles in eine Abfrage packen? Die enstprechend längere WHERE-Klausel macht das auch nicht performanter (und ich bin mir nicht mal sicher, ob man in einem Zug aus mehreren Tabellen löschen kann).

Also:

code:
1:
2:
3:
DELETE FROM minis_einteilung WHERE id_einteilung=$PAGE[2];
DELETE FROM minis_epunkt WHERE id_einteilung=$PAGE[2];
DELETE FROM minis_emds WHERE id_einteilung=$PAGE[2];


__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

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

18.06.2006 23:04 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Projekte » PHP Ministranteneinteilung online

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH