WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 18.07.2006 17:28:17 von Phil Kaltner
Hallo,
ich versuche, eine kleine DB mittels WAMPP ins Netz zu stellen.
Bisher habe ich die Daten mittels CGI (xx.html?a="b")
übergeben, register_globals ist wg. sicherer Umgebung on.
Nun muß ich SQL-Statements zwischen Funktionen herumschieben, etwa bei
einer Datenänderung. Die lassen sich mit " und ; nicht sauber übertragen.
Ich versuche, eine Tabelle (Inhalt identifiziert mittels SQL-Staement)
nach Spalten zu sortieren, die Links sind die kleinen Dreiecke in den
Spaltenüberschriften. Für Buttons ist da klein Platz.
Toll wäre Folgendes: Erst bei Klick auf einen Link zu a.html werden
Daten in eine Datei a.txt geschrieben und dann wird zu xx.html?f=a.txt
verlinkt.
Wie kann man das lösen?
Danke,
Phil
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 18.07.2006 18:13:50 von Phil Kaltner
Ähem... Sesam öffnet scheinbar mit Sessions...
Dank,
Phil
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 18.07.2006 18:30:49 von Phil Kaltner
Hi nochmal,
die Sessions helfen beim Transport der Variableninahlte, aber nicht bei
der Belegung der Variablen: Wie kann ich erreichen, daß erst bei einem
Klick eine Variable gesetzt oder eine Datei angelegt wird?
Danke,
Phil
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 18.07.2006 19:18:19 von Matthias Esken
On Tue, 18 Jul 2006 17:28:17 +0200, Phil Kaltner wrote:
> Bisher habe ich die Daten mittels CGI (xx.html?a="b")
> übergeben, register_globals ist wg. sicherer Umgebung on.
Das ist kein Grund. Was machst du, wenn PHP 6 kommt das register_globals
nicht mehr unterstützen wird?
> Nun muß ich SQL-Statements zwischen Funktionen herumschieben, etwa bei
> einer Datenänderung. Die lassen sich mit " und ; nicht sauber übertragen.
Doch, eigentlich schon.
> Ich versuche, eine Tabelle (Inhalt identifiziert mittels SQL-Staement)
> nach Spalten zu sortieren, die Links sind die kleinen Dreiecke in den
> Spaltenüberschriften. Für Buttons ist da klein Platz.
>
> Toll wäre Folgendes: Erst bei Klick auf einen Link zu a.html werden
> Daten in eine Datei a.txt geschrieben und dann wird zu xx.html?f=a.txt
> verlinkt.
Der Grund für die Zwischendatei will sich mir nicht so recht erschließen.
Warum verwendest du nicht einfach ein passendes "ORDER BY"?
Wenn du es aber tatsächlich so haben willst, dann solltest du als erstes
mal zusehen, dass Dateien mit der Endung "html" als PHP-Skripte geparst
werden. Dann brauchst du in "a.html" nur noch die gewünschte Datei
erstellen und kannst dann mittel header() auf "xx.html?f=a.txt"
weiterleiten.
Gruß,
Matthias
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 19.07.2006 19:48:20 von Phil Kaltner
Hi Matthias,
>> Bisher habe ich die Daten mittels CGI (xx.html?a="b")
>> übergeben, register_globals ist wg. sicherer Umgebung on.
>
> Das ist kein Grund. Was machst du, wenn PHP 6 kommt das register_globals
> nicht mehr unterstützen wird?
Keine Ahnung. Ich versuche ja bereits, meine Funktionen über Dateien
kommunizieren zu lassen - wie ist die "offizielle" Alternative?
Sessions? Session-Variablen lassen sich aber nicht per Link ändern!
Was ist denn ab PHP 6 dafür vorgesehen?
>> Nun muß ich SQL-Statements zwischen Funktionen herumschieben, etwa bei
>> einer Datenänderung. Die lassen sich mit " und ; nicht sauber übertragen.
>
> Doch, eigentlich schon.
Du hast recht, ich meinte den Stern *. Genau genommen liegt der Fehler
aber woanders. Wenn ich Code erzeuge wie
dann werten mein Mozilla und Opera das nicht als vollen Link, sie
verlinken nur auf
xy.php?sql="SELECT
was aber fehlschlägt.
> Der Grund für die Zwischendatei will sich mir nicht so recht erschließen.
> Warum verwendest du nicht einfach ein passendes "ORDER BY"?
Das versuche ich ja: Ich schaffe es nicht, daß ein Link-Klick eine
PHP-Variable verändert. Der Link kann auch eine JavaScript-Funktion
aktivieren, die dann das SQL-Statement erzeugt - das kann ich aber
wieder nur per CGI übergeben.
Danke,
Phil
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 19.07.2006 20:08:11 von Norbert Melzer
Phil Kaltner schrieb:
> Hi Matthias,
>
>
>
>>> Bisher habe ich die Daten mittels CGI (xx.html?a=3D"b")
>>> übergeben, register_globals ist wg. sicherer Umgebung on.
Du meinst per GET?
>> Das ist kein Grund. Was machst du, wenn PHP 6 kommt das register_globals
>> nicht mehr unterstützen wird?
>
> Keine Ahnung. Ich versuche ja bereits, meine Funktionen über Dateien
> kommunizieren zu lassen - wie ist die "offizielle" Alternative?
> Sessions? Session-Variablen lassen sich aber nicht per Link ändern!
Dann bleib bei GET, und spreche sie als $_GET[a] an, der Inhalt davon
ist in dem von Dir genannten Beispiel "b".
> Was ist denn ab PHP 6 dafür vorgesehen?
GPS! ($_GET, $_POST, $_SESSION) Diese 3 Arrays. Funztz genau wie
reg_glob nur halt als Index des entsprechenden Hashes. Führt dann auch
nicht mehr zu den Problemen die sonst ein per GET übergebener Parameter
"Hans=3DWurst" und ein anderer in der Session abgelegten "Hans=3DKäse"
bereiten könnten, denn bei reg_glob kannste beide per $Hans ansprechen,
ob nun Session oder Get gewinnt wird in der php.ini festgelegt und ist
auf Fremdsystemen warscheinlich von Dir nicht steuerbar!
HTH
Norbert
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 19.07.2006 21:06:27 von Matthias Esken
On Wed, 19 Jul 2006 19:48:20 +0200, Phil Kaltner wrote:
> Was ist denn ab PHP 6 dafür vorgesehen?
Das gleiche was schon seit Dezember 2001 dafür vorgesehen ist: $_GET.
Lies mal http://www.php.net/manual/de/language.variables.predefined.p hp,
insbesondere den Abschnitt über die Superglobals.
> Du hast recht, ich meinte den Stern *. Genau genommen liegt der Fehler
> aber woanders. Wenn ich Code erzeuge wie
>
> dann werten mein Mozilla und Opera das nicht als vollen Link, sie
> verlinken nur auf
> xy.php?sql="SELECT
> was aber fehlschlägt.
Kein Wunder. Das ist ungültiges HTML und ein Browser der das so
interpretiert wie du meinst dass es interpretiert werden sollte gehört
eigentlich geteert und gefedert. Fangen wir mal beim "&" an. Das ist der
Trenner zwischen den Parametern und muss als "&" maskiert werden.
Schritt 1:
Dann sind natürlich die Anführungsstriche völlig verkehrt, da diese den
kompletten Wert des href-Attributs umschließen müssen.
Schritt 2:
Da im Wert gewisse Sonderzeichen und Leerzeiche nicht enthalten sein
dürfen, müssen diese auch noch passend maskiert werden. Die Funktion
urlencode (http://de2.php.net/manual/de/function.urlencode.php) leistet da
passende Dienste.
Schritt 3:
$param = urlencode('SELECT * FROM tab ORDER BY feld;');
echo '';
Anmerkungen:
1. Das Semikolon am Ende des SQL-Statements musst du natürlich vor der
Ausführung im Zielskript wieder herausfiltern. Das gehört da nicht hin
und mir ist auch nicht wirklich klar, warum du das erst anhängst.
2. Diese Art der Programmierung ist SQL-Injection for Dummies. Mit so einer
Art der Parameterübergabe kann man auf der Datenbank alles tun.
>> Der Grund für die Zwischendatei will sich mir nicht so recht erschließen.
>> Warum verwendest du nicht einfach ein passendes "ORDER BY"?
>
> Das versuche ich ja: Ich schaffe es nicht, daß ein Link-Klick eine
> PHP-Variable verändert.
Bei deinem Beispiel brauchst du am Anfang der Zieldatei doch nur
$_GET['sql'] auszuwerten um das übergebene Statement zu bekommen. Oder
verstehe ich hier irgendetwas nicht? Wahrscheinlich denkst du nur zu
kompliziert (oder vielleicht auch zu simpel).
Gruß,
Matthias
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 20.07.2006 22:37:09 von Irmgard Schwenteck
Hallo
Phil Kaltner schrieb:
> Du hast recht, ich meinte den Stern *. Genau genommen liegt der Fehler
> aber woanders. Wenn ich Code erzeuge wie
>
> dann werten mein Mozilla und Opera das nicht als vollen Link, sie
> verlinken nur auf
> xy.php?sql="SELECT
> was aber fehlschlägt.
>> Der Grund für die Zwischendatei will sich mir nicht so recht erschließen.
>> Warum verwendest du nicht einfach ein passendes "ORDER BY"?
>
> Das versuche ich ja: Ich schaffe es nicht, daß ein Link-Klick eine
> PHP-Variable verändert. Der Link kann auch eine JavaScript-Funktion
> aktivieren, die dann das SQL-Statement erzeugt - das kann ich aber
> wieder nur per CGI übergeben.
Versteh ich das richtig - Du hast eine Tabelle und willst die wahlweise
nach verschiedenen Spalten sortieren lassen?
Das script ruft sich immer wieder selber auf.
Der SQL-Befehl steht drin und nur die Sortierung wird wahlweise angehängt:
$sql="select dies, das, ... from table";
if (!isset($_REQUEST['order']) || $_REQUEST['order']=="dies") {
$order=" dies";
}
elseif ($_REQUEST['order']=="das") {
$order=" das";
}
usw.
$sql.=" order by ".$order;
Sortieren über links in den Spaltenüberschriften:
|
|
Gruß
Irmgard
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 21.07.2006 14:23:01 von Phil Kaltner
Hallo,
danke für die Antworten, auch wenn sie mich veranlassen, mein Projekt
umzustrukturieren. :)
Norbert: Ja, $_GET ist gut - mit GPS habe ich aber noch Probleme, s.
Beispiel unten.
Matthias: \"Argh!\", die Anführungszeichen...
Das Beispiel von Irmgard habe ich etwas ausgebaut in zwei Varianten.
1) Ich vermute, daß die erste Variante (...?order=xy) weniger
Flexibilität bringt als die Variante zwei (...?sql=...).
Ist da sonst noch was zu beachten?
2) Die Sessions sind so eine Sache...
Wenn ich die Datei zum ersten Mal lade, ist die dritte Ausgabe ($sql2)
leer, obwohl vorher schon ein $_SESSION['sql2'] existiert. Das $sql2
wird erst sichtbar nach einem Browser-Reload.
Das macht doch keinen Sinn. Wieso ist das so?
Danke,
Phil
================================================
// Inhalt von test_session2.php
session_start();
echo "
Test";
echo "\n";
echo "\n
Unsere Session ".session_id();
echo "\n
"; // =============================================
if (!isset($_SESSION['sql1']))
{
$_SESSION['sql1'] = "SELECT * FROM tab";
}
$sql_order = $_SESSION['sql1'];
if ($_REQUEST['order']!="")
{
$sql_order .= " ORDER BY ".$_REQUEST['order'];
}
echo "\n
";
echo "\n
";
echo "\n
";
echo "\n
Wir haben sql_order = ".$sql_order;
echo "\n
"; // =============================================
if (!isset($_SESSION['sql2']))
{
$_SESSION['sql2'] = "SELECT * FROM tab";
}
if ($_REQUEST['sql2']!="")
{
$_SESSION['sql2'] = $_REQUEST['sql2'];
}
echo "\n
echo "sql2=SELECT * FROM tab ORDER BY dies\">V2: dies";
echo "\n
echo "sql2=SELECT * FROM tab ORDER BY das\">V2: das";
echo "\n
echo "sql2=SELECT * FROM tab\">V2: nix";
echo "\n
Wir haben sql = ".$_SESSION['sql2'];
echo "\n
"; // =============================================
echo "\n
Wir haben sql = ".$sql2;
echo "";
?>
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 21.07.2006 14:46:12 von Norbert Melzer
Phil Kaltner schrieb:
> 2) Die Sessions sind so eine Sache...
> Wenn ich die Datei zum ersten Mal lade, ist die dritte Ausgabe ($sql2)
> leer, obwohl vorher schon ein $_SESSION['sql2'] existiert. Das $sql2
> wird erst sichtbar nach einem Browser-Reload.
> Das macht doch keinen Sinn. Wieso ist das so?
Du weißt $sql2 nirgends einen Wert zu... Ich denke Du willst jetzt ohne
register globals auskommen?
Ausserdem, die dritte Ausgabe ist für mich
echo "\n
Da steht nicht mal was von $sql2 drin. Markiere in einem solchen Fall
doch bitte die entsprechende Zeile im geposteten Quelltext mit einem
Kommentar:
echo "\n
Wir haben sql =3D ".$sql2;
// ^Hier erhalte ich erst nach einem Reload eine Ausgabe
Und wenn Du schon unbedingt SQL-Statements von einer Seite zur nächsten
bringen willst, dann NUR (Doppelt unterstrichen, Dreimal Fett und in Rot
mit Ausrufezeichen umschlossen) über Sessions. Keine Cookies, keine
Posts, keine Gets (die noch am wenigsten). Denn alle drei sind vom
Surfer manipulierbar, und wenn dann jemand einfach mal den Spaß macht
und folgendes macht:
(Pseudo)
sql2=3D"SELECT user,passwd FROM authtable"
Dann hast DU ein Problem! Wenn Du jetzt fragen möchtest warum, dann
solltest Du die Finger von einer HP lassen bis es Dir klar wird.
HTH
Norbert
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 21.07.2006 16:04:04 von Phil Kaltner
Hi Norbert,
danke für Deine Mail - jetzt ist reg_glob aus alles klar!
Phil
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 21.07.2006 16:48:53 von Phil Kaltner
Hi Norbert,
die Sessions funktionieren nun gut, aber wie ich geeaed feststelle, habe
ich mich zu früh gefreut:
> Und wenn Du schon unbedingt SQL-Statements von einer Seite zur nächsten
> bringen willst, dann NUR [...] über Sessions.
Wie kann ich sonst Daten vom Client an den Server senden?
Wenn das über Sessions laufen soll, dann müßte ich ja im Voraus bei der
Seitengenerierung alle möglichen SQL-Queries wegspeicherun und
duchrnummerieren, so daß ich nicht mehr ?sql=SELECT... sondern
ein $sql_id=7 übergeben.
Das kann doch nicht sein, oder?
Danke,
Phil
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 21.07.2006 20:05:34 von Norbert Melzer
Phil Kaltner schrieb:
> Wenn das über Sessions laufen soll, dann müßte ich ja im Voraus bei der
> Seitengenerierung alle möglichen SQL-Queries wegspeicherun und
> duchrnummerieren, so daß ich nicht mehr ?sql=3DSELECT... sondern
> ein $sql_id=3D7 übergeben.
Ich sehe überhaupt keine Nötigkeit das so zu machen wie Du das planst...
Bei mir ist es grundsätzlich so, das ich immer eine action übertrage und
dazu verschiedene Zusatzparameter, daraus generiert mir dann ein Script
die SQL Statements, zB:
action=3Dusers :
SELECT name FROM users
action=3Dusers, p1=3Dlogged_in
SELECT name FROM users WHERE login=3D1
usw
Das ganze geht noch wesentlich komplexer. Und mal ganz ehrlich, ob Du
jetzt "alle möglichen SQL-Queries" wegspeicherst und sie über einen
Index aufrufst oder quer in Deinen Sourcen verteilst, sie dem Client
schickst, sie manipulieren lässt und dann wieder zurückempfängst, was
ist Dir dann lieber?
Und was noch dabei ist, wenn man die Queries vernünftig "wegspeichert"
sind sie sogar zentral gelagert und man kann sie von einer Stelle aus
editieren und muss nicht 2,5 Mio Files nach der richtigen Code Zeile
durchpflügen, ändert aber nix an der Sache, daß dafür keine Nötigkeit
sehe die Queries fix vorzugeben, sondern würde sie wie bereits gesagt je
nachdem wie sie gebraucht werden "zur Laufzeit" erzeugen.
HTH
Norbert
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 22.07.2006 00:34:17 von Matthias Esken
On Fri, 21 Jul 2006 16:48:53 +0200, Phil Kaltner wrote:
> Wenn das über Sessions laufen soll, dann müßte ich ja im Voraus bei der
> Seitengenerierung alle möglichen SQL-Queries wegspeicherun und
> duchrnummerieren, so daß ich nicht mehr ?sql=SELECT... sondern
> ein $sql_id=7 übergeben.
>
> Das kann doch nicht sein, oder?
Wahrlich nicht. Du hast anscheinend einfach eine völlig falsche Vorstellung
davon, was Sessions sind. Lies mal in der FAQ folgendes
29.12. Was sind Sessions und warum sind sie nützlich?
http://www.php-faq.de/q/q-sessions-zweck.html
und vielleicht noch einige weitere der Kapitel über Sessions.
Ganz grob gesagt, könntest du bei einem Aufruf Daten in die Session
schreiben
$_SESSION['sql'] = 'SELECT blablabla ...';
und dann beim Aufruf einer neuen Webseite wieder auf die gespeicherten
Daten zugreifen
echo $_SESSION['sql'];
Gruß,
Matthias
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 22.07.2006 13:20:40 von Phil Kaltner
Hi Norbert,
> Bei mir ist es grundsätzlich so, das ich immer eine action übertrage und
> dazu verschiedene Zusatzparameter, daraus generiert mir dann ein Script
> die SQL Statements
Das ist genau der Punkt: Wie überträgst Du die denn?
Im Bsp. von vorhin was Links wie:
Wie kann ich das denn per Session übertragen? Ich möchte ja Daten vom
Client (User sucht sich per Klick im Browser das auf der Folgeseite
auszuführende $sql aus) zum Server senden, da bleibt ja nur das böse
GET, oder?
> Und was noch dabei ist, wenn man die Queries vernünftig "wegspeichert"
> sind sie sogar zentral gelagert und man kann sie von einer Stelle aus
> editieren und muss nicht 2,5 Mio Files nach der richtigen Code Zeile
> durchpflügen, ändert aber nix an der Sache, daß dafür keine Nötigkeit
> sehe die Queries fix vorzugeben, sondern würde sie wie bereits gesagt je
> nachdem wie sie gebraucht werden "zur Laufzeit" erzeugen.
Dann muß ich sie per GET übergeben und der Code wird unsicher. Aus einer
Liste von gültigen Queries wählen lassen ist kein Sicherheitsloch.
Nicht, daß ich diese Variante toll finde, aber ich bin mir noch nicht
sicher, ob angepriesenen Sessions mir mein GET vollständig ersetzen.
Danke,
Phil
Re: WAMPP: Kommunikation von PHP-Funktionen in mehreren HTML-Dateien
am 23.07.2006 02:42:11 von Norbert Melzer
Phil Kaltner schrieb:
> Hi Norbert,
>
>
>> Bei mir ist es grundsätzlich so, das ich immer eine action übertrage und
>> dazu verschiedene Zusatzparameter, daraus generiert mir dann ein Script
>> die SQL Statements
>
> Das ist genau der Punkt: Wie überträgst Du die denn?
Abhängig von der Situation als Get oder Post.
> Im Bsp. von vorhin was Links wie:
>
>
> Wie kann ich das denn per Session übertragen? Ich möchte ja Daten vom
> Client (User sucht sich per Klick im Browser das auf der Folgeseite
> auszuführende $sql aus) zum Server senden, da bleibt ja nur das böse
> GET, oder
Nicht Get ist böse, sondern das was Du damit vorhast. Man überträgt
keine Querys, keine PHP-Commandos die dann durch eval gehen oder
ähnliches! Aus Schluss vorbei, Quasi EOD (in diesem Punkt)
>> Und was noch dabei ist, wenn man die Queries vernünftig "wegspeichert"
>> sind sie sogar zentral gelagert und man kann sie von einer Stelle aus
>> editieren und muss nicht 2,5 Mio Files nach der richtigen Code Zeile
>> durchpflügen, ändert aber nix an der Sache, daß dafür keine Nötigkeit
>> sehe die Queries fix vorzugeben, sondern würde sie wie bereits gesagt je
>> nachdem wie sie gebraucht werden "zur Laufzeit" erzeugen.
>
> Dann muß ich sie per GET übergeben und der Code wird unsicher. Aus einer
> Liste von gültigen Queries wählen lassen ist kein Sicherheitsloch.
> Nicht, daß ich diese Variante toll finde, aber ich bin mir noch nicht
> sicher, ob angepriesenen Sessions mir mein GET vollständig ersetzen.
Nicht ersetzen, ergänzen!
> Danke,
> Phil