power-box.de
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 08.04.2005, 08:59   #1
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht

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!
321 ist offline   Mit Zitat antworten


Alt 08.04.2005, 09:04   #2
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
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
Stuck Mojo ist offline   Mit Zitat antworten
Alt 08.04.2005, 09:20   #3
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 08.04.2005, 09:26   #4
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
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
Stuck Mojo ist offline   Mit Zitat antworten
Alt 08.04.2005, 09:42   #5
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 08.04.2005, 09:45   #6
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
ä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!
Stuck Mojo ist offline   Mit Zitat antworten
Alt 08.04.2005, 09:58   #7
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 08.04.2005, 10:01   #8
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
...wenn du weisst, dass du mit session_destroy die gesamte Session killst, und das i.O. ist, kannst du auch das benutzen... klar...
Stuck Mojo ist offline   Mit Zitat antworten
Alt 08.04.2005, 10:05   #9
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 08.04.2005, 15:15   #10
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht

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).
321 ist offline   Mit Zitat antworten
Alt 12.04.2005, 16:32   #11
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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).
321 ist offline   Mit Zitat antworten
Alt 13.04.2005, 10:01   #12
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 13.04.2005, 10:56   #13
TP-Supporter
 
Benutzerbild von Weede
 
Registriert seit: Jun 2004
Weede ist auf einem guten Weg
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.
Weede ist offline   Mit Zitat antworten
Alt 13.04.2005, 12:54   #14
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 13.04.2005, 13:32   #15
TP-Supporter
 
Benutzerbild von Weede
 
Registriert seit: Jun 2004
Weede ist auf einem guten Weg
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.
Weede ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding >