 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
08.04.2005, 08:59
|
#1
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
PHP-Sessions und uploaded Files
Ausgangslage:
HTML-Formular für
1. Text-Erfassung
2. Bild-Upload
je mit eigenem Submit-Button, denn ich will ja nicht
nach Fehlermeldung zu den Texten das Bild auch immer wieder uploaden.
Ich möchte aber noch nicht move_uploaded_file ( $temp, $ziel )) ausführen
bevor das gesamte Formular akzeptiert und gespeichert wird.
Kann ich nun das Bild wenn es mal hochgekommen ist in einer Session-Var speichern?
Geht das für Dateien? Wie mache ich das, zB. bei folgendem Script,
(das ich in einem andern Thread hier fand)
Klar, das ist nur ein Teil des definitiven Forms und Scripts und
ich halte dann schon auseinander, welcher Submit-Button verwendet wurde.
PHP-Code:
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="file" name="file"><br>
<input type="submit" value="hochladen">
</form>
<?php
$tempname = $_FILES['file']['tmp_name'];
$name = $_FILES['file']['name'];
$location= "./gallery/$name" ;
if(isset($_FILES['file'])) {
if (move_uploaded_file ( $tempname, $location )) {echo "<br>die datei $name zu verschieben hat geklappt";}
else {echo "<br>die datei $name zu verschiebenn hat nicht geklappt";}
}
?>
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
08.04.2005, 09:04
|
#2
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
naja... pack doch einfach die Daten aus dem $_FILES-Array in eine Session-Variable und erweitere das Array um einen Key, in den du dann z.B. per file_get_contents den Inhalt der Datei packst. Bei sehr grossen Dateien, natürlich nicht ratsam.
Gruss
Jan
|
|
|
08.04.2005, 09:20
|
#3
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Danke Jan!
Bin da noch nicht so der Hirsch, kannst mir das Snipplet posten?
Bekomme ich aus dem $_FILES-Array nicht bloss den Namen und Funktionen wie move_uploaded_file() wissen selber, was sie damit anzufangen haben?
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
08.04.2005, 09:26
|
#4
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
ja klar... daher musst du die Datei ja auch irgendwo zwischenspeichern... entweder schiebst du die Datei mit in die Session (get_file_contents), oder in einen Tmp-Ordner.
PHP-Code:
foreach ($_FILES as $k => $v)
$_FILES[$k]['content'] = file_get_contents($v["tmp_name"]);
$_SESSION['FILES'] = $_FILES;
...allerdings bist du dann dafür verantwortlich, dass die Dateien, da auch wieder rauskommen
Gruss
Jan
|
|
|
08.04.2005, 09:42
|
#5
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Also kann ich ...
1. $_SESSION['FILES'] = $_FILES;
2. Verarbeitung wie gewohnt aber aus $_SESSION
3. session_destroy(); // Dateien wieder löschen
?
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
08.04.2005, 09:45
|
#6
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
ähm... noch detailierter kann ichs echt nicht beschreiben. Das Beispiel sagt doch alles, was du brauchst? Und Session-Variablen kannst du wie jede andere Variable nutzen, klar... wie man eine Variable unset, sag ich dir mit absicht nicht! 
|
|
|
08.04.2005, 09:58
|
#7
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Weil Du schriebst entweder ...
Zitat:
|
Zitat von Stuck Mojo
... entweder schiebst du die Datei mit in die Session (get_file_contents), oder in einen Tmp-Ordner.
PHP-Code:
foreach ($_FILES as $k => $v)
$_FILES[$k]['content'] = file_get_contents($v["tmp_name"]);
$_SESSION['FILES'] = $_FILES;
|
Wollte ich mich für Session OHNE Tmp-Ordner entscheiden.
ist unset($Variable) noch nötig, wenn ich session_destroy(); mache?
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
08.04.2005, 10:01
|
#8
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
 ...wenn du weisst, dass du mit session_destroy die gesamte Session killst, und das i.O. ist, kannst du auch das benutzen... klar...
