@HryhoriiShcherbak

Почему не работает цикл в PHP?

Всем привет! От веб программирования я очень далек, но уж так сложилось, что мне нужно сделать одну задачу, но как оказалось мне это не по зубам.
И так, для начала мне нужно чтобы когда пользователь выберет разные параметры через radio button отправить этот файл в нужную папку.
Вот код который у меня есть:
<?php
  include_once('functions.php')
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Hochladen von Bildern auf den Server</title>
  </head>
  
  <body>
  
 <form action="functions.php" method="post">
  A4 <input type="radio" name="ans" value="ans1">
  A3 <input type="radio" name="ans" value="ans2"  /><br />

</form>
  
    <form method="post" enctype="multipart/form-data">
      <input type="file" name="file">
      <input type="submit" value="Datei herunterladen!">
    </form>
	

    <?php
    // если была произведена отправка формы
    if(isset($_FILES['file'])) {
      // проверяем, можно ли загружать изображение
      $check = can_upload($_FILES['file']);
    
      if($check === true){
        // загружаем изображение на сервер
        make_upload($_FILES['file']);
        echo "<strong>Die Datei wurde erfolgreich heruntergeladen!</strong>";
      }
      else{
        // выводим сообщение об ошибке
        echo "<strong>$check</strong>";  
      }
    }
    ?>
  </body>
</html>

А также
<?php
  function can_upload($file){
	// если имя пустое, значит файл не выбран
    if($file['name'] == '')
		return 'Вы не выбрали файл.';
	
	/* если размер файла 0, значит его не пропустили настройки 
	сервера из-за того, что он слишком большой */
	if($file['size'] == 0)
		return 'Файл слишком большой.';
	
	// разбиваем имя файла по точке и получаем массив
	$getMime = explode('.', $file['name']);
	// нас интересует последний элемент массива - расширение
	$mime = strtolower(end($getMime));
	// объявим массив допустимых расширений
	$types = array('jpg', 'png', 'gif', 'bmp', 'jpeg', 'pdf', 'ppt', 'ods', 'dotx', 'docx', 'doc');
	
	// если расширение не входит в список допустимых - return
	if(!in_array($mime, $types))
		return 'Недопустимый тип файла.';
	
	return true;
  }



if ($answer == "ans1") {
$answer = $_POST['ans'];  	
     function make_upload($file){	
	// формируем уникальное имя картинки: случайное число и name
	$name = mt_rand(0, 10000) . $file['name'];
	copy($file['tmp_name'], 'Folder_A4_SW_EIN/' . $name); //ПАПКА ДОК
	 return true;    
	 }
}else{
    function make_upload($file){	
	// формируем уникальное имя картинки: случайное число и name
	$name = mt_rand(0, 10000) . $file['name'];
	copy($file['tmp_name'], 'img7/' . $name); //ПАПКА, КУДИ ПАДАЮТЬ ДОКУМЕНТИ
  }      
}   
?>

И вот проблема в том что, что бы я не делал, документы всегда падают в одну и ту же папку img7. В не зависимости какой radio button я выбрал.
Подскажет кто то что не так и как можно исправить?
Спасибо!
  • Вопрос задан
  • 439 просмотров
Решения вопроса 1
irishmann
@irishmann
Научись пользоваться дебаггером
Ошибка с формами, радио кнопки у вас на одной форме, а отправляете файл вы совсем через другую спс. тов. Дмитрий
code
<form action="functions.php" method="post">
  A4 <input type="radio" name="ans" value="ans1">
  A3 <input type="radio" name="ans" value="ans2"  /><br />
</form>
  
    <form method="post" enctype="multipart/form-data">
      <input type="file" name="file">
      <input type="submit" value="Datei herunterladen!">
    </form>



Надо сделать так примерно
code
<form action="#" method="post" enctype="multipart/form-data">
            A4 <input required type="radio" name="ans" value="ans1">
            A3 <input type="radio" name="ans" value="ans2">
            <input type="file" name="file">
            <input type="submit" value="Загрузить">
        </form>


