Всем привет!
Вопрос довольно избитый, но все же, нужно реализовать загрузку фото в каталог на сервере с записью названия в БД.
Оговорюсь сразу,в PHP не силён, так что сильно не ругайте.
Есть модель (models/item.php) в которую изначально вставил код для сохранения фото
protected function prepareTable(
$table){ if (isset($table->images) && is_array($table->images)){
$registry = new Registry;
$registry->loadArray($table->images);
$table->images = (string)$registry;
}
}
Так как код взял с админки, где для загрузки использовался type="media", поменял на type="file" и подправил филд в форме .xml
<fields name="images">
<field name="file"
type="file"
label="COM_ZAKUPKA_ITEM_IMG"
description=""
accept="image/jpeg,image/png,image/gif"
/>
</fields>
Добавил в форму где выводятся все филдсеты enctype="multipart/form-data"
<form action="index.php?option=com_zakupka&layout=edit&id=<?php echo $this->item->id?>" method="POST" enctype="multipart/form-data" id="adminForm" name="adminForm" class="form-validate">
<input type="hidden" name="task" value="">
<div class="form-horizontal">
<?php foreach($this->form->getFieldsets() as $name => $fieldset) :/?>
<fieldset class="adminForm">
<legend><?php echo JText::_($fieldset->label);?></legend>
<div class="row-fluid">
<div class="span6">
<?php foreach($this->form->getFieldset($name) as $field) :?>
<div class="control-group">
<div class="control-label"><?php echo $field->label;?></div>
<div class="controls"><?php echo $field->input;?></div>
</div>
<?php endforeach;?>
</div>
</div>
</fieldset>
<?php endforeach;?>
</div>
<?php echo JHtml::_('form.token');
?>
</form>
Нашел код который проверил в index.php, как в песочнице, на работоспособность.
<form method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" name="upload" value="Загрузить" />
</form>
<?php
if(isset($_POST['upload'])) {
if(empty($_FILES['file']['size'])) die('Вы не выбрали файл');
if($_FILES['file']['size'] > (5 * 1024 * 1024)) die('Размер файла не должен превышать 5Мб');$imageinfo = getimagesize($_FILES['file']['tmp_name']);
$upload_dir = 'uploads/'; //имя папки с картинками$name = $upload_dir.date('YmdHis').basename($_FILES['file']['name']);
$mov = move_uploaded_file($_FILES['file']['tmp_name'],$name);
if($mov) {
//здесь коннект к БД
$name = htmlentities(stripslashes(strip_tags(trim($name))),ENT_QUOTES,'UTF-8');
//если mysql - здесь еще mysql_real_escape_string обработай, mysqli - mysqli_real_escape_string,PDO - quote
$query = "INSERT INTO `shop_zakupka`(`images`) VALUES('$name')";
//выполняешь запрос, если все ок - то выводишь "поздравления" если все плохо - выводишь ошибку
//здесь запрос
}
else echo 'Произошла ошибка при загрузке фотографии. Пожалуйста, попробуйте снова';
}
?>
Сохранение фото идёт, но в БД не записывает, немного покопавшись понял, что для записи в базу мало обращения только к одному столбцу в таблице, пытался прикрутить его к модели на место старого но не могу найти какую функцию необходимо использовать.
Да, название БД - shop_zakupka
, столбец - images
И ещё вопрос, будет ли идти сохранение через кнопки из общего представления view.html.php
<div class="formelm-buttons">
<button type="button" onclick="Joomla.submitbutton('item.save')">
<?php echo JText::*('JSAVE') ?>
</button>
<button type="button" onclick="Joomla.submitbutton('item.cancel')">
<?php echo JText::*('JCANCEL') ?>
</button>
</div>
так как <input type="submit" name="upload" value="Загрузить" /> из формы выше конечно прийдется убрать.
За ранее спасибо всем кто откликнется, уже несколько дней не могу решить эту головоломку