Insert image path into DB and file on server

0

I had an insert form to add some fields. But I also wanted to insert an image to a folder on the server and the image path to a table in the database but I'm not able to.

<form action="enviar_registo_produto.php" enctype="multipart/form-data" method="POST" >

    <div class="status alert alert-success" style="display: none"></div>

    <div class="form-group">
        <label>Nome</label>
        <input name="nome" class="form-control" placeholder="(Nome do Produto)">
    </div>

    <input name="id_produto" type="hidden" class="form-control">

    <div  class="form-group">
        <label>Preço</label>
        <input name="preco" class="form-control" placeholder="(Preco Do Produto)">
    </div>

    <div  class="form-group">
        <label>Descrição</label>
        <textarea name="descricao" class="form-control" placeholder="(Descrição do Produto)" rows="3"></textarea>
    </div>

    <div  class="form-group">
        <label>Foto do Produto</label>
        <input name="foto" type="file" size="100">
        <input type="hidden" name="MAX_SIZE_FILE" value="300000">
    </div>

    <div  class="form-group">
        <label>id_categoria</label>
        <select name="id_categoria" class="form-control">
            <option value="1">1 - Pratos Do Dia</option>
            <option value="2">2 - Petiscos</option>
            <option value="3">3 - Bebidas</option>
            <option value="4">4 - Sobremesas</option>
        </select>
    </div>

    <button type="submit" name="enviar" value="Enviar" class="btn btn-outline btn-primary btn-sm">Enviar</button>
    <input type="reset" class="btn btn-outline btn-warning btn-sm" name="BTApaga" value="Apagar">

    <br/>
    <br/>  
</form>

And in php I have this code that is constantly giving me the error "An error occurred while uploading"

<?php

header('Content-Type: text/html; charset=UTF-8');

$nome=($_POST["nome"]);
$preco=($_POST["preco"]);
$descricao=($_POST["descricao"]);
$id_categoria=($_POST["id_categoria"]);

$tamanho_maximo = $_POST["MAX_SIZE_FILE"];
$tipos_imagem = array("image/gif", "image/jpeg", "image/x-png", "image/bmp");
$ficheiro = $_FILES['foto'];

include ("ligaBD.php");

$existe="Select * from Produtos where nome='$nome'";

$faz_existe= mysqli_query($ligaBD, $existe);

$jaexiste= mysqli_num_rows($faz_existe);

if($jaexiste==0){
    if ($ficheiro['error'] != 0) {
        echo '<p>Erro no upload do ficheiro!<br>';
        switch ($ficheiro['error']) {
            case UPLOAD_ERR_INI_SIZE:
                echo 'O ficheiro excede o tamanho máximo permitido!';
                break;
            case UPLOAD_ERR_FORM_SIZE:
                echo 'O ficheiro enviado é muito grande!';
                break;
            case UPLOAD_ERR_PARTIAL:
                echo 'O processo de upload não foi concluído!';
                break;
            case UPLOAD_ERR_NO_FILE:
                echo 'Não foi indicado nenhum ficheiro para upload!';
                break;
        }
        echo '</p>';
        exit;
    }

    if ($ficheiro['size']==0 OR $ficheiro['tmp_name']==NULL) {
        echo "<script>alert('Nenhum ficheiro enviado');window.location ='insert_produtos.php';</script>";
        exit;
    }

    if ($ficheiro['size']>$tamanho_maximo) {
        echo '<p>O ficheiro enviado é muito grande (Tamanho máximo = ' . $tamanho_maximo . ')</p>';
        exit;
    }

    $destino = '../../imagens_produtos/';
    $destino .= $ficheiro['name'];

    if (!move_uploaded_file($ficheiro['tmp_name'],$destino)) {
        echo "<script>alert('Ocorreu um erro durante o Upload!');window.location ='insert_produtos.php';</script>";
    } else {
        $insere_produto= "INSERT INTO Produtos( nome, preco, descricao, foto, id_categoria) VALUES ('".$nome."','".$preco."','".$descricao."','".$ficheiro['name']."','".$id_categoria."')";

        $faz_insere_produto= mysqli_query($ligaBD, $insere_produto);

        echo"<script>alert('Produto inserido com sucesso!');window.location ='index.php';</script>";
    }

} else {
    echo "<script>alert('O nome do produto ja existe!');window.location ='insert_produtos.php';</script>";
}

?>
    
asked by anonymous 04.07.2018 / 10:56

1 answer

1

The problem seems to be in the path to the destination folder of the image, the relative path will not be correct because php is running in a folder other than the one with the uploading file, this should be some environment-specific configuration where php is running.

I would suggest that you define a variable that is the folder where your uploading file is and then use that as the "root" for your path

// CWD - current working dir, mas podes dar o nome que quiseres claro
define('CWD', realpath(dirname(__FILE__)));

// altera o teu $destino para fazer uso dessa variável
$destino = CWD.'../../imagens_produtos/';
$destino .= $ficheiro['name'];

Another option will be the $destino variable being an absolute path instead of being relative, the problem with this solution is that if you change this server application, it almost certainly will not work because the paths will be different.

$destino = '/homes/i15630/public_html/PAP_TASQUINHA/imagens_produtos/';
$destino .= $ficheiro['name'];
    
04.07.2018 / 11:59