PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Seite ausführen ohne diese zu öffnen?


Fullover
2003-06-12, 21:20:25
Hi,

ich soll mal für einen Freund folgendes fragen:

"ich würde gerne eine seite ausführen, ohne diese seite zu öffnen.
der php-code dieser bestimmten seite soll ausgeführt werden, ohne dass der benutzer sieht dass dies passiert."

Plz helfen! :)

MfG Fullover

Aqualon
2003-06-12, 21:45:01
Du kannst in eine PHP-Datei eine andere mit Hilfe von include einbinden.

Angenommen du hast ne Datei file1.php, die angezeigt werden soll, aber gleichzeitig soll file2.php abgearbeitet werden, das nichts ausgibt, kannst du das folgendermaßen machen:


<?php
...
include 'file2.php';
...
?>


alternativ kannst du auch eine Klasse in einer Datei erstellen und diese aus einer anderen aufrufen.

Klassen-Datei (class.testklasse.php):


<?php

class Testklasse
{
function get_Test()
{...
return $test //Rückgabe der Variable $test
}
}

?>


Diese kannst du dann folgendermaßen in der aufzurufenden Datei nutzen:


<?php
include 'class.testklasse.php';

$o_testklasse = new Testklasse
//hier wird ein Objekt der Klasse "Testklasse" erstellt.

$test=$o_testklasse->get_Test();
//das ist der Aufruf der Funktion get_Test(),
der Rückgabewert wird in die Variable $test geschrieben.
?>


Aqua

Fullover
2003-06-12, 21:49:57
Thx, er wirds mal ausprobieren.

Fullover
2003-06-12, 21:54:59
Er hat jetzt ein Prob:

"unter anderem muss ich dieser seite variablen übergeben. Und das ist in einem include nicht möglich:
include('seite.php?id=299'); ???"

Aqualon
2003-06-12, 22:00:46
Original geschrieben von Fullover
Er hat jetzt ein Prob:

"unter anderem muss ich dieser seite variablen übergeben. Und das ist in einem include nicht möglich:
iclude('seite.php?id=299'); ???"

2 Möglichkeiten:

1. Du kannst die Variablen, die übergeben werden sollen vor dem include definieren, also in dem Fall $id=299;

Wenn auf der Seite allerdings überprüft wird, ob id eine $_GET[] Variable ist, also in der URL übergeben worden ist, geht das nicht

Edit: geht doch mit $_GET['id']=299;

2. Wenn von dieser Seite nichts zurückkommen soll, kannst du sie auch mit fopen öffnen:

fopen ("seite.php?id=299","r");
// "r" für lesenden Zugriff

Aqua

JTHawK
2003-06-12, 23:57:17
wozu übergeben ?

variablen die in einer php datei erstellt werden sind auch für den code der includet wird verfügbar ...

übergeben werden muss da nix

oder verstehe ich die frage falsch ?

Aqualon
2003-06-13, 09:21:31
Original geschrieben von JTHawK
wozu übergeben ?

variablen die in einer php datei erstellt werden sind auch für den code der includet wird verfügbar ...

übergeben werden muss da nix

oder verstehe ich die frage falsch ?

Schon, aber mit register_globals = Off in der php.ini können übergebene Variablen nicht mehr direkt verwendet werden, d.h. die id aus der URL muss mit $id=$_GET['id']; benutzt werden.

Wenn ich dann vor der include z.B. $id="5"; definiere, wird diese Variable dann wieder in der eingebundenen PHP-Datei überschrieben mit $_GET['id']. Da diese aber in dem Fall leer ist, hat $id danach auch keinen zugewiesenen Wert mehr.

Aqua

JTHawK
2003-06-13, 09:57:04
stimmt ... aber das erste was ein server admin mach .. register globals wieder auf 1 :D

okok .. is ne potentielle sicherheitslücke .. aber verdammt viele haben ihre php sites auf diese art und weise am laufen .. und zu verlangen das diese alle ihren code ändern müssen is ja wohl net drin ...

Aqualon
2003-06-13, 10:16:35
Original geschrieben von JTHawK
stimmt ... aber das erste was ein server admin mach .. register globals wieder auf 1 :D


Ich schreibe meine Skripte so, dass sie mit register_globals auf Off funktionieren und dann hab ich auch keine Probleme damit *g*

Aber wär bestimmt lustig, wenn 1&1 oder Strato bei ihren Servern register_globals ausschalten würden. Vor der Flut von Supportanfragen könnten die sich nicht retten ;D

Aqua

Matthias2x
2003-06-13, 11:26:04
Original geschrieben von Aqualon
2 Möglichkeiten:
...
2. Wenn von dieser Seite nichts zurückkommen soll, kannst du sie auch mit fopen öffnen:

fopen ("seite.php?id=299","r");
// "r" für lesenden Zugriff

Aqua

wenn du fopen() verwendest wird aber auch kein Code im betreffenden File ausgeführt, es wird einfach nur Zeile für Zeile eingelesen, mehr nicht...

