1
Good evening, I am currently creating a CRUD, where it will be necessary 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, displays in the list quietly, baby.
But when I edit, as much as I don’t change the image, the image still stops working.
If you are bad to view, follow the github link: https://github.com/rafaelmori123/TasksPHP
In case I change the image or do not change, error is this while accessing the file.
The requested resource /Resources/upload/ was not found on this server.
Follows 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();
  }
Yes, Multipart/form-data is missing
– Fabio William Conceição
opa, thank you also friend, that was one of the problems yes
– Rafael Mori