Uploading PHP files

1

Good Night, I'm currently creating a CRUD, where you'll need to upload a file. But I have the following problem:

Currently I can upload the file normally, placing it inside a folder in the application and saving the path in the database, it shows in the list quietly, beautiful.

But when I go to edit, however much I do not change the image, even though the image stops working.

If it's bad to see it, follow the github link: link

If I change the image or do not change, this error is when accessing the file.

The requested resource /Resources/upload/ was not found on this server.

Follow the codes:

<?php require_once('cabecalho.php'); ?>
<?php require_once('carregaTask.php'); ?>
<div class="container">
  <form method="post" action="editaTask.php">
    <input type="hidden" name="codigo" value="<?=$task->getCodigo()?>">
    <h1>Formulario de Edição</h1>
    <table class="table table-striped table-hover">
      <tr>
        <td>
          Nome:
        </td>
        <td>
          <input type="text" name="nome" class="form-control" value="<?=$task->getNome()?>"/>
        </td>
      </tr>
      <tr>
        <td>
          Arquivo:
        </td>
        <td>

         Escolher Arquivo <input type="file" name="arquivo" value="<?=$task->getArquivo()?>"/>

        </td>
      </tr>
      <tr>
        <td>
          Descricao:
        </td>
        <td>
          <textarea name="descricao" class="form-control" rows="5"><?=$task->getDescricao()?></textarea>
        </td>
      </tr>
    </table>
    <div class="text-center">
      <button type="submit" class="btn btn-lg btn-primary">Confirmar Edição</button>
    </div>
  </form>
</div>

<?php require_once('rodape.php'); ?>

...

<?php


function upload(){

  // Pasta onde o arquivo vai ser salvo
  $_UP['pasta'] = 'Resources/upload/';
  // Tamanho máximo do arquivo (em Bytes)
  $_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb
  // Array com as extensões permitidas
  $_UP['renomeia'] = false;
  // Array com os tipos de erros de upload do PHP
  $_UP['erros'][0] = 'Não houve erro';
  $_UP['erros'][1] = 'O arquivo no upload é maior do que o limite do PHP';
  $_UP['erros'][2] = 'O arquivo ultrapassa o limite de tamanho especifiado no HTML';
  $_UP['erros'][3] = 'O upload do arquivo foi feito parcialmente';
  $_UP['erros'][4] = 'Não foi feito o upload do arquivo';
  // Verifica se houve algum erro com o upload. Se sim, exibe a mensagem do erro
  if ($_FILES['arquivo']['error'] != 0) {
    die("Não foi possível fazer o upload, erro:" . $_UP['erros'][$_FILES['arquivo']['error']]);
    exit; // Para a execução do script
  }
  // Caso script chegue a esse ponto, não houve erro com o upload e o PHP pode continuar

  // Faz a verificação do tamanho do arquivo
  if ($_UP['tamanho'] < $_FILES['arquivo']['size']) {
    echo "O arquivo enviado é muito grande, envie arquivos de até 2Mb.";
    exit;
  }
  // O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta
  // Primeiro verifica se deve trocar o nome do arquivo
  if ($_UP['renomeia'] == true) {
    // Cria um nome baseado no UNIX TIMESTAMP atual e com extensão .jpg
    $nome_final = md5(time()).'.jpg';
  } else {
    // Mantém o nome original do arquivo
    $nome_final = $_FILES['arquivo']['name'];
  }

  // Depois verifica se é possível mover o arquivo para a pasta escolhida
  if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $_UP['pasta'] . $nome_final)) {
    // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo
    echo "Upload efetuado com sucesso!";
    echo '<a href="' . $_UP['pasta'] . $nome_final . '">Clique aqui para acessar o arquivo</a>';
  } else {
    // Não foi possível fazer o upload, provavelmente a pasta está incorreta
    echo "Não foi possível enviar o arquivo, tente novamente";
  }

  $path = $_UP['pasta'] . $nome_final;
  return $path;
}

?>

...

<?php require_once('../vendor/autoload.php'); ?>
<?php require_once('upload.php'); ?>
<?php
use App\Classes\Task as Task;

$arquivo = upload();
$task = new Task();
$task->setCodigo($_POST['codigo']);
$task->setNome($_POST['nome']);
$task->setDescricao($_POST['descricao']);
$task->setArquivo($arquivo);
print_r('<pre>');
print_r($task);
print_r('<pre>');
$task->update();
header('Location: GerenciarTasks.php');
die();

 ?>

...

  public function update(){
    $query = "UPDATE task SET nome = :nome, descricao = :descricao, arquivo = :arquivo
    WHERE codigo = :codigo";
    $conexao = Conexao::conn();
    $stm = $conexao->prepare($query);
    $stm->bindValue(':codigo',$this->codigo);
    $stm->bindValue(':nome',$this->nome);
    $stm->bindValue(':descricao',$this->descricao);
    $stm->bindValue(':arquivo',$this->arquivo);

    $stm->execute();
  }
    
asked by anonymous 06.01.2018 / 00:01

3 answers

0

Hello, I came across the Whastapp PHP Brasil group that you posted, I'm William.

Let us help you.

So by the error what indicates is that the upload is not finding the folder, then you first have to do the check if the folder exists, because if the folder does not exist in the path you are specifying the upload class you you are using is not creating it for you, you will soon have to do it manually.

I believe that if you do this check your file will work normally and also take into account the answer above Flavio Honorato, you can not forget the enctype multipart / form-data if not your $_FILES array will not be filled .

    
06.01.2018 / 15:55
1

It may not be the problem, but it is missing the multipart / form-data in the form

    
06.01.2018 / 14:33
1

And also have to validate the request when it is in the edition, you take the path from the photo to the bank and compare it with the file in the folder (this will also serve to delete the old photo if you want to update it too). Once I have it on the pc I can get the idea.

    
06.01.2018 / 14:37