[PHP] Variablen in andere Datei übergeben

Dabei seit
Okt. 2002
Beiträge
146
Hi Leute,

ich arbeite grade an einem Formular, das die Personialen von Verbandsmitgliedern aufnimmt. Nebenbei gibts noch einen Bilder Upload, der sich in einem separaten Datei befindet und durch Klick aufgerufen wird. Funktioniert soweit auch alles wunderbar, bis auf den Punkt, dass ich den Namen des Bildes in einer Variablen ($pic) speichern will und diese Variable in der anderen Datei verfügbar sein muss, weil die ganzen Angaben nachher in einer Textdatei geschrieben werden (wurde leider so gewünscht :rolleyes: ) und ich alles aufeinmal reinschreiben will.
Ich habe nun verschiedenes versucht: $pic als global, $_FILES, $HTTP_POST_FILES, nur alles funzt net :(

Servereinstellungen:
PHP Version 4.2.3
register_globals on

Hoffe ihr könnt mir helfen, ich selber habe leider noch net soviel Ahnung von PHP bin aber immer stets bemüht :)
 

DerEineDa

Lieutenant
Dabei seit
Juni 2003
Beiträge
999
Du hast wahrscheinlich wesentlich mehr Erfahrung in PHP als ich (bin auch gerade am Lernen), aber trotzdem möchte ich dir sagen, dass "register globals" bei unsauber programmierten Scripts eine große Sicherheitslücke sein kann. Du solltest auf jeden Fall versuchen ohne auszukommen.
 

pcw

Lt. Commander
Dabei seit
Juli 2001
Beiträge
1.658
Wenn du zwei variablen zwischen 2 verschiedenen PHP-Scripten übergeben willst (so hört sich das für mich an), musst du sie schon per Formular/Query-String übertragen und sie dann mit $_POST oder $_GET bzw $_REQUEST abfragen...

Poste mal bitte die Quelltexte, falls ich das jezz falsch verstanden hab
 

SchwerMetaller

Ensign
Ersteller dieses Themas
Dabei seit
Okt. 2002
Beiträge
146
Also mit der Sicherheitslücke habe ich mich net richtig auseinander gesetzt, aber bis jetzt kamen noch keine Beschwerden *g*

@ pcwTJaR
genau die Variable soll zwischen 2 Scripten ausgetauscht werden.

Quelltexte:

Teil der upload.php
Code:
<? global $pic; $pic = $_FILES["datei"]["name"]; ?>
<form action="<?$PHP_SELF?>" method="post" enctype="multipart/form-data">
Bitte wählen Sie eine Datei aus:
<input name="MAX_FILE_SIZE" type="hidden" value="100000">
<input name="datei" type="file" size="30" maxlength="100000" accept="text/*"></form>
Teil der index.php
Code:
<form action="<?$PHP_SELF?>" method="post"><input type=hidden name=pic value="<?echo $pic?>"></form>
Ich hoffe das reicht soweit, hab nur dir markanten stellen genommen, wahrscheinlich steh ich auch total aufm Schlauch....
 

pcw

Lt. Commander
Dabei seit
Juli 2001
Beiträge
1.658
wenn du die Variable von upload.php nach index.php übergeben willst, wär die stelle interessant, wo du von upload.php aus die index.php aufrufst.

Aber eigentlich kannst du es dir einfach machen und an der Stelle einfach statt nach "./index.php" nach "./index.php?pic=<?php echo $pic; ?>" verlinken.

Dann bekommst du deine alte Variable $pic über $_GET["pic"] oder - dank register_globals = on - sogar direkt asl $pic ;)
 

SchwerMetaller