Zum Thema register_globals, ich bin nach wie vor sehr dankbar das 1und1 die Einstellung auf On belassen hat. Meine alten Scripte würden sonst komplett den Dienst versagen. Allerdings schreibe ich neue Scripte nur noch mit $_GET,$_POST etc. denn irgendwann werden auch die großen Hoster auf Off stellen, is ja nur ein wenig mehr Tipparbeit... :D

Aqualon
2003-06-13, 11:43:47
Original geschrieben von Matthias2x
wenn du fopen() verwendest wird aber auch kein Code im betreffenden File ausgeführt, es wird einfach nur Zeile für Zeile eingelesen, mehr nicht...

Sicher? Ich fordere doch mit fopen den Webserver an, mir die Datei zu liefern. Und der wird mir dann doch nicht die PHP-Datei liefern, sondern die von dieser erstellte HTML-Datei.

Ansonsten wäre es ja ein leichtes an PHP-Skripts ranzukommen.

Aqua

Matthias2x
2003-06-13, 14:32:52
Original geschrieben von Aqualon
Sicher? Ich fordere doch mit fopen den Webserver an, mir die Datei zu liefern. Und der wird mir dann doch nicht die PHP-Datei liefern, sondern die von dieser erstellte HTML-Datei.

Ansonsten wäre es ja ein leichtes an PHP-Skripts ranzukommen.

Aqua

Ganz sicher...du hast jedoch recht wenn du mittels fopen() eine URL einliest, also z.b. so:

$fd = fopen('http://www.example.de','r');

der Webserver parst dann das File vorher und du bekommst nur den HTML-Output zu sehen. Anders funktioniert das jedoch wenn du auf deinem eignen Server ein File mit PHP öffnest, und so meinte ich das auch oben in meinem ersten Beitrag. Dann wird der komplette Inhalt des Files eingelesen, auch evtl. vorhandene PHP-Routinen. In dem Fall wird das File jedoch nicht vom Webserver oder PHP geparst. d.h. es wird kein Code ausgeführt. Mehr dazu findet sich auch im PHP-Manual unter "fopen"

Aqualon
2003-06-13, 20:22:12
Klar, wenn die Datei nicht auf nem Webserver liegt wird sie bei fopen nicht ausgeführt. Aber wenn ich den Threadsteller richtig verstanden habe, hat er eh keinen direkten Zugriff auf die aufzurufende PHP-Datei.

Aqua

Matthias2x
2003-06-13, 20:37:27
naja vielleicht kann er ja was dazu sagen..?!

Gast
2003-06-15, 00:05:59
Jaja...ich werde meine Frage etwas genauer formulieren:
Es stimmt, ich habe keinen zugriff auf diese PHP-Datei. Um genau zu sein ist es ein Gästebuch (http://www.onlinewebservice6.de/gastbuch.php?id=57473&...), in das ich von außen eintragen will..

Wenn ich es mit einem include versuche, müsste ich davor die nötigen variablen deklarieren..
da Dieses Gästebuch aber zu 90% mit $_GET und $_POST arbeitet, kenne ich nicht die richtigen Variablen-namen, denen die parameter zugewiesen werden.

Mit fopen() hab ich ich es auch schon versucht..das hat aber komischerweise nicht wirklich gefunzt

Gast
2003-06-15, 00:12:45
(die ID des angegebenen GUESTBOOKS ist nur ein beispiel (zufall))

Aqualon
2003-06-15, 00:17:40
Ich könnte dir jetzt zwar erklären, wie du von aussen ohne die Seite etwas eintragen kannst, aber da ich glaube, dass das für nen nicht unbedingt 100%ig legalen Zweck erfolgen soll, lass ich es.

Aqua

Gast
2003-06-15, 00:23:19
aber nein..das ist doch nicht illegal,..pffffff
spammen kann ich auch anders..

es geht mir nur darum, mein wissen zu erweitern ;)

Gast
2003-06-15, 00:37:47
Schreibt mir jetzt keiner mehr? weil ihr denkt ich würde mit dem wissen unsinn machen?

1. habe ich nicht vor irgendetwas "nicht legales" zu tun

und
2.werde ich es früher oder später sowieso erfahren

ich habe schon viele sachen programmiert..aber es war nie etwas dabei, was anderen schaden könnte..

Aqualon
2003-06-15, 00:46:42
Wenn du dein Wissen erweitern willst, dann finde mal raus, wie man durch ein Formular $_POST-Variablen an ein PHP-Skript übergibt.

Aqua

P.S. www.php.net soll da ganz hilfreich sein ;)

Gast
2003-06-23, 18:25:26
Nach einiger Zeit melde ich mich mal wieder

Hey..
wozu gibt es ein so nüzliches Forum, wenn man dann sowieso wieder auf php.net geschickt wird.
Da hab ich mir schon was besseres erwartet.

NEIN: ich habe mich noch nicht mit $_POST auseinandergesetzt
JA: ich würde gerne wissen wie es genau funktioniert

Wenn Aqualon zu komisch is könnte sich ja irgendwer anders finden, um mir zu helfen


