24

ファイルのアップロードとテキスト フィールドの 2 つのフィールドを持つ HTML POST フォームをまとめようとしています。フォームにはファイル アップロード用のタイプ multipart/form-data があるため、通常の PHP $_POST 変数を介してテキスト フィールドを取得できません。では、PHP を使用してフォームのテキスト フィールドにアクセスするにはどうすればよいでしょうか。

リクエストに応じて、基本的にアンドリューから直接取得したコードを次に示します。

<html>
    <body>
        <form action="test2.php" method="post" enctype="multipart/form-data">
            Name: <input type="text" name="imageName" />
            Image: <input type="file" name="image" />
            <input type="submit" value="submit" />
        </form>
    </body>
</html>

<?php
  echo $_POST['imageName'];
  echo "<pre>";
  echo var_dump($_FILES['image']);
  echo "</pre>";
?>

これがテストファイル全体です。enctype を削除すると、POST されたデータを取得できますが、もちろんファイルは取得できません。enctype を multipart/form-data として使用すると、ファイルを取得できますが、POST されたデータからは何も取得できません。

enctype の出力は次のとおりです。

array(5) {
  ["name"]=>
  string(34) "testing.png"
  ["type"]=>
  string(0) ""
  ["tmp_name"]=>
  string(0) ""
  ["error"]=>
  int(1)
  ["size"]=>
  int(0)
}

それなし:

testing

NULL

両方とも同じ正確な入力。

4

7 に答える 7

33

ファイルのアップロードは$_FILES. それ以外はすべて通過$_POSTします (もちろん、HTML フォームのmethod属性が に設定されていると仮定します"post")。

于 2009-07-02T16:56:02.287 に答える
9

投稿制限を確認してください。私はこれを引き起こしている原因を突き止めようとして夢中になりました。Apache エラー ログを簡単に確認すると、投稿コンテンツの長さが制限を超えていることがわかりました。制限を引き上げると、投稿データが利用可能になります。

于 2011-04-20T20:24:07.807 に答える
5

$_POSTテキストフィールドでは問題なく機能するはずです。$_FILES実際のファイルに使用する必要があります。次の HTML があるとします。

<html>
  <body>
    <form action="self.php" method="post" enctype="multipart/form-data">
      Name: <input type="text" name="imageName" />
      Image: <input type="file" name="image" />
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

次の方法でフィールドにアクセスできます。

<?php
  echo $_POST['imageName'];
  echo "<pre>";
  echo var_dump($_FILES['image']);
  echo "</pre>";
?>
于 2009-07-02T16:56:43.940 に答える
1

最初に示したのと同じ問題がありました。1MB 未満のファイル サイズをロードして試してみてください。ファイルをアップロードできた場合は、upload_max_filesize と post_max_size の値が大きくなり、再試行してください。これが私の問題の解決策でした。

于 2016-02-16T19:08:14.820 に答える
1

コードに問題はありません。サーバー構成に問題がある可能性があります。

<form action="" method="post" enctype="multipart/form-data"> 
 Name: <input type="text" name="imageName"> 
 Image: <input type="file" name="image"> 
 <input type="submit" value="submit"> 
</form> 

<?php var_dump($_POST, $_FILES); ?> 

スクリプト: http://sandbox.phpieceofcake.com/upload/1246558881125336.php
ソース: http://sandbox.phpieceofcake.com/upload/1246558881125336.phps

于 2009-07-02T18:38:25.697 に答える
-1

[2010-02-13 10:57 UTC] yahoodotcomのsudeshkmr

私は同じ問題に直面しましたが、何も機能しませんでした。私はWindowsVistaのApache2.2、PHP5.3でテストしました。また、Apache2.2とPHP5.3を使用してUbuntu(Karmic)でテストしました。また、nGinX0.8とPHP5.3でテストしました。

次に、回避策を見つけました。action = ""パラメータは、ファイルアップロードフォームがあるスクリプトページ自体であってはなりません。たとえば、アップロードフォームを含むページindex.phpがあります。

action = "upload.php" <--------このページは、ファイルアップロードフォームページとは異なる必要があり、PHPのすべての構成で機能します。

アクションパラメータには使用しないでください。

于 2010-05-27T22:32:06.910 に答える
-3

クロムレストクライアント拡張機能を使用するか、このアプリを介してマルチパートデータをアップロードすることで、Web サービスが正常に機能しているかどうかを確認できます - http://itunes.apple.com/us/app/rest-client/id503860664?ls=1&mt=8

于 2012-02-29T07:43:11.107 に答える