Sending / Uploading images with php [closed]

5

Form

<label>Imagem do produto:</label>
<input type="file" name="imagem-produto">

Script

$foto = $_POST["imagem-produto"];
$tamanhoMax = 1024 * 1024; # 1MB

if (isset($_FILES['imagem-produto']['name']) && $_FILES['imagem-produto']['error'] == 0):
    if ($_FILES['imagem-produto']['size'] < $tamanhoMax):
        $arquivoTMP = $_FILES['arquivo']['tmp_name'];
        $nomeF = $_FILES["imagem-produto"]["name"];
        //Seleciona extensão
        $extensaoF = pathinfo($nomeF, PATHINFO_EXTENSION);
        //Converte a extensão para minúsculo
        $extensaoF =  strtolower($extensaoF);
        //Somente imagens .jpg;.jpeg;.png
        if (strstr('.jpg;.jpeg;.png', $extensaoF)):
            //nome único para a imagem
            //Evita nomes com acentos ou caracteres alfanuméricos
            $novoNomeF = uniqid(time()).$extensaoF;
            //Concatena a pasta com o nome
            $destino = 'imagens_produtos/' . $novoNomeF;
            if (@move_uploaded_file($arquivoTMP, $destino)):
?>
                <p class="alert success">Sua foto foi cadastrada com sucesso.</p>
<?php
            ;else:
?>
            <p class="alert error">Erro ao salvar arquivo, aparentemente você não tem permissão de escrita</p>
<?php
            endif;
        ;else:
?>
        <p class="alert error">Só aceitamos arquivos com as extensões <span>.jpg</span>, <span>.png</span> ou <span>.jpeg</span> .</p>
<?php
        endif;
    ;else:
?>
        <p class="alert error">O arquivo de imagem ultrapassa o limite de peso. <span>(0.5MB)</span></p>
<?php
    endif;
;else:
?>
    <p class="alert error">Você não enviou nenhum arquivo.</p>
<?php
endif;
?>

I made this script to write images to the server, but it always goes into the first error. How to solve ? Is there any other problem in the code?

* First error = first condition else ( <p class="alert error">Você não enviou nenhum arquivo.</p> )

    
asked by anonymous 13.12.2016 / 10:24

2 answers

4

Your code is pretty confusing, and you've used $_POST["imagem-produto"] and $_FILES['imagem-produto'] at the same time, there's no sense in the same name in two types of variables, the site has several simple download examples in PHP documentation too , use as is, learn what each variable superglobal means.

Another problem is that you used different names here:

$arquivoTMP = $_FILES['arquivo']['tmp_name'];
$nomeF = $_FILES["imagem-produto"]["name"];

This $_FILES['arquivo'] and other $_FILES["imagem-produto"] , it is no use to leave typing randomly or copy code samples without knowing what you are doing, do not understand how a negative criticism is positive, learn to use variables, do something like:

if (isset($_FILES['imagem-produto']['name']) && $_FILES['imagem-produto']['error'] == 0) {
    $arquivo = $_FILES['imagem-produto'];

    if ($arquivo['size'] < $tamanhoMax) {
        $arquivoTMP = $arquivo['tmp_name'];
        $nomeF = $arquivo["name"];

In addition to reducing the code you avoid being confused with the keys.

Your problem was pretty much the same as this one Form does not execute PHP script , a series of "errors of typing ", because I did not know what I was doing, maybe copied code from somewhere, I recommend that you use variables to reduce code and learn first how things really work, the documentation is for this, these links should help you :

First and foremost

Make sure your folder is writable imagens_produtos

Revised Code

I've refacted all your code, reorganized it, and I believe it works now.

  

Note: I've changed the alternative syntax for normal, this is because the alternative syntax is more unusual to use generally people use only in small ifs and not in long php codes, in my opinion it would be better employed where we have a lot of HTML and little PHP, for example templates, something looks better used

<?php if ($a == 5): ?>
A é igual a 5
<?php endif; ?>    

Complete code:

<?php

$tamanhoMax = 1024 * 1024; # 1MB

if (isset($_FILES['imagem-produto']['name'])) {
    $arquivo = $_FILES['imagem-produto']; //Sua variavel

    if ($arquivo['error'] != 0) {
        switch ($code) {
            case UPLOAD_ERR_INI_SIZE:
                $message = "O upload excedeu a configuração do upload_max_filesize no php.ini";
                break;
            case UPLOAD_ERR_FORM_SIZE:
                $message = "O upload excedeu o MAX_FILE_SIZE";
                break;
            case UPLOAD_ERR_PARTIAL:
                $message = "O upload foi feito parcialmente";
                break;
            case UPLOAD_ERR_NO_FILE:
                $message = "Não foi selecionado um arquivo";
                break;
            case UPLOAD_ERR_NO_TMP_DIR:
                $message = "Pasta temporaria não encontrada";
                break;
            case UPLOAD_ERR_CANT_WRITE:
                $message = "Erro na escrita do disco";
                break;
            case UPLOAD_ERR_EXTENSION:
                $message = "Uma extensão do PHP interrompeu o upload do arquivo";
                break;

            default:
                $message = "Erro desconhecido";
        }

        echo '<p class="alert error">', $message,'</p>';
    } else if ($arquivo['size'] < $tamanhoMax) {
        $arquivoTMP = $arquivo['tmp_name'];
        $nomeF = $arquivo["name"];

        //Seleciona extensão
        $extensaoF = pathinfo($nomeF, PATHINFO_EXTENSION);

        //Converte a extensão para minúsculo
        $extensaoF =  strtolower($extensaoF);

        //Somente imagens .jpg;.jpeg;.png
        if (strstr('.jpg;.jpeg;.png', $extensaoF)) {

            //nome único para a imagem
            //Evita nomes com acentos ou caracteres alfanuméricos
            $novoNomeF = uniqid(time()).$extensaoF;

            //Concatena a pasta com o nome
            $destino = 'imagens_produtos/' . $novoNomeF;

            if (@move_uploaded_file($arquivoTMP, $destino)) {
                echo '<p class="alert success">Sua foto foi cadastrada com sucesso.</p>';
            } else {
                echo '<p class="alert error">Erro ao salvar arquivo, aparentemente você não tem permissão de escrita</p>';
            }
        } else {
            echo '<p class="alert error">Só aceitamos arquivos com as extensões <span>.jpg</span>, <span>.png</span> ou <span>.jpeg</span> .</p>';
        }
    } else {
        echo '<p class="alert error">O arquivo de imagem ultrapassa o limite de peso. <span>(0.5MB)</span></p>';
    }
} else {
    echo '<p class="alert error">Você não enviou nenhum arquivo.</p>';
}

And the form should look like this:

<form enctype="multipart/form-data" action="SUA PÁGINA PHP AQUI" method="POST">
    <label>Imagem do produto:</label>
    <input type="file" name="imagem-produto">
    <input type="submit" value="Enviar">
</form>
    
14.12.2016 / 17:23
3

Put enctype="multipart/form-data" into form.

Or you're trying to save somewhere without permission

    
13.12.2016 / 11:00