#javascript #php #ajax
#javascript #php #ajax
Вопрос:
это мой PHP-код
for($x=0; $x<count($_FILES['image1']['name']); $x ) {
// echo "Hello";
$file_name = $_FILES['image1']['name'][$x];
$file_size = $_FILES['image1']['size'][$x];
$file_tmp = $_FILES['image1']['tmp_name'][$x];
$lclLocation1 = "http://$_SERVER[HTTP_HOST]/images/".$_FILES["image1"]["name"][0];
$lclLocation2 = "http://$_SERVER[HTTP_HOST]/images/".$_FILES["image1"]["name"][1];
$t = explode(".", $file_name);
$t1 = end($t);
$file_ext = strtolower(end($t));
$ext_boleh = array("jpg", "jpeg", "png", "gif", "bmp");
if(in_array($file_ext, $ext_boleh)) {
$sumber = $file_tmp;
$tujuan = "../images/" . $file_name;
// echo "Image got";
move_uploaded_file($sumber, $tujuan);
}
else {
echo "Only Images can be store!";
}
} // end for
и это мой запрос ajax
// this contains two images
var lclImage1 = document.getElementById("txtImage1");
lclImage2 = lclImage1.files[0];
var formData = new FormData();
formData.append("image1", lclImage2);
После этого мы отправляем с помощью ajax на PHP.
$.ajax({
url: "user.php",
type: "POST",
data: formData,
processData: false,
contentType: false
});
Приведенный выше PHP-код работает нормально для прямого вызова действия с именем файла, я получаю несколько значений, но если я использую ajax, то он не работает
ниже приведен HTML-код
<form name="imgupload" enctype="multipart/form-data" method="post">
<td rowspan="1">
<input type="file" id="image1" name="image1[]" multiple>
</td>
<input type='submit' name='submit'><br/>
</form>
Комментарии:
1. где находится вызов ajax???
2. буквально на секунду я поделюсь
3. вы объявили FormData, используя ключевое слово var ? это должно быть похоже на => var FormData = new FormData();
4. Нет, следующим образом FormData = new FormData();
5. пожалуйста, объявите переменную перед ее использованием
Ответ №1:
Для работы ajax вам потребуется событие отправки формы следующим образом,
<form id="imgupload" name="imgupload" enctype="multipart/form-data" method="post">
<td rowspan="1">
<input type="file" id="txtImage1" name="images1[]" multiple>
</td>
<input type='submit' name='submit'><br/>
</form>
<script
src="http://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<script>
$('#imgupload').on('submit', function () {
var formData = new FormData();
var count = document.getElementById('txtImage1').files.length;
for (var x = 0; x < count; x ) {
formData.append("image1[]", document.getElementById('txtImage1').files[x]);
}
$.ajax({
url: "user.php",
type: "POST",
data: formData,
processData: false,
contentType: false
});
return false;
});
</script>
user.php
for($x=0; $x<count($_FILES['image1']['name']); $x ) {
// echo "Hello";
$file_name = $_FILES['image1']['name'][$x];
$file_size = $_FILES['image1']['size'][$x];
$file_tmp = $_FILES['image1']['tmp_name'][$x];
$lclLocation1 = "http://$_SERVER[HTTP_HOST]/images/".$_FILES["image1"]["name"][0];
$lclLocation2 = "http://$_SERVER[HTTP_HOST]/images/".$_FILES["image1"]["name"][1];
if(($_FILES["image1"]["type"][$x] == "image/gif") || ($_FILES["image1"]["type"][$x] == "image/jpeg") || ($_FILES["image1"]["type"][$x] == "image/png") || ($_FILES["image1"]["type"][$x] == "image/pjpeg")){
$sumber = $file_tmp;
$tujuan = "../images/" . $file_name;
// echo "Image got";
move_uploaded_file($sumber, $tujuan);
}
else {
echo "Only Images can be stored!";
}
} // end for
Также я отредактировал условие расширения изображения. Поскольку имя файла может содержать точку в своем имени, добавление в имя точки приведет к ошибке.
Комментарии:
1. Это не проблема.
2. доступ к файлам возможен только при вводе файла, и это «upload», а не «txtImage1», где элемент с идентификатором «txtImage1» element ?
3. теперь вы изменили его на «image1», и у вас есть «txtImage1» в javascript, что вы делаете?
4. Ошибка ввода, братан.
5. У меня есть 2 программы, написанные для отладки, которые я разместил здесь со старой программой.