jQuery を使用してサーバー側処理用の完全なフォームを送信しようとしています。フォームには、ファイルのアップロード オプションを含むさまざまなフィールドが含まれています。現時点では FormData をサポートしていないブラウザーは気にしないので、これを行うために FormData を使用しようとしています。
次の(簡略化された)jQueryコードがあります。
$("#create_event_form").submit(function(event) {
event.preventDefault();
var formData = new FormData($(this));
$.post(
"create_entity.php",
{ formData: formData },
function(data) {
var response = jQuery.parseJSON(data);
if(response.code == "success") {
alert("Success!");
} else if(response.code == "failure") {
alert(response.err);
}
}
);
});
そして、私のサーバー側は次のようになります。
<?php
require_once('includes/database.php');
$dbh = db_connect();
$response = array();
if($_SERVER['REQUEST_METHOD'] == "POST") {
// do some other stuff...
// upload entity picture and update database
$url = $_FILES['entity_pic']['name'];
if($url != "") {
if($type == "user") {
$pic_loc = "images/profiles/";
} else if($type == "chapter") {
$pic_loc = "images/chapters/";
} else if($type == "group") {
$pic_loc = "images/groups/";
} else if($type == "event") {
$pic_loc = "images/events/";
}
// upload the picture if it's not already uploaded
if(!file_exists($pic_loc . $_FILES['entity_pic']['name'])) {
move_uploaded_file($_FILES['entity_pic']['tmp_name'], $pic_loc . $url);
}
$image_query = "INSERT INTO image (entity_id, url, type) VALUES (:entity_id, :url, :type);";
$image_query_stmt = $dbh->prepare($image_query);
$image_query_stmt->bindParam(":entity_id", $entity_id);
$image_query_stmt->bindParam(":url", $url);
$image_query_stmt->bindValue(":type", $type);
if(!$image_query_stmt->execute()) {
die(print_r($image_query_stmt->errorInfo()));
}
}
echo json_encode($response);
}
?>
および関連する HTML:
<form id="create_event_form" action="create_entity.php" method="POST" enctype='multipart/form-data'>
<input type="file" name="entity_pic" value="Insert Photo" />
<!-- other inputs -->
</form>
現在、おそらく FormData オブジェクトの初期化時に、不正な呼び出しエラーが発生します。jQueryでこれを行う方法の例を永遠に探してきましたが、空になっています。また、サーバー側のコードが機能することを明確にしたいと思います。formData を "formData" として PHP スクリプトに渡す場合、その中のフィールドにアクセスするにはどうすればよいですか? 「$_POST['formData']['field_name']」か、単に $_POST['field_name'] か、それともまったく別のものでしょうか?
助けてくれてありがとう。