Ir ao conteúdo
  • Cadastre-se

Problema com PHP+JS : Não consigo enviar fotos para o banco.


noghss

Posts recomendados

Meu site tem um painel de notícias, onde você cadastra uma notícia no banco através de um form, e ela aparece na página de notícias do site, e no campo texto desse form eu uso o fckeditor (conjunto de funções que permite formatar o texto com tamanho da fonte, tipo da fonte, alinhamento e permite também adicionar fotos).

Meu problema é que no servidor local (localhost) funciona normalmente, mais quando mando para o servidor Web as fotos inseridas no texto na hora do cadastro não aparecem na página de notícias.

Não sei se preciso de uma função para mandar fotos para o servidor quando o usuário adicionar uma foto no texto ou se teria outra solução.

Help! Agradeço desde já.

Link para o comentário
Compartilhar em outros sites

você deve se lembrar que o form deve ser declarado da seguinte forma:

<fomr enctype="multipart/form-data"

nao pode esquecer desse enctype, quando quiser manipular arquivos no formulario.

Agora vamos ao 2o ponto do seu problema, no seu banco de dados, que espero que seja mysql, pois desconheço o procedimento nos demais, voce deve ter um campo chamado la: arquivo, foto, imagem, etc... esse campo deve ser do tipo blob, eu utilizo medium-blob(ocupa 16mb em disco), o large blob é para 4gb e os outros nao lembro mas abaixo de 16mb que utilizo vem o de 64kb ou seja, dispensavel praticamente...

quando for capturar o arquivo vindo da pagina, você deve procurar saber onde ficam seus arquivos temporarios no servidor, e tera de tratar o arquivo com essa variavel do PHP, $_FILES; ex:

<form method=post action=teste.php name=frm1 enctype="multipart/form-data">

<input type=file name=arquivo>

<input type=submit value="enviar">

</form>

no mesmo script você pode capturar:

<?php

if(isset($arquivo)) {

if(!empty($arquivo)) {

$arq = $_FILES['arquivo']['tmp_name']; // aqui esta o arquivo q você manipula

$tam = $_FILES['arquivo']['size']; // tamanho do arquivo no disco

$typ = $_FILES['arquivo']['type']; // tipo do arquivo se pod filtrar a entrada

com essa informacao

$nom = $_FILES['arquivo']['name']; // nome do arquivo no disco do usuario se era foto.jpg tera o mesmo nome descrito aqui

agora abra o arquivo usando fopen e grave o conteudo em seu banco de dados:

$abridor = fopen($arq, "r"); // abrindo como leitura

if($abridor) {

$conteudo = stripslashes(fread($abridor, $tam));

fclose($abridor);

$instrucaoSQL = "insert into tabela values(default,'$conteudo')";

mysql_insert($instrucaoSQL);

// e por ai vai

} else {

die("Permissao negada ao abrir arq temporario...");

}

?>

}

}

?>

Link para o comentário
Compartilhar em outros sites

Bom dia fbranco,

o enctype do meu form estava certo, e meu banco é MySql sim,

mais tem uma parte que não entendi...

aqui esta meu script onde faço o insert:

<?php

include("conecta.php"); //Arquivo que faz a conexão com o banco

$sql = "INSERT INTO noticias (

data,

hora,

titulo,

resumo,

texto

) VALUES (

NOW(),

NOW(),

'".$_POST['titulo']."',

'".$_POST['resumo']."',

'".$_POST['DsTexto']."'

)";

$sql = mysql_query($sql)

or die ("Houve erro na gravação dos dados.");

?>

tem como você me falar como ficaria?

onde eu colocaria o POST no seu script

Agradeço desde já, já ajudou muito mesmo :)

Link para o comentário
Compartilhar em outros sites

sem saber o restante da estrutura da primeira tabela q você divulgou, nesta da pra ver q nao tem 1 campo que armazene a imagem, o correto é você criar uma tabela para isso, armazenando a imagem em banco de dados você nao precisa criar os arquivos novamente na sua pasta, com isso evita poluiçao de arquivos no diretorio web de trabalho. Crie uma tabela com a estrutura :

id int 11

imagem mediumblob

tipo varchar 60

width varchar 5

height varchar 5

nome varchar 64

id_noticia int 11

o id_noticia é 1 referencia ao id da tabela noticia ou seja, aqui você vai jogar o id da noticia pra saber a qual noticia pertence a imagem armazenada, eu armazenaria width e height para saber a altura e largura da imagem em pixels, com isso você sabe o tamanho real da imagem, mas com certeza por se tratar de uma tabela de noticias você vai querer adotar um padrão no tamanho das imagens na hora de exibi-las então você coloca esse padrão no width e heigth do <img, espero que lhe ajude.

Link para o comentário
Compartilhar em outros sites

  • Moderador

pelo contario amigo, armazenando imagens no banco, faz com que a consulta seja mais lenta e por sua vez acaba onerando o banco de dados. armazenar imagens no banco nao é uma boa escolha.

a melhor alternativa que deixa mais leve o bancoi e a consulta é criar um diretorio especifico para as imagens e salvando no banco apenas a referencia da imagem. por exemplo, quando você faz um upload com o php, você move a imagem do seu computador para o diretorio do seu servidor, com o nome igual ao valor da linha referente ao banco de dados.

assim você resgata a foto com mais facilidade, ao contrario da sugestao dada mais acima, que para mostras as imagens cadastradas dentro do banco de dados.. é preciso criar um arquivo mostraFoto.php digamos assim, com um cabeçalho informando que e um arquivo e que faça uma consulta ao banco e retornando a imagem.

o outro jeito é mais simples e rápido, pois você faz sua consulta normal e atribui na variavel por exemplo:

$imagem = "diretorio/" . $id . ".jpg";

e então apenas chamar com: echo $imagem

pelo que eu andei vendo você nao tem no seu script algo que receba a imagem. você tem que ter algo parecido com isto:


//recebe a imagem vinda do formulario
$foto = $_FILES["foto"] ["name"];

$titulo = $_POST['titulo'];
$resumo = $_POST['resumo'];
$dsTexto = $_POST['DsTexto'];

//faz a sua inserçao no banco
$sql ="INSERT INTO noticias (data,hora,titulo,resumo,texto) VALUES (curdate(),curtime(),'$titulo','$resumo','$dsTexto')";

$comando = mysql_query($sql);

if ($comando) {
$id = mysql_insert_id($conecta);
mysql_close($conecta);

$temp = $_FILES["foto"]["tmp_name"];
$destino = "diretorio/" . $id . ".jpg";

// Copia o arquivo para o destino
copy($temp, $destino);

echo "<script>
alert('Ok! Cadastrado');
window.location.href='paginaDeRetorno.php';
</script>";

}else{

mysql_close($conecta);
echo "<script>
alert('Erro... Nao pode ser cadastrado');
history.go(-1);
</script>";

}

com isso você copia o arquivo do seu computador, para o diretorio desejado no seu servidor, salvando a foto com o nome igual a ID do campo que esta inserindo no banco.

abraço

Link para o comentário
Compartilhar em outros sites

Muito obrigado, os dois jeitos funcionam, mas não do jeito que eu quero...

Colocando <input type="file" name="imagem"> no form a imagem vai para o banco/diretório e eu consigo resgatála depois, mais o que eu estava tentando fazer e que estava dando certo no localhost, era inserir uma imagem no meio do texto arrastando a mesma para o campo textarea (o fckeditor me permite fazer isto), e ela aparecer no formulário de noticias apenas chamando o campo texto da tabela noticias...

Mas com as dicas que vocês me deram acho que vou acabar dando um jeito aqui :)

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!