Ensign
Ersteller dieses Themas
Dabei seit
Okt. 2002
Beiträge
146
Hehe, ok ich hatte mich doch etwas misverständlich ausgedrückt, war etwas in Hektik gestern. Das Problem ist einfach, dass ich die beiden Scripte net untereinander verlinkt habe, das wäre zu einfach ;) Sie laufen also quasi eigenständig. In der upload.php wird eine Variable gesetzt, die nach einem Refresh (bzw. Aufruf mit neuer Ausgabe) der index.php dort abgerufen wird, um den Wert zwischen zu speichern (<input type=hidden ... >). Bin grade noch weiter am Testen, aber das will einfach net :(
 

(void *)

Newbie
Dabei seit
März 2004
Beiträge
5
axo, du moechtest also deine Daten somit in ein file schreiben um dessen Inhalt bei bedarf von einem anderen cgi auslesen zu koennen, richtig?
Bin kein php-koenner, aber das ganze koennte in etwa so gehen:
//zum schreiben

$bild1="test.gif";

$fp=fopen("bilddaten.txt", "w+");
fputs($fp, $bild1, 8);
fclose($fp);

// zum lesen
if(file_exists("bilddaten.txt")) {
$fp=fopen("bilddaten.txt", "r+");
$readpic=fgets($fp, 8);
fclose($fp);
}
else
{
echo "file nicht vorhanden!";
}

....so in der Art =)

:wq
 

Loopo

Admiral
Dabei seit
Juli 2002
Beiträge
7.610
die Problemstellung ist für mich noch immer irgendwie unklar :D

was ist denn genau das Problem !? wird das Bild nicht raufgeladen !? kannst du den Namen nicht speichern !?
 

SchwerMetaller

Ensign
Ersteller dieses Themas
Dabei seit
Okt. 2002
Beiträge
146
Verdammt, drück ich mich so undeutlich aus?? :o
Also in die Textfile schreiben is kein Thema hab ich schon länger erledigt.

Das Problem:
1. 2 unterschiedliche Scripte (upload.php und index.php)
2. Bild wird in der upload.php hochgeladen und der Name in $pic gespeichert.
$pic will ich ich dann in der index.php auslesen und zusammen mit den anderen Daten in das Textfile schreiben. Die beiden Scripte sind untereinander allerdings nicht verlinkt, bzw nur zum öffnen per JS wegen Fensterhöhe/breite etc.. Nur leider is der Inhalt von $pic immer leer in der index.php

Hoffe das ganze ist nun etwas klarer :)
 
Zuletzt bearbeitet:

pcw

Lt. Commander
Dabei seit
Juli 2001
Beiträge
1.658
Du kannst keine Variablen zwischen 2 verschiedenen Programmen/scripten austauschen. Die haben doch gar keinen gemeinsamen Speicherberech.

Bleiben dir also nur folgende möglichkeiten:

-$pic in eine Datei speichern und auslesen
-Das andere Script selber aufrufen und $pic übergeben
-beide Scripte in eins zusammenfassen
-auf $pic verzichten, weil du den namen eh aus der neu hochgeladenen datei lesen kannst
 

(void *)

Newbie
Dabei seit
März 2004
Beiträge
5
Ok, also dann stell ich mir mal vor ich bin auf deiner index.php, rufe von dort aus die upload.php auf und lade ein bild hoch.
Danach schliesse ich das fenster (upload.php) und kllicke nen refresh auf der immer noch offenen index.php. Bei dieser aktion wurde von upload.php keine variable uebergeben (mittels POST oder GET).
Jetzt weiss ich nicht ob du ein sessionfile oder aehnliches zur identifikation meiner momentanen session verwendest. Ich sag jetzt einfach mal NEIN und kann davon ausgehen das die einzige moeglichkeit fuer index.php an den Inhalt der variablen $pic (von upload.php) zu kommen ist, wenn upload.php den inhalt in eine temporaere datei schreibt und index.php diese ausliest.
:wq

...Mist, pcwTJaR war schneller =)
 
Zuletzt bearbeitet:

SchwerMetaller