Проверяете условие, а потом объявляете переменную, естественно у вас условие не выполняется.
code
if ($answer == "ans1") {
$answer = $_POST['ans'];

Надо сначала объявлять переменную, потом уж делать с ней что душе угодно. Но именно в данном случае в объявлении функции она не к месту. См. след. пункт.
code
$answer = $_POST['ans'];  	
if ($answer == "ans1") {

Как заметил Дмитрий так функции нельзя объявлять
code
if ($answer == "ans1") {
$answer = $_POST['ans'];  	
     function make_upload($file){	
  // формируем уникальное имя картинки: случайное число и name
  $name = mt_rand(0, 10000) . $file['name'];
  copy($file['tmp_name'], 'Folder_A4_SW_EIN/' . $name); //ПАПКА ДОК
   return true;    
   }
}else{
    function make_upload($file){	
  // формируем уникальное имя картинки: случайное число и name
  $name = mt_rand(0, 10000) . $file['name'];
  copy($file['tmp_name'], 'img7/' . $name); //ПАПКА, КУДИ ПАДАЮТЬ ДОКУМЕНТИ
  }      
}


Вынесите название в отдельный аргумент
code
function make_upload($file, $folder)
{    
    // формируем путь + уникальное имя картинки
    $name = $folder . DIRECTORY_SEPARATOR . uniqid(true) . $file['name'];
    copy($file['tmp_name'], $name);
    return true;    
}
UPD: рабочий г-но код
<?php
    include_once('functions.php')
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Загрузить изображения на сервер</title>
    </head>
    <body>
        <form action="#" method="post" enctype="multipart/form-data">
            A4 <input required type="radio" name="ans" value="ans1">
            A3 <input type="radio" name="ans" value="ans2">
            <input type="file" name="file">
            <input type="submit" value="Загрузить">
        </form>
        <?php
        // если была произведена отправка формы
            if(isset($_FILES['file']))
            {
                // проверяем, можно ли загружать изображение
                $check = can_upload($_FILES['file']);

                if($check === true)
                {
                    $folder = $_POST['ans'] == 'ans1' ? 'Folder_A4_SW_EIN' : 'img7';
                    make_upload($_FILES['file'], $folder); // загружаем изображение на сервер
                    echo "<strong>Файл был успешно загружен!</strong>";
                }
                else
                {
                    // выводим сообщение об ошибке
                    echo "<strong>$check</strong>";  
                }
            }
        ?>
    </body>
</html>

<?php
    function can_upload($file)
    {
        // если имя пустое, значит файл не выбран
        if($file['name'] == '')
        return 'Вы не выбрали файл.';

        /* если размер файла 0, значит его не пропустили настройки 
        сервера из-за того, что он слишком большой */
        if($file['size'] == 0)
        return 'Файл слишком большой.';

        // разбиваем имя файла по точке и получаем массив
        $getMime = explode('.', $file['name']);
        
        // нас интересует последний элемент массива - расширение
        $mime = strtolower(end($getMime));
        
        // объявим массив допустимых расширений
        $types = array('jpg', 'png', 'gif', 'bmp', 'jpeg', 'pdf', 'ppt', 'ods', 'dotx', 'docx', 'doc');

        // если расширение не входит в список допустимых - return
        if(!in_array($mime, $types))
        return 'Недопустимый тип файла.';

        return true;
    }

    function make_upload($file, $folder)
    {    
        // формируем путь + уникальное имя картинки
        $name = $folder . DIRECTORY_SEPARATOR . uniqid(true) . $file['name'];
        copy($file['tmp_name'], $name);
        return true;    
    }

Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Каждая форма работает отдельно. Объедините их в одну - и будут у вас одновременно доступны и $_POST['ans'], и $_FILES['file'].
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы