У меня 2 HTML страниц. Один с формой для добавления сообщения (в этом случае у меня есть файл типа ввода), а другой с формой для обновления сообщения (в этом случае у меня нет файла типа ввода). Обе формы имеют кнопку с одинаковым идентификатором для вызова ajax. Файл PHP одинаков для обеих форм, и он вставляет или обновляет данные сообщения. Файл js получает значения, введенные пользователем, и вызывает ajax.
HTML (добавить сообщение)
<form id="form">
<input id="titleID" type="text" value="" required />
<input type="file" id="inputVideo" required />
<input type="submit" id="submitData" value="SEND DATA" />
</form>
HTML (обновить сообщение. Это другая страница. С таким же идентификатором все в порядке)
<form id="form">
<input id="titleID" type="text" value="SomeTitleValue" />
<input type="hidden" id="idHidd" value="SomeIdValue" />
<input type="submit" id="submitData" value="SEND DATA" />
</form>
JS (получить входные значения и сделать ajax вызов php файла)
$(document).ready(function() {
$(document).on('submit', '#form', function(e) {
e.preventDefault();
// get values of inputs and create a formData object
// if the value is undefined, append in formData a empty string; else append the value
// Get id
if ( $('#idHidd').val() != undefined ){
var id= $('#idHidd').val();
formData.append('id', id);
} else {
var id= ""
formData.append('id', id);
}
// Get file video
if ( $('#inputVideo')[0] != undefined ){
var video= $('#inputVideo')[0].files[0]
formData.append('video', video);
} else {
var video =""
formData.append('video', video);
}
// Get title (always present)
var title= $('#title').val();
formData.append('title', title);
// AJAX Call
$.ajax({
type: "POST",
url: "urlToPHP",
dataType: "JSON",
processData: false,
contentType: false,
cache: false,
data: formData,
success: function(msg) {
alert(msg)
}
});
});
});
PHP
//include connect db
//Get tite and id
$id= $_POST['id'];
$title= $_POST['title'];
// if there isn't an id, i do an insert and get the video in $_FILES
if ($id == ""){
$video= $_FILES['video'];
// DO QUERY FOR INSERT NEW POST AND MOVES THE FILE ON SERVER
}
if ($id != ""){
// DO QUERY FOR UPDATE A POST
}
ПРОБЛЕМА : локально с xampp, все работает. Я могу вставить новый пост, и я могу сделать обновление. На онлайн-сервере работает только обновление. Когда я делаю вставку, в log_err у меня появляется сообщение о том, что индексы «id», «video» и «title» не определены. Например, если $ _POST и $ _FILES были пусты. Но в консоли (с console.log) я вижу, что объект formData хорош, и все значения отлично добавляются ко всем индексам. Infact, обновление работает, и данные являются такими же, как вставка, за исключением файла видео. Возможно, это потому, что во вставке есть тип ввода «файл»? Но с xampp это работает. Я также пытался отключить mod_security из CPanel. Но это не работает так же. у кого-нибудь есть какое-нибудь решение?
Ps: извините, если код не идеален, но мне пришлось сделать короткую версию для лучшего понимания.