День добрый! Интересует вопрос загрузки изображений на сервер к файлу-обработчику (metall_add_position.php) из модального окна Бутстрап. Обычные текстовые данные загружаются на сервер отлично, но вот даже если написать в обработчике функцию обработки изображения и записи в БД его URL, в БД все равно ничего не заносится. С AJAX работаю относительно недавно, потому обращаюсь к вам. Надо ли указывать в запросе какие-либо дополнительные параметры из-за загрузки изображения?
Ниже привожу коды отдельно взятых участков.
AJAX:
//Добавление строки
$(function() {
$("button#submit").click(function(){
$.ajax({
type: "POST",
url: "inc/metall_add_position.php",
data: $('form.form-horizontal').serialize(),
success: function(msg){
$("#add_position_btn").html(msg);
$("#add_position").modal('hide');
$.ajax({
url: "inc/table_metall.php",
cache: false,
success: function(html){
$("#table_show").html(html);
}
});
},
error: function(){
alert("Ошибка при добавлении записи");
}
});
});
});
В этом же файле находится форма отправки. Всю указывать не стал, но тип у нее - POST, enctype="multipart/form-data", а сюда скинул лишь группу со строкой выбора изображения.
<div class="form-group">
<div class="col-sm-4">
<label for="imgup">Изображение</label>
</div>
<div class="col-sm-8">
<input type="file" id="imgup" class="form-control" name="fupload">
</div>
</div>
</div>
А вот код обработчика:
if (isset($_SESSION['auth'])){
include '../../inc/conf.php';
if (isset($_POST['type']) and (isset($_POST['name'])) and (isset($_POST['size'])) and (isset($_POST['price'])) and (isset($_POST['opt'])) and(isset($_POST['sam']))){
$type = strip_tags($_POST['type']);
$name = strip_tags($_POST['name']);
$size = strip_tags($_POST['size']);
$price = strip_tags($_POST['price']);
$opt = strip_tags($_POST['opt']);
$sam = strip_tags($_POST['sam']);
if (empty($_FILES['fupload']['name']))
{
$avatar = "img/noimg.png";
}
else
{
$path_to_90_directory = 'http://oztsk.ru/img/';
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))
{
$filename = $_FILES['fupload']['name'];
$source = $_FILES['fupload']['tmp_name'];
$target = $path_to_90_directory . $filename;
move_uploaded_file($source, $target);
if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
$im = imagecreatefromgif($path_to_90_directory.$filename) ;
}
if(preg_match('/[.](PNG)|(png)$/', $filename)) {
$im = imagecreatefrompng($path_to_90_directory.$filename) ;
}
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
$im = imagecreatefromjpeg($path_to_90_directory.$filename);
}
$w = 90;
$w_src = imagesx($im);
$h_src = imagesy($im);
$dest = imagecreatetruecolor($w,$w);
if ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
round((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
if ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));
if ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
$date=time();
imagejpeg($dest, $path_to_90_directory.$date.".jpg");
$avatar = $path_to_90_directory.$date.".jpg";
$delfull = $path_to_90_directory.$filename;
unlink ($delfull);
}
else
{
exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>");
}
}
$sql = "INSERT INTO metall (type, name, size, price, opt, sam, pic) VALUES ('{$type}', '{$name}', '{$size}', '{$price}', '{$opt}', '{$sam}', '{$avatar}')";
$retval = mysql_query($sql);
if(! $retval )
{
die('<div class=\"alert alert-danger alert-dismissible\" role=\"alert\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\"><span aria-hidden=\"true\">×</span><span class=\"sr-only\">'. mysql_error());'</span></button> Ошибка при добавлении данных</span></div>';
}
echo "<div class=\"alert alert-success alert-dismissible\" role=\"alert\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\"><span aria-hidden=\"true\">×</span><span class=\"sr-only\">Закрыть</span></button><span class=\"glyphicon glyphicon-ok\"></span> Данные успешно внесены в базу</span></div>";
}
?>
<div id="add_position_btn">
<a data-toggle="modal" href="#add_position" class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> Добавить позицию</a>
</div>
<? } ?>