Archiv verlassen und diese Seite im Standarddesign anzeigen : Liege ich da richtig?
Dominic Suter
22.02.2002, 21:58
Wenn ich einer Seite eine Variable mittels <a href="index.php?Attribut=Wert>Hyperlink</a> uebergebe, wird dann index.php neu ausgefuehrt, oder muss ich das erst veranlassen? (Bzw. gaebe es eine Funktion wie getch() in C++?)
jopp... die index.php wird refreshed und der link geaendert...
greetz
Dominic Suter
23.02.2002, 10:58
Cool, dann sollte es ja eigentlich funktionieren
Vielen Dank fuer deine Hilfe!
Greez Stoenggi
Dominic Suter
24.02.2002, 00:10
Eines kann ich aber nicht verstehen: Ich uebertrage eine Variable auf folgende weise: <A HREF=\"index.php?seltitle=$maintitle\" CLASS=\"maintitle\"> $maintitle</A>. Das heisst, wenn jemand den Link verwendet, wird der Variablen seltitle den Wert von $maintitle zugeordnet.
Mein debugger gibt aber immer die Fehlermeldung aus: Undefined Variable seltitle.
Benoetige ich denn noch ein spezielles Konstrukt um seltitle anschliessend noch verwenden zu koennen?
Auch die Loesung $SaveSeltitle = $_GET["seltitle"]; brachte mich nicht ans Ziel, obwohl dies ja eine der neuen PHP Eigenschaften ist (habe php 4.1.1 am laufen).
Weis jemand Rat?
Felix Kaiser
24.02.2002, 00:45
Nimm doch die alten Funktionen, hab auch 4.1.1 laufen und geht damit alles prima, ist zu dem abwärtskompatibel.
Dominic Suter
24.02.2002, 12:04
OK. Aber wie muesste ich das mit den alten Variabeln anstellen? (Klar, ich muss die php.ini aendern)
Mein Problem bestehet lediglich darin, dass das Zend Development Environment2 offensichtlich eine eigene PHP-Version verwedet (sicher eine eigene PHP.exe). Da ich bei mir PHP4.1.1 am laufen habe, ist auch Das Dev Studio auf 4.1.1. eigerichtet...
Obwohl: Eigentlich ist die Version ja abwaertskompatibel, folglich sollte es auch so gehen. Aber muss ich dann die Variable definieren? Wenn ja, wie?
Meine Buecher halten sich zu diesem Thema leider ziemlich knapp, auch das PHP Manual konnte mir nicht weiter helfen...
Felix Kaiser
24.02.2002, 13:44
Ich hoffe, ich hab dein Problem richtig erfasst, dass du die in der URL hinter dem ? Parameter angegebene Variable brauchst? Wenn das der Fall ist nehm ich immer den Code:
parse_str(strtolower($QUERY_STRING),$qs);
echo "Got your var: $qs[seltitle]\n";
Dominic Suter
24.02.2002, 16:07
Ich glaube, jetzt haben wir uns missverstanden. Ich will der seite index.php eine Variable uebergeben. Diese Variable hat den Namen "$seltitle". Der Inhalt der Variabel $seltitle ist jeweils der Inhalt einer anderen Varibel ($maintitle), die jedoch im Skript definiert wird.
Ich wollte das nun so machen: index.php?seltitle=$maintitle
Und im Skript selbst habe ich dann eine if-Bedingung:
if (seltitle==maintitle)
{
...
}
Weil diese If- Bedingung innerhalb einer While-Schleife steht, ist seltitle==maintitle nur 1x true (Das Konstrukt macht also Sinn).
So sieht mein Source aus. Aber, wie gesagt, der Debugger reklmiert, dass $seltitle undefiniert sei (das Skript funktioniert auch nicht richtig).
Was muss ich nun noch unternehmen, dass ich $seltitle im Skript auch verwenden kann?
Was ich vieleicht noch erwaehnen sollte: Ich uebergebe die Variable an index.php. Das Skript, das die Variable aber effektiv verwendet, heisst navigation.php und ist mittels include in das Skript index.php eingebunden.
Felix Kaiser
24.02.2002, 21:33
Meine Güte ist das kompliziert und nach keine Ahnung wie oft ich das jetzt durchgelesen hab: Du übergibst im Parameter "seltitle" einen Wert wie z.B. $maintitle oder was auch immer $omabekommtblumen. Im Skript willst du dann ne Variable anlegen $seltitle, die den Wert des Parameters seltitle= trägt, jedoch den Inhalt der in seltitle= angegeben Variable repräsentiert? Kurz gesagt x ist der Name einer Variable und soll nun durch den Wert dieser Variable ersetzt werden?
(hoff mal das jetzt endlich verstanden zu haben)
Dann sähe der Code so aus:
<?php
$title1 = "Example 1";
$title2 = "Example 2";
$title3 = "Example 3";
parse_str(strtolower($QUERY_STRING),$qs);
eval("\$seltitle = \"$qs[seltitle]\";\n");
echo "You select this title: $seltitle\n";
?>
Beim Aufruf "example.php?seltitle=$title1" würde er ausgeben: "You select this title: Example1"
Für $title2 entsprechend "Example2", etc.
Dominic Suter
25.02.2002, 15:35
Vielen Dank, genau das meinte ich. Verzeihung, dass ich mich so kompliziert ausgedrückt habe, bemekte es beim schreiben selbst. Am einfachsten wäre da ein Struktogramm gewesen...
Ich werde das heute Abend einmal ausprobieren, melde mich dann wieder. :)
Gruss und nochmals Danke!
Stönggi
Dominic Suter
25.02.2002, 22:27
Irgendwie scheint das ganze doch nicht zu funktionieren :(
Ich habe nun dein Quelltext eingegeben, aber noch immer erhalte ich die Fehlermeldung, dass seltitle eine undefinierte Variable sei.
Moeglicherweise haben wir uns missverstanden in meinem Ziel. Daher probiere ich es hier noch einmal in einem PAP(hoffentlich verstaendlicher :))
1. Der user klickt auf einen Hyperlink.
2. Mit diesem Hyperlink wird der Variabel $seltitle einen Wert zugewiesen (index.php?seltitle=$maintitle). Nun hat die Variabel $seltitle den Wert der Variabel $maintitle bekommen
3.Der HTML Code wird in einen String gewandelt. (rawurldecode())
4. im Skript index.php soll nun der Vergleich angestellt werden (if (seltitle==maintitle))
Ein Beispiel:
1.$maintitle = Erster Titel
2. Der Besucher verwendet den Link also: seltitle=$maintitle. Folglich ist nun $seltitle=Erster%20Titel
3. Der Titel wird wieder in einen PHP-String gewandelt. $seltitle ist nun Erster Titel.
4. Nun wird der Vergleich gemacht. Also: if (Erster Titel==Erster Titel)
So sieht eigentlich mein Ziel aus. Leider kann ich es nicht erreichen, da der Debugger immer meldet, dass $seltitle nicht definiert sei, obwohl ich ja genau dies in der URL mache. Was habe ich vergessen oder wo habe ich den Fehler gemacht? Ich verstehe einfach nicht, was fehlt...
mhh junge.. poste mal ne url .. und bau die möglichkeit ein das man da den sourcecode sehen kann :-) (highlight_file...)
dann könnte wir dir vielleicht mehr helfen ...
über den ganzen theorethischen scheiss kann man diskutieren solange man will .. zeig uns was du vorhast... dann können wir dir sicher bessa helfen :D
Dominic Suter
25.02.2002, 23:02
Ich kann das ganze Material ja mal als Zip auf nen Server legen. Die URL lautet:
http://infokurs.web.psi.ch/suterd/Problem.zip
Ich werde allerdings erst morgen das File uppen koennen, ich habe von zuhause aus keinen Zugriff auf den Server :(
Vielen Dank...
Ach ja: highligh_file geht nicht, da auf diesem Server kein PHP installiert ist :(
Felix Kaiser
25.02.2002, 23:17
Ich werds mir bei Gelegenheit auch anschaun. Warum der bei meinem Code die $seltitle nich gefunden hat is komisch, damit eval() ja diese Variable gesetzt wird.
Oder irgend anderswo is ne Fehldefinition, die einer von uns dann hoffentlich findet. :rolleyes:
Dominic Suter
26.02.2002, 08:13
OK, ich habe das File geuupt. http://infokurs.web.psi.ch/suterd/Problem.zip
Wäre echt schön wenn Ihr was findne könnted. Ich hab gestern nochmals 3-4 h darin investiert, leider erfolglos. Ich habe nun einmal so viele Files mitgegeben, dass das ganze funktionieren sollte. Allerdings sind die includes mit Absoluten Verzeichnissen gemacht, diese sollet Ihr ggf. noch ändern.
Mfg Stönggi
hi, ich habs mir grade runtergeladen ...
naja.. begeistert bin ich ehrlich gesagt nicht von dem code ... :evil:
lt. w3c dtd für html 4.o sind nämlich z.b keine kommentare da erlaubt wo du sie setzt *G*
naja .. whatever ...
rawurldecode($seltitle);
parse_str($seltitle, $arrseltitle);
$seltitle = reset($arrseltitle);
was das soll .. ??? <-- die typischen 3 fragezeichen ..
das template inc, was du einfach so aus der phplib rausgerissen hast, ist mir noch nicht ganz klar was du damit willst ...
*ich schau weiter... *
Dominic Suter
26.02.2002, 14:46
Die Templates sind erst einmal noch nicht von Bedeutung, dass mache ich als nächstes. Warum ist es nicht gut, wenn man dieses File aus der ganzen LIB rausnimmt?
Wegen den Komentaren: Kannst du mir eine URL nennen, in der erklährt wird, WO man Kommentare setzten darf, wäre echt dankbar...
Ich muss sagen, dass dies die erste Page in diesem Umfang ist und auch das erste PHP Projekt. Aber ich werde das sicherlich auch noch schöner lernen *hoff* 8)
Was für Unschönheiten besitzt der Code denn sonst noch? Ich kann nut an konstruktiver Kritik lernen das ganze besser zu machen... :))
Ach ja, eine weis ich. Das CSS File ist nicht ueber alles erhaben, das besitzt noch die eine oder andere Unschoenheit
Schon jetzt einmal vielen Dank...
Felix Kaiser
26.02.2002, 22:18
Auf den ersten Blick muss ich sagen, du hast meinen Code nicht verstanden :)
rawurldecode($seltitle); //entfernt die HTML Spezifischen Zusatztags wie %20 etc.
parse_str($seltitle, $arrseltitle);
$seltitle = reset($arrseltitle);
^ ich weiß leider nicht was genau das im einzelnen macht
//parse_str(strtolower($QUERY_STRING),$qs); //HIER STECKT NOCH EIN KLEINER FEHLER IM DETAIL!!
//eval("\$seltitle = \"$qs[seltitle]\";\n");
^ aber die beiden Zeilen von mir definieren ja gerade diese Variable $seltitle, die Probleme macht. Und es wird davon ausgegangen, dass wenn der Aufruf mit z.B. index.php?seltitle=$duempel im Skript bereits eine Variable $duempel existiert. Verstehst? Hast den Code z.B. eingefügt ohne richtig erfasst zu haben was er macht und sowas ist in der Regel nicht sonderlich günstig :rolleyes:
Nochmal Zusammenfassung im Beispiel:
Code im Skript:
<?php
$maintitle = "Was auch immer der tatsächliche Wert von Maintitle ist";
$demotitle = "Irgendwas halt";
$badtitle = "Ein Männlein steht im Walde.";
parse_str(strtolower($QUERY_STRING),$qs);
eval("\$seltitle = \"$qs[seltitle]\";\n");
?>
Und beim Aufruf des PHP Skriptes ergibt sich folgendes nach Ausführen von den Zeilen als Inhalt der nun existierenden PHP Variable $seltitle:
index.php?seltitle=$maintitle
$seltitle -> Was auch immer der tatsächliche Wert von Maintitle ist
index.php?seltitle=$demotitle
$seltitle -> Irgendwas halt
index.php?seltitle=$badtitle
$seltitle -> Ein Männlein steht im Walde.
Hmm, wiedermal aneinander vorbeigeredet? ?(
Dominic Suter
26.02.2002, 23:13
@guru
1. Das Reset bewirkt, dass die erste Zeile eines Arrays ausgelesen wird.
2. Was dein Code macht, habe ich nun (glaube ich wenigstens) verstanden. Mein Fehler war, dass ich die Abfrage zu frueh machte, was noch immer ein undefined ergab. Dabei muesste ich die Zuordnung machen, nachdem $maintitle definiert ist (im Skript). Ich glaube dann sollte es gehen. Du hast in deinem Beispiel ja auch immer schon alle Variabeln definiert, das war bei meinem Versuch leider nicht der Fall. *schaem*
Werde das morgen mal abchecken.
Dominic Suter
28.02.2002, 22:24
Ich muss sagen, dass ich wohl irgend etwas noch immer nicht richtig verstanden haben muss, es laeuft noch immer nicht ;(
<?php
$maintitle = "Was auch immer der tatsächliche Wert von Maintitle ist";
$demotitle = "Irgendwas halt";
$badtitle = "Ein Männlein steht im Walde.";
parse_str(strtolower($QUERY_STRING),$qs);
eval("\$seltitle = \"$qs[seltitle]\";\n");
?>
Und beim Aufruf des PHP Skriptes ergibt sich folgendes nach Ausführen von den Zeilen als Inhalt der nun existierenden PHP Variable $seltitle:
index.php?seltitle=$maintitle
$seltitle -> Was auch immer der tatsächliche Wert von Maintitle ist
index.php?seltitle=$demotitle
$seltitle -> Irgendwas halt
index.php?seltitle=$badtitle
$seltitle -> Ein Männlein steht im Walde.
OK. Soweit habe ich das alles verstanden. Aber ich meine, dass $maintitle definiert ist. Der Besucher laesst die Seite ja erst einmal laden, dabei wird $maintitle wiederhohlt definiert. Erst dann wird der Besucher auf einen Hyperlink klicken koennen, was bewirkt, dass $seltitle=$maintitle bewirkt wird. Doch leider gibt mein Debugger noch immer an, dass seltitle ein undefinierter Index sei. Danach fiel mir auf, dass seltitle zwar per $QUERY_STRING abgefangen wird, alles klein geschrieben wird (wozu? Ich benoetige die gross/kleinschreibung). Anschlissend wird alles in einem Array Namens qs gespeichert. Auf der naechsten Zeile wird das Array zwar ausgelesen und in PHP-Code gewandelt, allerdings verlangst du hier nach einem Key namens seltitle, der gar nicht existiert. Wenn ich diesen Key aus der Abfrage entferne, entfaellt auch die Fehlermeldung. Ich denke, dass das einmal ein Ansatz ist, oder habe ich jetzt etwas wichtiges entfernt?
Felix Kaiser
28.02.2002, 22:44
Wegen Groß/Kleinschreibung kannst ja halt das strtolower() rausmachen. Die Fehlermeldung von deinem Debugger ist mir nicht ganz klar. $qs[seltitle] hat einen Wert, sobald im Aufruf der URL ?seltitle= deklariert ist. Und eval() setzt die Variable $seltitle. Kannste nochmal die neuste Version mit allen Änderungen online stellen als ZIP, damit ich mir das nochmal anschauen kann? Das muss einfach zu lösen gehn! X(
Dominic Suter
28.02.2002, 22:52
Klar, werde ich machen, wird allerdings wieder erst morgen gehen. Ich habe jetzt allerdings noch folgendes raus bekommen:
parse_str(strtolower($QUERY_STRING),$qs);
eval("\$seltitle = \"$qs\";\n");
echo ("Seltitle lautet: $seltitle \n");
echo ("Querry_String lauted: $QUERY_STRING \n");
Gibt folgende Ausgabe:
Seltitle lautet: Array
Query_String lautet:
Das heisst doch, dass $seltitle ein Array ist, oder nicht (Array vor Query_String ist nicht von mir, bzw. der Variabelwert von $seltitle)?
Liegt das an der PHP 4.1.1 Version, die ja so eine Schutzfunktion fuer die Get und Post Variabeln besitzt?
Wo kann man diese in der php.ini aktivieren oder deaktivieren? (Nicht, dass es daran liegt...)
Ok. Habe nun noch folgende Situation ausprobiert:
parse_str(strtolower($QUERY_STRING),$qs);
eval("\$seltitle = \"$qs[seltitle]\";\n");
echo ("Seltitle lautet: $seltitle \n");
echo ("Query_String lautet: $QUERY_STRING \n");
Nun sieht die Browserausgabe so aus:
Seltitle lautet:
Querry_String lautet:
Daher denke ich, dass die Fehlermeldung vom Debugger gerechtfertigt ist und er seltitle als undefined index bezeichnet.
Felix Kaiser
28.02.2002, 22:57
Ich hatte mal gehört dass $QUERY_STRING normalerweise mit PHP 4.1.1 nicht mehr gehen sollte, aber als ich von 4.0.6 auf 4.1.1 upgraded hatte (PHP.INI beibehalten) hatte sich nichts geändert. $QUERY_STRING war ja nun leer, wie haste das PHP Skript genau aufgerufen mit URL + Parameter? Vielleicht haben wir ja da den Fehler. Soll ich dir vielleicht bei Gelegenheit mal meine PHP.INI schicken?
Und weder $seltitle noch $QUERY_STRING sind ein Array, einfach nur Zeichenketten. Jedoch wird aus $QUERY_STRING ein Array durch den Parse Befehl, nach dem Prinzip:
URL: http://localhost/example.php?param1=value1¶m2=value2
Durch den Parse-Befehl ist $qs im Beispiel so zu gebrauchen:
echo "Param1 = $qs[param1]\n";
echo "Param2 = $qs[param2]\n";
Ausgabe:
Param1 = value1
Param2 = value2
Dominic Suter
28.02.2002, 23:16
Ja, der Aufruf geschieht mittels URL+Parameter. Deine php.ini wuerde mich durchwegs interessieren.
In der neuen PHP Version werden die Get und Post-Variabeln als Array suebergeben, damit eine groessere Sicherheit gegen externe Manipulation erreicht werden kann.
Auszug aus "Internet Proffesionell"
... Das neue Uebergabe-Verfahren besteht aus einem Satz von speziellen Arrays. Je nach Art der Datenuebergabe erhaelt das entsprechende Array die Daten. Die Arrays sind
$_GET
$_POST
$_COOKIE
$_SERVER
$_ENV
$_REQUEST
$_SESSION
Fuer den Programmierer bedeuted das:
Eine uebergebene Variable steht nicht sofort global zur Verfuegung. Um die Variable ins Programm zu uebernehmen, muss man sie aus dem Array fischen. Allein dieser Schritt bringt viel Sicherheit, denn der Programmierer muss bestimmen, woher das Programm die Variabeln nimmt und wo Ihr Inhalt schliesslich landet. Ein Beispiel:
$my_hallo = $_POST["hallo"];
echo $my_hallo;
Hier wird die Variable nur angenommen und my_hallo zugewiesen, wenn hallo aus einem POST-Formular kommt. ...
In diesem Bericht wird auch erwaehnt, wie man diese Sicherheitsfunktion deaktivieren kann. Ich werde dies mal machen und es dann noch einmal probieren.
Werde das allerdings erst morgen machen, muss wieder frueh raus...
hi ihr 2 .. leider hab ich in der firma zuviel zu tun als um mich um das prob grad zu kümmern...
im zweifel hilft eigentlich immer ein variablen-dump ...
schau dir den output an und überprüfe daran, wo dein fehler liegt..
var_dump($variable); ist in dem fall dein freund :D
Felix Kaiser
01.03.2002, 00:11
Genau, versuchs mal mit $_GET[seltitle] oder $_POST[seltitle], als Ersatz fürs parsen / $qs. Der Rest mit eval() müsste trotzdem funktionieren.
Dominic Suter
01.03.2002, 07:26
OK. Ich werde heute Abend diesen beiden Vorschlägen nachgehen. Habe inzwischen in diesem Beitrag auch die Variable der php.ini gefunden, die deaktiviert sein müsste damit ich $Query_String verwenden könnte. Ich werde aber erst einmal euren Vorschlägen nachgehen und anschliessend, falls noch immer erfolglos, nochmals Posten, bzw. das File nochmals online stellen.
Felix Kaiser
01.03.2002, 13:29
Einfacher wäre es wenn du $QUERY_STRING aktivierst, denn nahezu ausnahmslos alle Provider haben aus Kompatiblitätsgründen das Teil aktiviert. Viele stellen sogar noch .GIF Support in PHP zur Verfügung, anstatt .PNG Support.
Dominic Suter
01.03.2002, 13:38
Ich werde erst einmal probieren, die Variable aus dem Array zu fischen. Wenn ich das hinkriege ist ja alles wunderbar. Falls es nicht hin haut, werde ich $QUERY_STRING aktivieren und es dann so lange probieren, bis es sicher geht. :P
Dominic Suter
03.03.2002, 16:33
Jawohl, wir haben es geschafft! Ich habe es fertig gebracht, seltitle aus dem Array zu fischen. War eigentlich ganz einfach. Wenn ich nur von Anfang an daran gedacht haette, dass ich in der PHP-4.1.1 diese sichere Uebergabe habe...
$theseltitle = $_GET["seltitle"];
Anschliessend konnte ich theseltitle verwenden. Ich habe uebrigens diese (sichere) Version verwendet, weil mein debugger darauf besteht...
Felix Kaiser
03.03.2002, 18:01
Herzlichen Glückwunsch :D
Ich weiss auch nicht ob ich das Problem so richtig verstanden habe. Aber soweit meine Augen das erkennen läuft das skript eigentlich ganz gut (wenn man so wie ich in diesem beispiel nur die navigation.php ausführt)...
Angucken kann man das sich unter http://www.slind.de/problem/ ...
Wenn Du, Stoenggi, uns jetzt zeigen könntest was dort genau anders laufen soll, dann haben wir es bestimmt einfacher =)
Gruß
-SLind
http://www.kiffen.li
Dominic Suter
04.03.2002, 07:32
@SLind
Vielen Dank für deine Hilfsbereitschaft. Doch das Problem hat sich bereits erledigt. Es lag daran, dass wir alle die Parameterübergabe mit $QUERY_STRING abfangen wollten. Ich habe allerdings eine neue PHP Version (4.1.1) bei der das aus Sicherheitsgründen (per default) nicht mehr geht. Daher muss ich erst die Variable aus dem Übergabe-Array fischen (weiter oben dokumentiert).
Was ich noch zusätzlich einbaute war ein rawurldencode bevor ich die Variabeln aufrief bzw. ein rawurldecode nach dem Auslesen aus dem Array, damit ich sicher immer die selben Variabeln habe.
muss man denn überhaupt irgendwelche Variablen irgendwo rausfischen? Im normalfall doch nicht, oder?
Dominic Suter
04.03.2002, 18:18
Nun, das ist von der PHP Version abhaengig. Bis Version 4.1 war das nicht notwendig. Mit der Version 4.1.x werden nun die Uebergaben in globale Arrays gemacht (ich habe sie oben gepostet).
Das heisst, dass man "normalerweise" die Werte nicht aus dem Array fischen muss. Man kann das aber bei den Versionen ab 4.1 auch ausschalten, indem man in der php.ini den Wert register_globals auf on stellt. Dann stehen sie wieder wie gewohtn zur Verfuegung.
Ich wuerde aber davon abraten, weil sonst jeder aussenstehende jede Variable von aussen her definieren kann. Natuerlich muss er dazu die Variable kennen, aber wenn er die Skripte mit einem tool lokal abspeichert, hat er diese schnell... ;(
achso...also als sicherheits future das er eine var wie "$ich_bin_admin = 1 setzen kann...
supi, dank dia =)
Dominic Suter
05.03.2002, 07:33
Genau das.
Hey, wenn ich helfen konnte, freut mich das, von daher gar kein Probelm! :D
das prob was ihr meint hat was mit der art der variablen gültigkeit zu tun ... also ob ich globale variablen akzeptiere oder nicht...
wer das errata auf php.net gelesen hat würde sich die frage nicht stellen..
grundsätzlich werden in allen NEUEN php versionen (>=4.1.x) neue variablen eingeführt (array mit _ und dann der herkunft der variable ... also SESSION, oder POST ..etc)
wenn man jedoch in der php.ini die globale verwendung von variablen zulässt (stichwort register globals ..)
dann kann man weiterproggen wie man es gewohnt ist ...
ist aber nicht im sinne des erfinders :-)
bye
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.