Pomoc przy przesyłaniu plików za pomocą AJAX i PHP
Mam formularz, za pomocą którego próbuję przesłać plik na serwer, a następnie zapisać informacje w bazie danych. Zapisywanie informacji w bazie danych działa prawidłowo, z wyjątkiem informacji o pliku, który nie jest przesyłany. Mój kod znajduje się poniżej. Każda pomoc jest doceniana.
Formularz
<form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="editeventform" class="editeventform" enctype="multipart/form-data">
<input type="hidden" name="eventid" id="eventid" value="<?php echo $id; ?>">
<table class="editeventtable">
<tr>
<th align="right" valign="top">Title:</th>
<td><input type="text" name="title" id="title" placeholder="Title" value="<?php echo $title; ?>" /></td>
</tr>
<tr>
<th align="right" valign="top">Date:</th>
<td><input type="date" name="newdate" id="newdate" placeholder="mm/dd/yyyy" value="<?php echo $newdate; ?>" /> <i><b>Format as mm/dd/yyyy</b></i></td>
</tr>
<tr>
<th align="right" valign="top">Time:</th>
<td><input type="time" name="newtime" id="newtime" placeholder="hh:mm am/pm" value="<?php echo $newtime; ?>" /> <i><b>Format as hh:mm am or pm</b></i></td>
</tr>
<?php if (isset($file)) { ?>
<tr>
<th align="right" valign="top">Delete File:</th>
<td><input type="checkbox" name="chkdel" value="yes"> <i><b>Leave unchecked if uploading a new file. File will be replaced with the new one.</b></i></td>
</tr>
<?php } ?>
<tr>
<th align="right" valign="top">Upload New File:</th>
<td>
<input type="file" name="infofile" id="infofile" accept=".pdf"> <i><b>This will overwrite any file already uploaded.</b></i>
<?php if (isset($file)) { ?><input type="hidden" name="oldfile" value="<?php echo $file; ?>" /><?php } ?>
</td>
</tr>
<tr>
<th align="right" valign="top">Information:</th>
<td>
<?php
//$content = $info;
$editor_id = 'info';
$settings = array(
'textarea_name' => 'info',
'editor_height' => 425,
'media_buttons' => FALSE,
'tinymce' => array(
'width' => 1000,
)
);
wp_editor( $info, $editor_id, $settings );
?>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<button>Save Edit</button>
<input type="hidden" name="action" value="editeventform">
</td>
</tr>
</table>
</form>
jQuery
jQuery(function ($) {
$('.editeventform').submit(function () {
event.preventDefault();
var editeventform = $('.editeventform');
$.ajax({
url: editeventform.attr('action'),
data: editeventform.serialize(), // form data
type: editeventform.attr('method'), // POST
success: function (data) {
$('#response').html(data); // Display Results
}
});
return false;
});
});
PHP
add_action('wp_ajax_editeventform', 'save_edit_form');
add_action('wp_ajax_nopriv_editeventform', 'save_edit_form');
function save_edit_form() {
global $wpdb;
global $wp_filesystem_direct;
$user_id = get_current_user_id();
$id = $_POST["eventid"];
$title = $_POST['title'];
$date = $_POST['newdate'];
$newdate = date("Y-m-d", strtotime($date));
$time = $_POST['newtime'];
$newtime = date("G:i", strtotime($time));
$info = wpautop($_POST['info']);
if (!empty($_FILES['infofile']['name'])) {
if ( ! function_exists( 'wp_handle_upload' ) ) {
require_once( ABSPATH . 'wp-admin/includes/file.php' );
}
$filename = $_FILES['infofile']['name'];
$table = $wpdb->prefix . "events";
$data = array(
'title' => $title,
'date' => $newdate,
'time' => $newtime,
'info' => $info,
'filename' => $filename,
);
$where = array(
'id' => $id
);
$wpdb->update($table, $data, $where);
$dirfile = wp_upload_dir();
$dirname = $dirfile['basedir'] . '/communitybb_events/files/' . $id . "
wp_mkdir_p($dirname);
$source = $_FILES['infofile']['tmp_name'];
$destination = $dirname . $_FILES['infofile']['name'];
move_uploaded_file($source, $destination);
} else {
$table = $wpdb->prefix . "events";
$data = array(
'title' => $title,
'date' => $newdate,
'time' => $newtime,
'info' => $info,
);
$where = array(
'id' => $id
);
$wpdb->update($table, $data, $where);
}
?>
<h3><?php echo $title; ?> Has Been Updated</h3>
<?php
die;
}