Insert image path in BD and file on server

Asked

Viewed 35 times

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>";
}

?>
  • Is there a specific error or just doesn’t work?

  • These two errors appear to me:

  • Warning: move_uploaded_file(../../imagens_products/13D910D5.PNG): failed to open stream: No such file or directory in /homes/i15630/public_html/PAP_TASQUINHA/Adminpanel/enviar_registo_product.php on line 61

  • Warning: move_uploaded_file(): Unable to move '/tmp/phprxqr03' to '.. /.. /imagens_produtos/13D910D5.PNG' in /homes/i15630/public_html/PAP_TASQUINHA/Adminpanel/enviar_registo_produto.php on line 61 @Leite

  • Fate, I presume, is ~/i5630/public_html/PAP_TASQUINHA/imagens_produtos, that folder exists and has the correct permissions?

  • Yes there is, I’ve checked the permissions and you’ve got them all

  • I suggest you pass the full destination instead of just .. /.. /imagens_products/

Show 2 more comments

1 answer

1


The problem seems to be on the way to the target folder of the image, the relative path will not be correct because php is running in a folder other than the one that has the upload file, this must be some specific configuration of the environment php is running in.

I would suggest that you define a variable that is the folder where your uploading file is and then use it 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 variable $destino be an absolute path rather than being relative, the problem with this solution is that if you change this server application, it will almost certainly stop working because the paths will be different.

$destino = '/homes/i15630/public_html/PAP_TASQUINHA/imagens_produtos/';
$destino .= $ficheiro['name'];
  • Worked from the first option @milk

  • Good! Accept the answer, it may be useful for someone who has a similar problem in the future :)

  • Thanks for the help and regards!

  • 1

    Good luck to PAP (I did mine 15 years ago already...)! I hope you do well after the presentation, personally, it seems to me that you are doing well well :)

  • Thanks :) but I already made mine last year, I made a website selling computer products. This is for a colleague who’s in that phase and I’m trying to lend a hand

Browser other questions tagged

You are not signed in. Login or sign up in order to post.