$_GET ist nicht in included Script verfügbar (Artikel-/Seitenerstellung)
Eingetragen von derhasi (221)
am 10.09.2006 - 22:22 Uhr in
am 10.09.2006 - 22:22 Uhr in
Ursprünglich wollte ich wissen ob meine Seite mit Drupla realisierbar ist,beim test hat sich aber dann ein Problem mit der $_GET und auch $_SESSION Variablen bei per PHP-Artikel eingefügten Skripten herausgestellt.
Hallo liebe Drupal-Community,
ich suche zur Zeit ein CMS für meine Seite(n), bislang bin ich aber auf kein passendes gestoßen. Deshalb bitte ich euch zu überprüfen ob meine Anforderungen leicht(!) umsetzbar sind.
Es handelt sich bei der Seite vor allem um zugspitzpokal.de, die Seite zu einer Kart-Slalom Serie, auf der vor allem Ergebnisse zu finden sind. Momentan habe ich dort ein Forum eingebunden, was aber zu mächtig ist, und am Ziel vorbei ging.
Zum anderen würde ich es für pele.derhasi.de verwenden wollen.
Nun zu den Details:
1 Es sollen Termine (vielleicht aus einer Datenbank gelesen) angegeben werden können, dabei sind diese Termine in verschiedenen mehreren Gruppen einzuteilen (entspricht den verschiedenen Meisterschaften)
2 Den Terminen sollen Artikel zugeordnet werden können
3 Die Artikel können Berichte, Ausschreibungen, Regelwerke,... sein
4 Galerien sollen vom Nutzer erstellt werden, Bilder dabei vom Client hochgeladen werden können
5 Dokumente (pdf, xls, doc) sollen an Beiträge gehängt werden können
6 Kommentare können geschrieben werden
7 Der Admin soll die Rechte zum Dateiupload verwalten können
8 Kategorien (mehrstufig) sollen angezeigt werden, Artikel diesen (mehrfach) zugeordnet
9 Recht zu Anzeige und Editierung von Beiträgen sollen von Kategorie und Benutzer/Benutzerstatus/-gruppe abhängig sein
10 Kategorien könnten als Navigation dienen
11 Zu bestimmten Kategorien sollen Scripte integriert werden
* z.B. habe ich ein Ergebnis- und Statistikscript für die Saisonergebnisse erstellt, hierbei werden Daten aus einer MySQl-Datenbank gelesen und Terminlisten, Statistiken, Ergebnislisten oder Gesamtwertungen ausgegeben ... so sollten zB das letzte Rennen und die nächsten Rennen auf der Startseite mit detaillierteren Informationen angezeigt werden
Ich benötige sozusagen ein System dass die Struktur erstellt, durch Kategorien, in diesen Beiträge geschrieben werden, jedoch trotzdem ohne Anzeige von Beiträgen Scripte angezeigt werden, die eigene Variablen(per GET, POST, SESSION) auswerten.
Ich habe gut Kenntnisse in PHP und MySQL.
Ich hoffe ich habe meine Anforderungen verständlich unterbreitet und würde mich freuen wenn ihr mir meine Frage beantworten könntet.
Wenn sie positiv ausfällt wäre ich über die Angabe der zu empfehlenden Module dankbar.
Wenn sie negativ ausfällt, könnte mir ein Tipp zu einem anderen CMS weiterhelfen.
Vielen Dank schonmal,
derhasi
- Anmelden oder Registrieren um Kommentare zu schreiben
Hab ein bisschen weitergestöbert... Problem $_SESSION
am 11.09.2006 - 04:50 Uhr
Habe Drupal testweise installiert, und auch etliche Artikel hier durchgelesen.
Habe nun auch gleich probiert mein bereits erstelltes Skript in eine Seite einzubinden. Dort scheint es aber als würde das Drupal im Beitrag $_SESSION deaktivieren. Zumindest gibt eine print_r-Ausgabe für $_SESSION keine Werte an,obwohl welche im Skript definiert werden.
Kennt jemand dieses Problem und weiß Abhilfe?
Wär dankbar für ne Antwort.
Eigentlich ist $_SESSION
am 11.09.2006 - 07:32 Uhr
Eigentlich ist $_SESSION nicht deaktiviert. Ich habe bei mir das watchdog.module aktiviert und den folgenden PHP Code in einer Seite erstellt:
<?php
echo session_id();
$_SESSION['zaehler'] = 199;
print_r($_SESSION);
?>
Dannach erhalte ich Problemlos die folgende Ausgabe:
540ba272459973ed3419931c19fc0883
Array ( [watchdog_overview_filter] => all [zaehler] => 199 )
Probier vielleicht mal aus ob der kleine Code bei dir wenigstens zu einer Ausgabe führt.
Übrigens zu deiner ersten Frage würde ich sagen das du mit Drupal das abbilden kannst was du oben beschrieben hast. Habe einige CMSe wie Typo3, Mambo, Joomla, PhpNuke oder ezPublish ausprobiert und fand Sie zu schwer, zu umständlich in Sachen Inhalt erstellen oder unausgereift in der Rechtverwaltung bzw. es fehlten mir Module. Jedenfalls bin ich erstmal bei Drupal hängen geblieben.
Seite schluckt $_GET
am 11.09.2006 - 10:29 Uhr
Anscheinend wird bei meinem Problem nicht $_SESSION nicht angesprochen sondern $_GET wird nicht an das Script weitergeleitet. Auch in der Variablen $_SERVER sind die GET-Variablen nicht zu finden.In $_SERVER wird auch kein Hinweis zu Drupal gefunden.
Soweit ich das vorher
am 11.09.2006 - 12:47 Uhr
Soweit ich das vorher verstanden habe hast du Drupal ja installiert und es funktioniert auch! Ist das Richtig?
Demnach muss dein $_GET funktionieren weil Drupal funktioniert ja über GET! Jede Seite wird ja über z.B.: index.html?q=node/415 aufgerufen und dabei wird in $_GET['q'] der Paramter node/415 übergebn.
Und somit müsste auch $_GET bei Dir funktionieren, wenn deine installierte Drupal Seite läuft!
Poste doch bitte mal dein Code, vielleicht wird man dann eher schlauer aus deinem Problem.
Drupal an sich läuft
am 11.09.2006 - 15:17 Uhr
Drupal an sich läuft einwandfrei.
Ich habe einen neuen Inhalt erstellt (eine Seite) inder ich mit PHP-Code eine PHP-Datei/-Script include. Diese Datei benötigt $_GET-Variablen um -neben der Ladezeit des Scripts- auch eine Art Navigation anzuzeigen. Das Script ist noch ohne Inhalt gefüllt und zeigt an sich nur die Struktur, jedoch tut es das beim einbinden in den Drupal-Beitrag nicht mehr.
Ich binde wie folgt ein:
<?php
include 'http://www.zugspitzpokal.de/script/index.php';
?>
Eingabeformat: PHP-code
Das Ergebnis ist unter folgendem Link zu finden:
http://www.zugspitzpokal.de/drupal/?q=node/1
Das Script an sich findet man eben auf :
http://www.zugspitzpokal.de/script/index.php
Als GET Variablen benötigt das Script zum Beispiel
termin_id = 1
Im Drupalbeitrag habe ich beispielhaft die zwei Links mit Termin_id = 1 angefügt.
In der Analyse des Scripts ist mir dann aufgefallen dass ich die $_GET-Variable im Skript nicht abrufen kann. Jedoch ist $_GET davor und danach definiert.
Das hängt denke ich mit der Art zusammen wie und wann Drupal den PHP-Code umrechnet, hierbei gibt es wohl Einschränkungen, was wahrscheinlich auf die Sicherheit zurückzuführen ist. Für mich ist nun die Frage , wie ich das Umgehen kann.
Wenn du den Link
am 11.09.2006 - 16:02 Uhr
Wenn du den Link http://www.zugspitzpokal.de/drupal/?q=node/1&termin_id=1 auf rufst erhälst du doch folgende $_GET Werte:
GET vor Scriptausführung: Array ( [q] => node/1 [termin_id] => 1 )
GET während Scriptausführung:
GET nach Scriptausführung: Array ( [q] => node/1 [termin_id] => 1 )
Somit wird $_GET mit dem übergeben Wert "termin_id" gefühlt.
Und wenn du nun die Zeile einfügst:
echo $_GET[termin_id];
solltest du den übergebenen Wert "1" erhalten. Testweise kannst du die Zeile ja auch mal in die http://www.zugspitzpokal.de/script/index.php einfügen, aber dort sollte auch "1" rauskommen.
Jetzt muss nur noch im http://www.zugspitzpokal.de/script/index.php die jeweilige Funktion oder Variable mit $_GET[termin_id] gefüllt oder aufgerufen werden und schon sollte es funtzen.
Darf man fragen was du mit dem Script erreichen möchtest.
Genau das geht ja nicht. Vor
am 11.09.2006 - 16:37 Uhr
Genau das geht ja nicht. Vor und nach dem Script hat $_GET diese Werte. Während des Scripts ist $_GET leer. Also ein anderes $_GET.
Ich habe auch schon probiert $_GET über $_SESSION zu übermitteln.
Es findet de facto kein Austausch der $_GET, $_SESSION zwischen Drupal und dem Script statt. Man kann zwar die Variablen mit Inhalten füllen, diese sind aber dann nur innerhalb des Scripts gesetzt, außerhalb (in Drupal) besteht weiterhin eine andere Variable, die mit der vorigen nichts zu tun hat.
MEIN SCRIPT:
<?php
if($_GET['sess']){session_start();}
echo '<br>GET während des Scripts:';
print_r($_GET);
echo '<br>SESSION während des Scripts:';
print_r($_SESSION);
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$time_a = microtime_float();
//ZP-Design
/**include('../haf/head.inc');
include('../haf/bodytag.inc');
include('../haf/bodyhead.inc');*/
include_once(dirname(_file_).'/mysql.class');
include_once(dirname(_file_).'/ausw.func');
GLOBAL $dh_arr;//Enthält die aktuellen Schlüssel und Werte für die Auswertung
GLOBAL $db1; //Datenbankverbindung
//TESTET Datenbank auf aktuellere Daten
if (!$_SESSION['db_tested']){
include 'test_db.php';
$_SESSION['db_tested'] = 1 ;
}
$dh_arr = array();
//Array gibt Schlüssel an, die für die Auswertung genutzt werden
$dh_arr_vars= array('saison','gruppe','termin_id','klasse','verein','p_id');
//Wenn Schlüssel in unset stehen, werden sie nicht in dh_arr eingetragen
$_SESSION['dh_arr'] = (is_array($_SESSION['dh_arr']))?$_SESSION['dh_arr']:array();
$unset_arr = explode(",",$_GET['unset']);
while(list($key,$val) = each($_SESSION['dh_arr'])){
if (in_array($key,$dh_arr_vars)){
unset($_SESSION['dh_arr'][$key]);
if (!in_array($key,$unset_arr) AND !in_array(1,$unset_arr)){
$dh_arr[$key]=$val;
} else {
unset($_SESSION['dh_sort_by']);
unset($dh_sort_by);
}
}
}
//Packt die Werte der in dh_arr_vars angegeben Schlüssel aus GET in dh_arr
if (!is_array($_GET)) {$_GET = array($_GET );}
while(list($key,$val) = each($_GET)){
if (in_array($key,$dh_arr_vars)){$dh_arr[$key]=$val;}
}
$_SESSION['dh_arr']=$dh_arr;
//Variablenleiste Navileiste
$navi = '';
while(list($ix,$key) = each($dh_arr_vars)){
if (isset($dh_arr[$key])){
$navi .= ">> ".navi_val($key,$dh_arr[$key])." ".dh_link($PHP_SELF.'?unset='.$key,'<img src="/img/icons/minus.gif">').' ';
}
}
echo '<p class="smll" align="left">'.$navi.'</p>';
//Laden der Anzeige nach Auswertvariablen
switch (TRUE){
case isset($_GET['test']):
include 'test.sql.inc';
include 'tabelle1_output.inc';
break;
case isset($dh_arr['termin_id']) AND isset($dh_arr['klasse']):
include 'zp_klasse.sql.inc';
include 'tabelleMOD_output.inc';
break;
}
$time_b = microtime_float();
$time = $time_b - $time_a;
echo '<br><br><p class="smll">Ladezeit: '.round($time,3).' Sekunden</p>';
/**include('../haf/bodyfoot.inc');
include('../haf/foot.inc'); */
?>
Die Einbindung in Drupal:
<?php
echo '<br>*GET vor Scriptausführung: ';
print_r($_GET);
echo '<br>*SESSION vor Scriptausführung: ';
print_r($_SESSION);
?>
<br><br><b>EINGEBUNDENES SCRIPT ======</b><br>
<?php
include 'http://www.zugspitzpokal.de/script/index.php';
?>
<br><b>===== SCRIPT ENDE</b><br><br><br>
<a href="http://www.zugspitzpokal.de/drupal/?q=node/1&termin_id=1">==>Link zu dieser Drupal-Einbindung mit Termin 1</a>
<br><a href="http://www.zugspitzpokal.de/script/index.php?termin_id=1&sess=1">==>Link zum eigentlichen Skript mit Termin
1</a><br>
<?php
echo '<br>*GET nach Scriptausführung: ';
print_r($_GET);
echo '<br>*SESSION nach Scriptausführung: ';
print_r($_SESSION);
echo '<br>';
?>
Wo wird denn in Drupal definiert wie die Daten ausgegeben werden, bzw wo werden die Eingabeformate angewandt, habe es bislag nicht gefunden. Es könnte daran liegen.
Versuchs mal mit mit dem
am 11.09.2006 - 21:06 Uhr
Versuchs mal mit mit dem folgenden include an Stelle der ganzen URL:
include("./scripts/index.php");
Oh hab gerade gesehen du
am 11.09.2006 - 22:31 Uhr
Oh hab gerade gesehen du hast die index.php ausserhalb des /drupal Verzeichnis abgelegt. Ich glaub dann müsstes du eher den folgenden Include Befehl verwenden.
include("../../script/index.php");
Oder du packst die zu includenen Dateien in das Verzeichnis \includes im drupal Verzeichnis dann kannst du, die von mir erst genannte Variante nutzen. Z.B.:
include("./includes/index.php");
Danke, funzt.
am 11.09.2006 - 22:53 Uhr
Versuchs mal mit mit dem folgenden include an Stelle der ganzen URL:
include("../scripts/index.php");
Das funktioniert, danke. Man darf den Server nicht verlassen, ok.
SPITZE, das war der richtige Tipp, danke!
So jetzt kann es losgehen mit Drupal, mal gucken ob ich es so hinbekomme wie ich es mir vorstelle, aber Drupal scheint genau das CMS zusein welches ich gesucht habe.
Nocheinmal großes Danke für Deine Antworten.
-Zu Deiner Frage noch: Das Script ist ein Zuordnungscript, dass anhand der Variablen aus GET und SESSION bestimmte MySQL-Abrufe lädt, so werden über ein Script verschiedene Ergebnisse und Listen angezeigt werden.
Anhand von SESSION werden
am 12.09.2006 - 11:01 Uhr
Anhand von SESSION werden Listen ausgegeben? Die SESSION nutz du doch sicherlich für die Userverwaltung oder? Das macht doch eigentlich Drupal alles für Dich.
Wie füllst du den die Listen immer? Über PhpMyAdmin einfach in die MySql DB? Dafür gäbes ein Formular Modul wie: Webform oder CCK. Darauf kannst dann auch ne'n Select machen und kannst dafür auch den SQL Connect von Drupal nutzen. Fände ich jedenfalls leichter, aber vielleicht hab ich dich auch nicht Richtig verstanden.
Re: Anhand von SESSION werden
am 22.09.2006 - 22:15 Uhr
@chrisx:
Habe nun das eigentliche PHP-Skript (so gut wie) fertig : http://www.zugspitzpokal.de/ernst/index.php
Eine Userverwaltung brauche ich für dieses Script nicht. Die SESSION nutze ich um die Auswahlobjekte zu speichern, über deren Kombination werden dann SQL-Abfragen gestartet,die den Inhalt wiedergeben. Ebenso speichert die SESSION den HTML-Inhalt um ihn an eine Exceldaei geben zu können.
Da das Script auch unabhängig von Drupal laufen soll, habe ich es sozusagen Stand-Alone programmieren müssen, außerdem war es schon fast fertig als ich auf Drupakl gestoßen bin.
Jetzt muss ich mich aber daran setzen es auch in Drupal einzubinden,dazu muss ich natürlich erstmal Drupal richtig kennenlernen. Ansatzweise lässt es sich auch schon ganz gut einbinden,jedoch eben noch nicht ganz. Auf spurensuche muss ich selber gehen.
Vielleicht habt ihr aber für mich ein paar Infos, die ich beachten muss, um ein Stand-Alone-Script in eine Drupal-Seite einzubauen. Habe auf den ersten Blick den Verdacht,dass sich die Speicherung der SESSION-Elemente verzögert.