danke :)

Aqualon
2003-06-23, 19:08:33
Original geschrieben von Gast
Hey..
wozu gibt es ein so nüzliches Forum, wenn man dann sowieso wieder auf php.net geschickt wird.
Da hab ich mir schon was besseres erwartet.

NEIN: ich habe mich noch nicht mit $_POST auseinandergesetzt
JA: ich würde gerne wissen wie es genau funktioniert

Du sollst ja auch was lernen und nicht nur Skripts anderer abschreiben ;)

Aber um nicht zu komisch rüberzukommen. $_POST Variablen aus einem Formular haben den gleichen Namen wie die Eingabefelder des Formulars.


<form action="datei.php" method="post">
<input type="text" name="eingabe">
<input type="submit" value="Submit">
</form>


Wenn du jetzt in das Eingabefeld etwas eingibst und auf Submit drückst wird eine Variable namens $_POST['eingabe'] an die Datei "datei.php" übergeben.

Reicht das als Erklärung?

Aqua

Gast
2003-06-23, 19:16:51
das weiß ich eh..

das steht jetzt aber in verbindung mit HTML

es soll aber ausschliesslich mit PHP funzen

Aqualon
2003-06-23, 19:23:59
Das Denken kann ich dir auch nicht abnehmen ;)

Aqua

Gast
2003-06-23, 19:37:08
ja...pffffffffffffff

ich hab keine ahnung wie ich nur mit dem befehl
$_POST[]
den dateinamen, den variablennamen und den variableninhalt angeben soll


...?

Aqualon
2003-06-23, 20:06:49
1. Der Dateiname ist die Datei die du includest.
2. Der Variablenname steht als "name" in dem Inputfeld.
3. Nen Wert weisst du mit = zu.

Also $_POST['name']=wert

Name und Wert einfach ersetzen.

Aqua

Gast
2003-06-23, 20:39:06
Und wann/wie wird diese Variable gesendet?

Gast
2003-06-23, 20:41:09
<?php
$_POST['text']="textchen";
?>





da passiert ja (logischerweise) nichts

Aqualon
2003-06-23, 21:05:07
Wenn du in einem Formular etwas einträgst und das abschickst landest es in einer Postvariable. Das Abschicken hast du ja durch das include nicht, also musst du die Postvariable vor der include einfügen.

Und du musst die Variable rausfinden, die gesetzt werden muss, damit die include Datei annimmt, die Postvariable käme von der Eingabe.

Aqua

Gast
2003-06-23, 22:22:17
Wenn ich die original-Variablennamen des scripts kenne..
wozu bräuchte ich denn dann noch $_POST[]?

Aqualon
2003-06-23, 22:49:47
Das brauchst du, wenn es in dem Skript ne Abfrage gibt, wo die Variablen herkommen.

Entweder geht es mit $name oder mit $_POST['name']. Muss halt probieren.

Aqua

Gast
2003-06-24, 20:06:57
könntest du mir bitte ein beispiel geben?

vielleicht kenn ich mich dann besser aus..

Matthias2x
2003-06-24, 21:50:08
Original geschrieben von Gast
Wenn ich die original-Variablennamen des scripts kenne..
wozu bräuchte ich denn dann noch $_POST[]?

Eigentlich ist das ganz einfach. Ob du den Variablennamen direkt verwenden kannst oder die Variable über $_POST['var'] auswerten kannst hängt davon ab ob die PHP-Einstellung "register_globals" in der php.ini auf "on" oder "off" (Standardeinstellung bei PHP ab 4.2.x) steht. Ist der Wert auf off eingestellt, mußt du zwingend $_POST['var'] verwenden, weil $var in dem Falle keinen Wert enthält. Das ist eine reine Sicherheitsvorkehrung. Gleiches gilt z.b. für $_COOKIE['var'] (kann nur von einem Cookie kommen) oder $_GET['var'] für Werte die per HTTP-GET übergeben werden. Du solltest dir mal die PHP-Dokumentation vornehmen, da steht alles ausführlich erläutert. Nehmen wir jetzt mal ein Input-Feld mit dem namen "eingabe":

<form action="formular_auswertung.php" method="POST">
<input type="text" name="eingabe">
<input type="submit" value="Go">
</form>

Steht "register_globals" auf "on", kannst du den Wert des Feldes sowohl über die Variable $eingabe als auch über $_POST['eingabe'] auswerten. Steht "register_globals" auf "off", kannst du den Wert nur über $_POST['eingabe'] auslesen. Wenn hier einer versucht über die URL den Wert von "eingabe" zu manipulieren, z.b. so: formular_auswertung.php?eingabe=blabla dann klappt das nicht, vorausgesetzt formular_auswertung.php verarbeitet den Wert "eingabe" über $_POST['eingabe']. Übrigens gilt das erst für PHP-Versionen ab 4.1.0, mit dieser Version wurden diese vordefinierten Variablen wie $_POST[], $_GET[] etc. eingeführt. Hoffe das war jetzt verständlich.