Ensign
Ersteller dieses Themas
Dabei seit
Okt. 2002
Beiträge
146
Ok vielen Dank.
Hätte ich mir auch fast denken, könne aber ich wollte es einfach net wahr haben ;) Nach dem zu letzt hochgeladenen Bild im verzeichnis suchen, könnte unter Umständen ja auch zu nem Problem werden wenn 2 User fast gleichzeitig ein Bild hochgeladen haben, nähert sich zwar einem Lotto Gewinn, aber möglich isses.... Das mit der Temporären Datei klingt eigentlich ganz vernünftig, nur leider hab ich null Ahnung wie das gehen soll, hier hört die Kenntnis dann auf :( Wäre net wenn ihr mir da noch nen Schubs in die richtige Richtung geben könntet.
 

pcw

Lt. Commander
Dabei seit
Juli 2001
Beiträge
1.658
Such doch einfach nach dem Bild mit dem jüngsten Änderungsdatum :rolleyes:


oder folgendes:

mach eine datei in der upload.php
zB eine temp.php

in die schreibst du rein
PHP:
<?php 
$pic='XXX';
?>
wobei XXX der inhalt deiner $pic-variable ist.
das musst du nur bei jedem Aufruf von upload.php neu schreiben

und in index.php machst du einfach
PHP:
require("temp.php");
 
Zuletzt bearbeitet:

(void *)

Newbie
Dabei seit
März 2004
Beiträge
5
Die Chance das 2 Leute gleichzeitig was hochladen mag zwar gering sein, kommt jedoch vor. Aus diesem Grund solltest du mal drueber nachdenken evtl. nen sessionkey zu verwenden. Ich weiss nicht inwiefern deine ganze Geschichte Datenbankgestützt ist. Viele sachen kannst du auch damit abhandeln (ob der user zB grade eingeloggt ist, einen momentanen sessionkey etc.). Zur eindeutigen identifikation der momentanen Benutzer kannst du den sessionkey als keks an den client uebergeben und auch wieder von diesem beziehen.
:wq
 

SchwerMetaller

Ensign
Ersteller dieses Themas
Dabei seit
Okt. 2002
Beiträge
146
Zitat von pcwTJaR:
mach eine datei in der upload.php
zB eine temp.php

in die schreibst du rein
PHP:
<?php 
$pic='XXX';
?>
wobei XXX der inhalt deiner $pic-variable ist.
das musst du nur bei jedem Aufruf von upload.php neu schreiben
Das versteh ich net ganz :( Also wenn ich mittels fopen() eine Datei anlege und die mit Inhalt fülle bleibt sie ja auch bestehen, wenn kein neues Bild hochgeladen wird, was dann zu einer falschen Ausgabe führt, oder denk ich da in die falsche Richtung??

Mit Sessionkeys hab ich noch nie gearbeitet und das Formular läuft auch komplett ohne Datenbankunterstützung, sonst wären die ganzen Probleme ja net vorhanden :/
 

Loopo

Admiral
Dabei seit
Juli 2002
Beiträge
7.610
wenn zwischen den beiden Scripten kein Zusammenhang besteht, speicher einfach alle $pic in einer Datei ab, bis sie index.php abarbeitet (und sie dann wieder aus der Datei bzw. die Datei selbst löscht)
 

SchwerMetaller

Ensign
Ersteller dieses Themas
Dabei seit
Okt. 2002
Beiträge
146
Super, vielen Dank. Ihr habt mir echt geholfen :)
Werde morgen dran weiterarbeiten und falls Fragen kommen euch wieder damit belästigen :D

greetz
 

pcw

Lt. Commander
Dabei seit
Juli 2001
Beiträge
1.658
Zitat von SchwerMetaller:
Das versteh ich net ganz :( Also wenn ich mittels fopen() eine Datei anlege und die mit Inhalt fülle bleibt sie ja auch bestehen, wenn kein neues Bild hochgeladen wird, was dann zu einer falschen Ausgabe führt, oder denk ich da in die falsche Richtung??

Mit Sessionkeys hab ich noch nie gearbeitet und das Formular läuft auch komplett ohne Datenbankunterstützung, sonst wären die ganzen Probleme ja net vorhanden :/
Du hättest an der stelle einfach das upload-php php-quelltext in eine datei schreiben lassen, der dann an der stelle in die index.php eingefügt wird, wo du require gemacht hast.

Schau dir mal an, was die funktion require oder include genau macht ;)
 
Top