Ir para conteúdo
Fórum Script Brasil
  • 0

Formulário com imagem pro banco PHP


joanita

Pergunta

neste codigo estou a receber um erro que não consigo resolver...

(Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in /home/index.php on line 23)

alem disso mal abre a pagina grava-me logo o registo e exibe o anterior, quando so o deveria fazer apos enviar o form pra base de dados.



<?php
//LIGA-SE Á BASE DE DADOS

include('ligar-bd.php');

//SE FOR PEDIDO UMA CONSULTA

if(!isset($_GET["getfile"])){

//SE ELA NÃO EXISTIR MOSTRA A MENSAGEM DE ERRO

    if ($_FILES["file"]["error"] > 0){
        echo "Erro: " . $_FILES["file"]["error"] . "<br>";

//CASO CONTRÁRIO

    }else{

//EXECUTA AÇÕES DE TRATAMENTO E CODIFICAÇÃO DAS IMAGENS

        move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);

    $bin_string = file_get_contents($_FILES["file"]["name"]);
        $hex_string = base64_encode($bin_string);

//CARREGA TODAS AS OPÇÕES DO FORMULÁRIO

    $nome = $_POST['nome'];

//INSERE OS DADOS NA BASE DE DADOS

    $mysqli->query(" INSERT INTO teste(imagem,nome) VALUES ('" . $hex_string . "','$nome') ");
    }

//SE AINDA NADA FOI PEDIDO PARA SER MOSTRADO

}else{

//SELECIONA NA BASE DE DADOS A ULTIMA ENTRADA

        if ($result = $mysqli->query(" SELECT * FROM teste ORDER BY id DESC ")){

            if($row = $result->fetch_assoc()){
                $output_hex_string = $row["imagem"];
                $output_bin_string = base64_decode($output_hex_string);

                header("Content-Type: image/png");
                header("Content-Length: " . strlen($output_bin_string));

//MOSTRA A ULTIMA ENTRADA

                $result->free();
                echo $output_bin_string;
                }
        }
  }
?>  






<html>
<body>

<form action="" method="POST" enctype="multipart/form-data">
    Nome: <input type="text" name="nome">
    <br>
    Imagem: <input type="file" name="file">
    <br>
    <input type="submit">
</form>






<?php
//MOSTRA OS RESULTADOS

echo "<h2>Nome:<i> $nome </i></h2>";
?>

<img src="index.php?getfile=1">

</body>
</html>

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

não... se estivesse não dava o erro, eu fiz print $_FILES; e aparece apenas escrito "Array"... com print_r $_FILES; aparece Parse error: syntax error, unexpected T_VARIABLE in /home/rpublici/public_html/teste/index.php on line 6

 

não sei se isso se deve ao script estar a gravar no banco um registo vazio mal se abre a pagina, mesmo antes de enviar alguma coisa

Editado por joanita
Link para o comentário
Compartilhar em outros sites

  • 0

