Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2018, 18:41   #1
Javany
Пользователь
 
Регистрация: 15.05.2018
Сообщений: 75
По умолчанию Создание папки в директории и загрузка в неё изображения.

Здравствуйте! Помогите пожалуйста понять. Нужно создать папку в директории и загрузить в неё картинки, далее эти картинки выводить слайдером. Папок может быть много. Для каждой папки свой слайдер. Папку создаю так:
Заполняем форму.

Код:
<form  action="index.php?page=carousel" method="POST">
			<span>Введите название карусели</span><br>
			<input  type="text" name="nameCar" placeholder="Название карусели"><br>
			<span>латинскими символами без пробелов</span><br>
			<input class="btn btn-primary" type="submit" name="example" value="Создать"><br>
			 </div>
			</form>

Далее создаём папку в дериктории
Код:
$nameCar = isset($_POST['nameCar']) ? $_POST['nameCar']:'';
if(isset($nameCar))
mkdir('images/' . $nameCar);
Далее проверяем директорию и записываем данные из неё в массив
Код:
$direct = scandir('images');
Далее созданные папки необходимо разместить в <select>, делаю так
Код:
<form method="POST" action="index.php?page=carousel&action=uploadMultipleImages" enctype="multipart/form-data">
		
		<div class="col"><h2 style="color:blue; text-align: center; ">Добавить изображение</h2>
			<span>Выберите карусель</span><br>
			<select>

				<?php
			foreach ($direct as $value){
				if($value != '.'&& $value !='..'){
echo '<option value="'.$value.'">'.$value.'</option>';}
}

?>
			</select>
			<br>

		<span>Выберите изображение</span><br>
			<input class="btn btn-primary" type="file" name="userFile[]" multiple>
<button  type="submit" class="btn btn-primary">Submit</button>


		</div>
		<?
			
?>
	</form>
А вот теперь необходимо выбрать в <select> нужное название папки и загрузить туда изображение. Хотел добавить $value в uploadImageFile('images',$f); но получаю ошибку что переменная не определена. Может из-за того что все функции в отдельном файле?
Или может я не по тому пути пошел? Если не сложно, подскажите как организовать загрузку в выбранную папку.
Загрузка и проверка организованы так(в отдельном файле)
Код:
$action = isset($_GET['action'])? $_GET['action'] :null;//uploadImage
if(!empty($action))
{
	$action();
}

function showArray($arr){
	echo '<pre>' . print_r($arr,true) . '</pre>';
}

function uploadImageFile($dir, $file){
	if(!file_exists($dir)){
		mkdir($dir);
	}

	if(empty($file)||$file['error']==4){
		$_SESSION['errors'] = 'Выберите файл';
		return;
	}

		
	if($file['error'] !=0){
		$_SESSION['errors'] = 'Ошибка загрузки' . $file['error'];
		return;
	}
	$arrMime = ['image/png', 'image/gif', 'image/jpeg'];

	if(!in_array($file['type'], $arrMime))
	{
		$_SESSION['errors'] = 'Недопустимый тип файла';
		return;
	}
if(!move_uploaded_file($file['tmp_name'], $dir .'/'. $file['name']))
{
		$_SESSION['errors'] = 'Ошибка перемещение файла';
		return;
}
$_SESSION['success'] = 'файл загружен';
}

function uploadImage(){
	uploadImageFile('images/1', $_FILES['userFile']);
	
}

function uploadMultipleImages(){

	for($i = 0; $i<count($_FILES['userFile']['name']);$i++)
	{
		$f =[
			'name'=>$_FILES['userFile']['name'][$i],
			'error'=>$_FILES['userFile']['error'][$i],
			'size'=>$_FILES['userFile']['size'][$i],
			'tmp_name'=>$_FILES['userFile']['tmp_name'][$i],
			'type'=>$_FILES['userFile']['type'][$i],
		];
		uploadImageFile('images',$f);
	}
	// showArray($f);
	header('Location: index.php?page=carousel');
	exit;

}
Не задавай вопрос, если не знаешь что делать с ответом...

Последний раз редактировалось Javany; 28.05.2018 в 18:45.
Javany вне форума Ответить с цитированием
Старый 28.05.2018, 21:55   #2
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Я думаю мало кто захочет ковыряться в таком куске кода, разбейте свою задачу на подзадачи и то что не получается спрашивайте. вот к примеру про селект, взято с сток оверфлоу. https://stackoverflow.com/questions/...-child-folders

