2012-04-26 27 views
5

私はこのWebフォームウィザードを構築しました。このウィザードはいくつかのPHPページで構成されています。このいくつかのページでは、ユーザーはフォームに記入することができ、データはセッションに一時的に格納され、最後のページではセッションがMYSQLデータベースにすべてのデータを格納するために使用されます。アップロードされたファイルを除いてすべて正常に動作します。ここに私のコードは次のとおりです。写真のアップロードをPHPセッションに保存する方法は?

HTML: wizard_page2

<form name="registratieformulier" method="post" enctype="multipart/form-data" action="sw3.php"> 

    <tr><td>Foto winkel uploaden: </td><td><input type="file" name="uploadfoto"/></td></tr><br /><br /> 

     <tr><td><strong>Omschrijving van winkel:</strong></td>     </tr><br /> 

     <tr><textarea cols="50" rows="7" name="omschrijvingwinkel"></textarea></tr> 
     <input name="pkbedrijven" value="<?php echo($pkbedrijven); ?>" type="hidden" /> 
    <input type="submit" name="stuurfoto" value="Verzenden" /> 

</form> 

PHP: wizard_last_page

$_FILES['uploadfoto']['name']  = $_SESSION["naamfoto"]; 
    $_FILES['uploadfoto']['tmp_name'] = $_SESSION["tijdelijk"]; 

    $bn = $_SESSION["wn"]; 

    $target_path = "../../winkels/$bn/"; 

     $target_path = $target_path . basename($_FILES['uploadfoto']['name']); 


    move_uploaded_file($_FILES['uploadfoto']['tmp_name'], $target_path)or die("There was an error uploading the file, please try again!"); 
    $foto_path = "http://mywebsite.nl/winkels/$bn/".basename($_FILES['uploadfoto']['name']); 


    $omschrijving = $_SESSION["omschrijving"]; 

    $add = "UPDATE winkelprofiel SET winkelomschrijving='$omschrijving', winkelfoto='$foto_path' WHERE fkBedrijvenID=$pkbedrijven "; 
    $query_upload = mysql_query($add) or die("De winkelfoto en omschrijving konden niet worden opgeslagen"); 

答えて

7

$_FILES配列のみが、この要求にをアップロードされたファイルに関する情報を保持しています。同じリクエスト内の他の場所にそのファイルを保存しないと、リクエストの最後にPHPによって削除されます。 $_FILES['uploadfoto']['tmp_name']をセッションに単に保存することはできず、後でファイルが存在することが予想されます。また、$_SESSIONの値を$_FILESに割り当てても意味がありません。ファイルを戻すことはできません。あなたがする必要がどのような

  1. 、アップロードが成功した場合は、どこか別の場所$_FILES['uploadfoto']['tmp_name']を移動し、すぐに
  2. あなたは$_SESSIONに、そのファイルで何かを$_SESSION
  3. にそれを移動した場所を保存します複数ページのプロセスが終了したら($_FILESはもう必要ありません)
  4. 古いアップロードファイルを削除するメカニズムがあります。ユーザーがセッションを破棄してファイルnev使用されます
+0

この関数は、ファイルrename()またはcopy()を移動するために使用するようアドバイスしますか? –

+1

'move_uploaded_file' – deceze

3

問題は、$ _FILES ['uploadfoto'] ['tmp_name']にあるファイルは、アップロード時にのみ利用できると思います。セッションでも値を保存しても、wizard_last_pageに来るとファイルはそこに保存されません。 POSTリクエストですぐにアップロードされたファイルを処理する必要があります。

ファイルをアップロードするときに、$ target_pathまたは特定の一時的な場所に移動し、$ target_pathをセッションに保存して、後でwizard_last_pageにアクセスできるようにする必要があります。

+0

ファイルrename()またはcopy()を移動するために使用するアドバイスはありますか? –

+0

copy()はソースファイルのコピーを作成するので、rename()を使ってファイルを移動します。 – mask8

1

まず、一時的な場所にファイルをアップロードできます。最後のページで、フォームを送信すると、ファイルを目的の場所に転送して、一時的な場所を削除できます。

1

私は受け入れられた回答に同意しません。すべてのイメージをセッション配列変数に格納する方法があります。イメージデータを格納するために "file_get_contents"関数を使うことができます。かかわらず、他のは、それがあなたのために仕事をすることができ、この目的のためにそれを使用することについてどう思うかの

