6

いくつかのPHPページで構成されるこのWebフォームウィザードを作成しました。このいくつかのページでは、ユーザーはフォームに入力でき、データは一時的にセッションに保存され、最後のページでは、セッションを使用してすべてのデータがMYSQLデータベースに保存されます。アップロードされたファイルを除いて、すべてが正常に機能します。これが私のコードです:

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");
4

4 に答える 4

9

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

するべきこと:

  1. アップロードが成功した場合は、$_FILES['uploadfoto']['tmp_name']すぐに別の場所に移動してください
  2. 移動先の場所を保存します$_SESSION
  3. $_SESSION複数ページのプロセスの最後にそのファイルで何かをします($_FILESもう必要ありません)
  4. ユーザーがセッションを放棄し、ファイルが使用されない場合に備えて、アップロードされた古いファイルを削除するためのメカニズムを用意します。
于 2012-04-26T03:23:50.700 に答える
3

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

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

于 2012-04-26T03:25:50.503 に答える
1

さて、あなたは最初に1つの一時的な場所にファイルをアップロードすることができます。次に、最後のページで、フォームを送信したら、ファイルを目的の場所に転送してから、一時的なファイルを削除できます。

$_SESSION['file'] = $_FILES["file"]["name"];

if (file_exists("uploads/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/temp/" . $_FILES["file"]["name"]);
      };


//This for the last page.
$file = file_get_contents("uploads/temp/".$_SESSION['file']);
file_put_contents("uploads/".$_SESSION['file'], $file);
于 2014-01-30T02:03:02.433 に答える
1

私は受け入れられた答えに同意しません。すべての画像をセッション配列変数に格納する方法があります。「file_get_contents」関数を使用して画像を保存できます。これを見てください:

  $_SESSION['imgArrayFile'][] = $_FILES['file']; //Your file informations
  $_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.

この目的のためにそれを使用することについて他の人が何を考えているかに関係なく、それはあなたのために仕事をすることができます。セッションに大量のデータを保存することにはいくつかの問題がありますが、画像が十分に小さく、設定の制限を認識している場合は、問題ありません。

でファイルを保存します

$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
?>

もちろん、プロジェクトで機能させるには、いくつかの小さな変更を加える必要がありますが、私のポイントは、それが可能であることを示すことでした。

素晴らしい一日と幸せなコーディングを!

于 2014-02-10T22:16:46.347 に答える