Код:
function showDir( $dir , $subdir = 0 ) {
    if ( !is_dir( $dir ) ) { return false; }

    $scan = scandir( $dir );

    foreach( $scan as $key => $val ) {
        if ( $val[0] == "." ) { continue; }

        if ( is_dir( $dir . "/" . $val ) ) {
            echo "<option>" . str_repeat( "--", $subdir ) . $val . "</option>\n";

            if ( $val[0] !="." ) {
                showDir( $dir . "/" . $val , $subdir + 1 );
            }
        }
    }

    return true;
}
или вот

Код:
//Requires PHP 5.3
$it = new RecursiveTreeIterator(
    new RecursiveDirectoryIterator($dir));

foreach ($it as $k => $v) {
    echo "<option>".htmlspecialchars($v)."</option>\n";
}
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 29.05.2018, 12:19   #3
Ottava
Форумчанин
 
Регистрация: 05.09.2017
Сообщений: 157
По умолчанию

Цитата:
Сообщение от Javany Посмотреть сообщение
Далее создаём папку в дериктории
Код:
$nameCar = isset($_POST['nameCar']) ? $_POST['nameCar']:'';
if(isset($nameCar))
mkdir('images/' . $nameCar);
Извиняюсь, что не по теме, но вы передаёте данные, введённые пользователем из $_POST['nameCar'] в mkdir. Если в $_POST['nameCar'] прислать "../../", то mkdir создаст папку выше вашей /images/
Это может быть небезопасно. Любые данные от пользователя надо проверять и фильтровать.

Цитата:
Сообщение от Javany Посмотреть сообщение
Хотел добавить $value в uploadImageFile('images',$f); но получаю ошибку что переменная не определена
А где вы берёте эту $value? Просто после того, как отработал цикл:
Код:
<?php
			foreach ($direct as $value){
				if($value != '.'&& $value !='..'){
echo '<option value="'.$value.'">'.$value.'</option>';}
}

?>
$value становится неопределённой.
Безопасность с Content Security Policy

Последний раз редактировалось Ottava; 29.05.2018 в 12:28.
Ottava вне форума Ответить с цитированием
Старый 30.05.2018, 10:46   #4
Javany
Пользователь
 
Регистрация: 15.05.2018
Сообщений: 75
По умолчанию

Спасибо всем, есть решение. Нужно было создать функции.
Код:
function makeCaurusel(){
	$nameCar = isset($_POST['nameCar']) ? $_POST['nameCar']:'';
	if(!empty($nameCar) && !file_exists('images/' . $nameCar))
		mkdir('images/' . $nameCar);
}

function uploadMultipleImagesCaurusel(){

	for($i = 0; $i<count($_FILES['userFile']['name']);$i++)
	{
		$f =[
			'name'=>$_FILES['userFile']['name'][$i],
			'error'=>$_FILES['userFile']['error'][$i],
			'size'=>$_FILES['userFile']['size'][$i],
			'tmp_name'=>$_FILES['userFile']['tmp_name'][$i],
			'type'=>$_FILES['userFile']['type'][$i],
		];

		uploadImageFile('images/'.$_POST['select_folder'],$f);
	}
	// showArray($f);
	header('Location: index.php?page=carousel');
	exit;
}
и допилить форму
Код:
			<form method="POST" action="index.php?page=carousel&action=uploadMultipleImagesCaurusel" enctype="multipart/form-data">
		
		<div class="col"><h2 style="color:blue; text-align: center; ">Добавить изображение</h2>
			<span>Выберите карусель</span><br>
			<select name="select_folder">

				<?php
				$direct = scandir('images');
				foreach ($direct as  $value){
					if($value != '.' && $value !='..' && is_dir('images/'.$value)){
						echo '<option>'.$value.'</option>';}
				}

?>
			</select>
			<br>

		<span>Выберите изображение</span><br>
			<input class="btn btn-primary" type="file" name="userFile[]" multiple>
<button  type="submit" class="btn btn-primary">Submit</button>


		</div>
	
	</form>

Цитата:
Сообщение от Ottava Посмотреть сообщение
Это может быть небезопасно. Любые данные от пользователя надо проверять и фильтровать.
Согласен с Вами, но пока стоит задача понять принцип работы с папками и файлами. Всему своё время.
Не задавай вопрос, если не знаешь что делать с ответом...
Javany вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Папки и файлы в директории саша40 Общие вопросы Delphi 19 08.01.2024 18:34
Поиск папки по имени в директории artemavd Общие вопросы Delphi 4 06.08.2010 08:18
Как узнать все папки в указаной директории? blackstersl Общие вопросы Delphi 4 17.06.2009 13:23
Загрузка реса из другой директории Alex Cones Общие вопросы Delphi 3 22.05.2009 18:51
Выбрать имя папки из директории Македонский Общие вопросы Delphi 15 29.08.2007 10:48