|
|
|
08.04.2005, 10:05
|
#9
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Danke Dir!
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
08.04.2005, 15:15
|
#10
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Hab nun getestet
aber es läuft nicht rund wie ich es will:
upload.php
- soll per Formular ein Bild uploaden lassen
- dieses in $_SESSION['FILES'] verfügbar halten
- wenn auch $_SESSION['TexteOk'] gesetzt ist Bild und Texte speichern
bericht.php
- soll per Formular 3 Texte erfassen lassen
- diese in $_SESSION['....'] verfügbar halten
- wenn die erforderlichen vorhanden sind $_SESSION['TexteOk'] setzten
- wenn auch $_SESSION['FILES'] gesetzt ist Bild und Texte speichern
speichern.php
- wird von upload.php und von bericht.php includet
- enthält die function speichern()
- Die Texte werden später in DB gespeichert
zwischen bericht.php und upload.php kann mit Links hin und her gewechselt werden
<edit>
und HIER WAR mein Online-Test
(bin laufend am ändern und testen)
</edit>
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
Geändert von 321 (09.04.2005 um 23:37 Uhr).
|
|
|
12.04.2005, 16:32
|
#11
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Habe nun zwischendurch ein anderes Session-Problem:
Immer noch 2 Formulare je mit einem separaten Script.
Ich möchte hin und her wechseln und dabei schon mal gemachten Input
wieder in den Formular Feldern bereit stellen.
Also schiebe ich den Input in Session-Variablen, um ihn von dort wieder zu holen.
So wie ich das codiert habe, hauts aber nicht
>Solange ich in diesem Formular bleibe, habe ich auch die vorher eingegebenen Werte
> wechsle ich per Link ins andere Formular (analog aufgebaut)
habe ich dort in den Sessionvariblen diese Werte
beim zurückkommen ins erste habe ich die Werte nicht mehr!
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
Geändert von 321 (13.04.2005 um 09:52 Uhr).
|
|
|
13.04.2005, 10:01
|
#12
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Wäre froh und dankbar, wenn nochmals ein Sachkundiger eine Blicke drauf werfen könnte.
Hier habe ich nun nochmals den Link zum aktuellsten Online-Test
Wie es laufen soll, steht im gestrigen Eintrag.
Anbei die 3 PHP-Dateien:
Bericht.php
PHP-Code:
<?php
session_start();
//
// Get all Input and save it to Session
$Autor = $_POST['Autor'];
$Titel = $_POST['Titel'];
$Bericht= $_POST['Bericht'];
//
// Get previous Input from Session
echo "Session-Werte<br>";
var_dump($_SESSION);
echo "Ende Session-Werte<br>";
//
if(isset($_SESSION['Autor'])) {
$Autor = $_SESSION['Autor'];
}
if(isset($_SESSION['Titel'])) {
$Titel = $_SESSION['Titel'];
}
if(isset($_SESSION['Bericht'])) {
$Bericht= $_SESSION['Bericht'];
}
//
// Update Session Variables
$_SESSION['Autor'] = $Autor;
$_SESSION['Titel'] = $Titel;
$_SESSION['Bericht'] = $Bericht;
//
// Test auf oblig. Felder Autor und Bericht
$_SESSION['TexteOk'] ='';
if($Autor != '' && $Bericht != '') $_SESSION['TexteOk'] = "ok";
//
//
include("speichern.php");
if(($_SESSION['TexteOk'] == "ok") && isset($_SESSION['FILES'])) {
speichern();
echo "Bild und Bericht wurden gespeichert!<br>";
unset($_SESSION);
}
//
echo <<<EndForm
<h2>Bericht erfassen</h2>
<form action="bericht.php" method="POST">
Autor: *<br><INPUT type="text" name="Autor" value="$Autor" SIZE=30 MAXLENGTH=30>
<br>
Titel:<br><INPUT type="text" name="Titel" value="$Titel" SIZE=30 MAXLENGTH=30>
<br>
Bericht: *<br><INPUT type="text" name="Bericht" value="$Bericht" SIZE=80 MAXLENGTH=30>
<br><br>
<input type="submit" name="sendbericht" value="berichten">
</form><br><br>
<a href="upload.php">-> Upload Bild</a>
EndForm;
?>
upload.php
PHP-Code:
<?php
session_start();
var_dump($_SESSION);
//
// Get uploaded Files Information // var_dump($_FILES['Bild']);
//
// Test ob File empfangen
unset($_SESSION['FILES']);
if ($_FILES[Bild][type] == "image/pjpeg") {
$_SESSION['FILES'] = $_FILES;
}
else {
echo "<br>Kein Bild oder nicht erlaubte Datei-Endung,
<br>Nur JPG ist erlaubt!<br>\n";
}
//
//
include("speichern.php");
if(($_SESSION['TexteOk'] == "ok") && isset($_SESSION['FILES'])) {
speichern();
}
//
echo <<<EndFormular
<h2>Upload Bild</h2>
<form enctype="multipart/form-data" action="upload.php" method="post">
Bild:<br><input type="file" name="Bild"><br>
<input type="submit" name="upload" value="hochladen">
</form><br><br>
<a href="bericht.php">-> Bericht erfassen</a>
EndFormular;
?>
speichern.php
PHP-Code:
<?php
//
// include-Datei zum Speichern
//
function speichern() {
echo "<h2>Bild und Bericht sollen gespeichert werden</h2>\n";
//
$temp = $_SESSION['FILES']['Bild']['tmp_name'];
$name = $_SESSION['FILES']['Bild']['name'];
$loc = "./Bilder/$name" ;
//
if (move_uploaded_file ( $temp, $loc )) {
echo "<br>datei <a href='".$loc.$name."'>".$name."wurde gespeichert<br>\n";
unset($_SESSION);
}
else {
echo "<br>die datei" .$name. "konnte nicht gespeichert werden<br>\n";
}
// end of function speichern()
}
//
if (!($_SESSION['TexteOk'] == "ok"))
echo "Erforderliche Texte sind noch nicht vorhanden!<br>\n";
if (!isset($_SESSION['FILES'][Bild]))
echo "File ist noch nicht vorhanden!<br>\n";
//
// Ende der include-Datei zum Speichern
?>
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
13.04.2005, 10:56
|
#13
|
|
TP-Supporter
Registriert seit: Jun 2004
|
PHP-Code:
$Autor = (isset($_POST['Autor']) ? $_POST['Autor'] : '');
aber für meinen geschmack machst du zu viele zuweisungen, hätt lieber paar abfragen weiter ausgearbeitet.
__________________
Ich bin bereit, meinem Schöpfer gegenüberzutreten.
Ob mein Schöpfer ebenso bereit ist, diese Begegnung über sich ergehen zu lassen, ist eine andere Sache.
|
|
|
13.04.2005, 12:54
|
#14
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Ich lade erstmal den Autor aus $_POST['Autor']
nachher, falls gesetzt nehme ich ihn aus $_SESSION['Autor']
und speichere ihn wieder in $_SESSION['Autor']
Ich will damit erreichen, dass in Session immer der zuletzt eingegebene ist
und nach einem Wechsel des .PHP auch wieder zur Verfügung steht.
Wie würdest Du das machen? Bin offen, was besseres zu lernen.
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
13.04.2005, 13:32
|
#15
|
|
TP-Supporter
Registriert seit: Jun 2004
|
ich verstehe das so, dass $_POST['autor'] nicht leer sein kann, also:
PHP-Code:
$autor = (isset($_SESSION['autor']) ? $_SESSION['autor'] : $_POST['autor']);
$titel = (isset($_SESSION['titel']) ? $_SESSION['titel'] : $_POST['titel']);
$bericht = (isset($_SESSION['bericht']) ? $_SESSION['bericht'] : $_POST['bericht']);
erklärung: wenn die werte schon in session sind, dann brauchst du die post garnicht, aber ich glaube da hast du n denk fehler ^^
den momentan würde er beim 2ten absenden der form die werte nicht mehr aktuallisieren
__________________
Ich bin bereit, meinem Schöpfer gegenüberzutreten.
Ob mein Schöpfer ebenso bereit ist, diese Begegnung über sich ergehen zu lassen, ist eine andere Sache.
|
|
|
| |