dividi em 3 ficheiros e ficou bom, o index.php com o form, o envia.php com o php para enviar e o ultimo_envio.php para include do ultimo post. Gostaria mesmo é de criar um campo para categoria abaixo do Nome,  coisa que ando á meses a tentar e ainda não consegui fazer as categorias :(

Se me puderes ajudar agradeço!

vê como ficou...

 

index.php

<?php
include "estilos/estilos.css";
?>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html>
<body>

<center>
<h2>Adicionar Nova Entrada</h2>
<form action="envia.php" method="POST" enctype="multipart/form-data">

<table align="center" width="300px" border="0" cellpading="4" cellspacing="8"  bgcolor="#f0f0f0">
<tr><td align="center">

<hr size=1 width=300 class="degrade">
Nome:
<br>
<input type="text" name="nome">
<br>
Adicionar uma imagem:
<br>
<input type="file" name="file">

<hr size=1 width=300 class="degrade">
<br>
<input type="submit" value="Adicionar Entrada" class="button buttonfx buttonredondo">
<br>
<br>

</td></tr></table>
</form>
<hr size=1 width=300 class="listado">

</center>

</body>
</html>

 

 

envia.php

<?php
include('ligar-bd.php');

if(!$_GET[getfile]){
if ($_FILES["file"]["error"] > 0){
    echo "Ups... falha no envio, tente novamente. ERRO: " . $_FILES["file"]["error"] . "<br>";
    }else{
    move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
    $bin_string = file_get_contents($_FILES["file"]["name"]);
    $hex_string = base64_encode($bin_string);
    $nome = filter_var($_POST['nome'], FILTER_SANITIZE_STRING);
    $mysqli->query(" INSERT INTO teste(
    imagem,
    nome
    ) VALUES (
    '" . $hex_string . "',
    '$nome'
    ) ");
    }
}else{
    if ($result = $mysqli->query(" SELECT * FROM teste ORDER BY id DESC ")){
        if($row = $result->fetch_assoc()){
            $output_hex_string = $row["imagem"];
            $output_bin_string = base64_decode($output_hex_string);
            header("Content-Type: image/png");
            header("Content-Length: " . strlen($output_bin_string));
            $result->free();
            echo $output_bin_string;
            }
        }
    }
include "ultimo_envio.php";
?>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

 

ultimo_envio.php

<html>
<body>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
echo "
<center>
<hr size=1 width=300 class='degrade'>
Última entrada adicionada:
<br>
<i><b> $nome </b></i>
<hr size=1 width=300 class='listado'>
<a href='envia.php?getfile=1' target='blank''><img src='envia.php?getfile=1'></a>
";
include "index.php";
?>
</center>
</body>
</html>

 

 

Editado por joanita
Link para o comentário
Compartilhar em outros sites

  • 0

A forma mais simples é criar um input text para o nome da categoria e salvar o valor desse input no banco de dados.

Dá pra aprimorar. Em vez do input, usar um <select> que busca as categorias no banco, caso haja uma lista pré-definida de categorias

Link para o comentário
Compartilhar em outros sites

  • 0

pois era isso que queria,  criar um campo para escolher a categoria existente ou digitar a categoria nova, mas o meu problema parte muite de como tudo isso joga com o banco... criar o input é facil, o problema é depois as ligaçoes entre IDs de categorias/subcategorias com o id do $nome.

Neste caso com o meu código que te mostrei acima, podes dar-me um exemplo visual de como farias?

Link para o comentário
Compartilhar em outros sites

  • 0

assim... ? isto parece-me um select comum... como posso depois permitir a inserção de novas categorias que não estejam pre-definidas (supondo que queres adicionar umproduto numa categoria nova não existente)

Categoria:
<br>
<select name="categoria" id="catid">
<option>Aromáticas</option>
<option>Malaguetas</option>
<option>Legumes</option>
<option>Árvores</option>
<option>Sebes e Arbustos</option>
<option>Flores</option>
</select>

Link para o comentário
Compartilhar em outros sites

  • 0

Um campo <select> não permite adicionar valores. Se quiser permitir a inserção de novas categorias, use um campo input text.

 

Sobre a modelagem obsoleta, não entendi seu argumento. A modelagem do banco independe de SGBD. E uso MySQLi orientado a objetos no exemplo. O que acha que está obsoleto?

Link para o comentário
Compartilhar em outros sites

  • 0

ola, não esta nada, pareceu-me estar ainda em msql antigo, mas vi mal desculpa.

então mas  voltando ao assunto, normalmente aparece um input para adicionar nova categoria com um select a frente para escolher uma categoria caso esta já exista e não queiramos criar uma nova.

Link para o comentário
Compartilhar em outros sites

  • 0

Em casos assim, esse input text recebe o nome de uma nova categoria e o salva no banco via Ajax, atualizando o <select>, para que a categoria possa ser selecionada. É uma lógica um pouco mais avançada, mas não é muito complexa. Se você conhecer um pouco sobre Ajax, não terá grandes dificuldades

Link para o comentário
Compartilhar em outros sites

  • 0
Em 07/04/2016 at 17:54, Beraldo disse:

Em casos assim, esse input text recebe o nome de uma nova categoria e o salva no banco via Ajax, atualizando o <select>, para que a categoria possa ser selecionada. É uma lógica um pouco mais avançada, mas não é muito complexa. Se você conhecer um pouco sobre Ajax, não terá grandes dificuldades

olha aí Beraldo...

<div class="formularioPainel">
           
<form action="" method="POST" enctype="multipart/form-data">
    <label>
    <titulo>Selecione ou insira uma nova Categoria ou Subcategoria: </titulo>
    <br>
    <span>Categorias: </span>
    <select name="categoria">
    <option>DEVIA LER E MOSTRAR AS ENTRADAS DO CAMPO "categoria" NA BASE DE DADOS "teste"</option>
    </select>
    </label>
    <br>
    <span>Insira a nova Categoria/Subcategoria: </span>
    <label>
    <input type="text" name="categoria" value=""/>
    </label>
    <input type="submit" value="Enviar" />
    <input type="hidden" name="acao" value="adicionar_categoria" />
</form>

</div>

<?php

// LIGA-SE Á BASE DE DADOS
include('ligar-bd.php');
include('estilos/estilos.css');

// INFORMA QUE VAI USAR UTF8 AO GRAVAR NA BASE DE DADOS
$mysqli->set_charset('utf8');
                                           
    if(isset($_POST['acao']) && $_POST['acao'] == "adicionar_categoria"){
        
        $categoria = $_POST['categoria'];
                   
        // SE A CATEGORIA ESTIVER VAZIA MOSTRA A MENSAGEM
        if($categoria == ""){
            echo "<script>alert('O campo categoria não pode ficar vazio!')</script>";

                        }else{

            // SELECIONA A CATEGORIA NA BASE DE DADOS
            $seleciona = $mysqli->query("SELECT * FROM teste WHERE categoria = '$categoria'");
                   
            //SE A CATEGORIA EXISTIR NA BASE DE DADOS MOSTRA A MENSAGEM
            if(mysqli_num_rows($seleciona) == 1) {
                               echo "<script>alert('Esta categoria já existe!')</script>";

                        }else{

            // INSERE NA BASE DE DADOS
                        $insere = $mysqli->query("INSERT INTO teste (categoria) VALUES('$categoria')");
                        echo "<script>alert('Adicionado com sucesso!')</script>";
            }
        }
    }

?>

 

e na minha tabela tenho estes campos:

`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(50) CHARACTER SET utf8 NOT NULL,
`imagem` longtext CHARACTER SET utf8 NOT NULL,
`catid` int(11) NOT NULL,

`categoria` varchar(50) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`id`)

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...