$_SESSION['imgArrayFile'][] = $_FILES['file']; //Your file infromations 
    $_SESSION['imgArrayName'][] = $_POST["ImgNewNamePlacowki"]; //new name for img 
    $_SESSION['ImgArrayAlt'][] = $_POST["ImgAltPlacowki"]; // alt tags if you use them 
    $_SESSION['obj_image_session'][] = file_get_contents($_FILES['file']['tmp_name']); 
    //above "file_get_contents" function - store image as a long string. 

: は、このを見てください。 大量のデータをセッションに保存するにはいくつかの問題がありますが、イメージが十分に小さく、設定の制限を認識している場合は問題ありません。

は、MY(WORKING)プロジェクトから

$file= $destination."/".$filename; //images/new.jpg 
$fp=fopen($file,"w"); 
fwrite($fp,$_SESSION['obj_image_session'][$index]); 

例を使用してファイルを保存:あなたはいくつかの小さな変更を加える必要がありますもちろん

<?php 
//$galery_img_folder = "your/new/image/destination"; 

foreach($_SESSION['imgArrayFile'] as $index => $name){ 
    if($_SESSION['imgArrayName'][$index]!="" 
    && $_SESSION['ImgArrayAlt'][$index]!="" 
    && $_SESSION['obj_image_session'][$index]!="" 
){ 

    $allowedExts = array("gif", "jpeg", "jpg", "png"); 
    $temp = explode(".", $_SESSION['imgArrayFile'][$index]["name"]); 
    $extension = end($temp); 
    if ((($_SESSION['imgArrayFile'][$index]["type"] == "image/gif") 
    || ($_SESSION['imgArrayFile'][$index]["type"] == "image/jpeg") 
    || ($_SESSION['imgArrayFile'][$index]["type"] == "image/jpg") 
    || ($_SESSION['imgArrayFile'][$index]["type"] == "image/pjpeg") 
    || ($_SESSION['imgArrayFile'][$index]["type"] == "image/x-png") 
    || ($_SESSION['imgArrayFile'][$index]["type"] == "image/png")) 
    && ($_SESSION['imgArrayFile'][$index]["size"] < 104857600) 
    && in_array($extension, $allowedExts)) 
     { 
      if(isset($_SESSION['imgArrayName'][$index]) && $_SESSION['imgArrayName'][$index]!=""){ 
      $rename = $_SESSION['imgArrayName'][$index]; 
      $rename = $rename.".".end($temp); 
     } 

     if ($_SESSION['imgArrayFile'][$index]["error"] > 0) 
     { 
     echo "Return Error Code: " . $_SESSION['imgArrayFile'][$index]["error"] . "<br>"; 
     } 
     else 
     { 
     $size = display_filesize($_SESSION['imgArrayFile'][$index]["size"]); 
     echo "Upload: " . $_SESSION['imgArrayFile'][$index]["name"] . "<br>"; 
     echo "Type: " . $_SESSION['imgArrayFile'][$index]["type"] . "<br>"; 
     echo "Size: " . ($size) . "<br>"; 
     echo "Temp file: " . $_SESSION['imgArrayFile'][$index]["tmp_name"] . "<br>"; 

     if (file_exists($galery_img_folder."/".$rename)) 
      { 
      $error[] = ''.$rename.' <span class="error" id="error"> this name exsists </span>'; 
      } 
     else 
      { 
      $_FILES["file"]["tmp_name"]=$_SESSION['imgArrayFile'][$index]["tmp_name"]; 
      move_uploaded_file($_FILES["file"]["tmp_name"], $galery_img_folder."/".$rename); 
      //now make use of the file_get_content variables 
      $file= $galery_img_folder."/".$rename; 
      $fp=fopen($file,"w"); 
      fwrite($fp,$_SESSION['obj_image_session'][$index]); 
     } 
      } 
     } 
     } 
    else 
     { 
     $error[] = '<span class="error" id="error"> Niewłaściwy plik </span>'; 
     $maxsixe = display_filesize(104857600); 
     echo "Size: " . ($maxsixe) . "<br>"; 
     } 
    } 
    }//end foreach ! ! ! 
}//end dodawanie zdjecia 
?> 

が、それはあなたのプロジェクトを動作させるために、私のこのことが可能であることを示すことでした。

楽しいコーディングと楽しいコーディングをお楽しみください!

+0

ご不明な点がございましたら...お知らせください。 – DevWL

関連する問題