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

erro no php ao subir uma imagem para o m


Guest --jefferson andre da silva --

Pergunta

Guest --jefferson andre da silva --

Estou utilizando o php abaixo :

<?php
$conexao = mysql_connect("localhost", "root", "senhadeacesso") or die (mysql_error());

$associados_1 = mysql_select_db("xcomp",$conexao) or die (mysql_error());

//$listartudo = "SELECT codigo,razao FROM aciarp.associados";
//$resultado = mysql_query($listartudo,$conexao) or die (mysql_error());
//$resultado;

$razao         = $_POST['razao'];
$nome          = $_POST['nomefantasia'];
$cnpj          = $_POST['cnpj'];
$inscricao     = $_POST['inscricao'];
$endereco    = $_POST['endereco'];
$numero        = $_POST['numero'];
$bairro     = $_POST['bairro'];
$cidade     = $_POST['cidade'];
$estado     = $_POST['estado'];
$cep         = $_POST['cep'];
$telefone1     = $_POST['telefone1'];
$telefone2     = $_POST['telefone2'];
$celular     = $_POST['celular'];
$fax         = $_POST['fax'];
$email         = $_POST['email'];
$site         = $_POST['site'];
$contato     = $_POST['contato'];
$horario     = $_POST['horario'];
$ramo         = $_POST['ramo'];
$ponto         = $_POST['ponto'];
$fotosest    = $_POST['fotosest'];
$nomelogin    = $_POST['login'];
$senha         = $_POST['senha'];
//$data         = pegar a data atual

$fp = fopen($fotosest,"rb"); 
$arquivo_temp = fread($fp,filesize($fotosest)); 
fclose($fp); 
$arquivo_temp = addslashes($arquivo_temp); 

$sql = mysql_query("INSERT INTO cad_clientes (razao, nomefantasia, cnpj, inscricao, endereco, numero, bairro, cidade, estado, cep, telefone1, telefone2, celular, fax, email, site, contato, horario, ramodeatividade, ponto,fotoest, login, senha) VALUE ('$razao', '$nome', '$cnpj', '$inscricao', '$endereco', '$numero', '$bairro', '$cidade', '$estado', '$cep', '$telefone1', '$telefone2', '$celular', '$fax', '$email', '$site', '$contato', '$horario', '$ramo', '$ponto', '$arquivo_temp', '$nomelogin', '$senha')") or die (mysql_error());

if($sql) {
echo "O seu cadastro foi realizado com sucesso!";
}else{
echo "Estamos atualizando nosso banco de dados, tente novamente mais tarde";}

mysql_close($conexao);
?>

Aparece os seguintes erros :

Warning: fopen(C:\\Imagens\1 murales.jpg): failed to open stream: No such file or directory in /home/xcompbrasil/site/nome/inserir_associado.php on line 35

Warning: filesize(): Stat failed for C:\\Imagens\1 murales.jpg (errno=2 - No such file or directory) in /home/xcompbrasil/site/nome/inserir_associado.php on line 36

Warning: fread(): supplied argument is not a valid stream resource in /home/xcompbrasil/site/nome/inserir_associado.php on line 36

Warning: fclose(): supplied argument is not a valid stream resource in /home/xcompbrasil/site/nome/inserir_associado.php on line 37

alguém pode me ajudar a entender e a fazer subir as fotos.

Obrigado

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Cara, a variável $fotosest está vindo em branco. Para você subir a foto você deve fazer o upload dela. Para isso você deve colocar no form o parâmetro enctype="multipart/form-data" e para pegar a foto você deve usar <input type="file" name="nome_campo"> e na hora de pegar com o PHP use $_FILES ao invés de $_POST. Por exemplo...

$foto = $_FILES['foto']['name'];
$foto_temp = $_FILES['foto']['tmp_name'];
$tam_foto = $_FILES['foto']['size'];
Além disso, use também...
$caminho = $_SERVER['DOCUMENT_ROOT'];
move_uploaded_file($foto_temp,$caminho.$foto);

E é isso aí

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

  • 0
Guest --jefferson andre da silva --
Para isso você deve colocar no form o parâmetro enctype="multipart/form-data"

O comando <form enctype="multipart/form-data" action="_URL_" method="post"> deve ser inserido aonde no formulario ( em qualquer local no campo fotoest ) :-(

e para pegar a foto você deve usar <input type="file" name="nome_campo"> e na hora de pegar com o PHP use $_FILES ao invés de $_POST. Por exemplo...

Estes comandos que você citou tmb devem ser inseridos no formulario :-(

$foto = $_FILES['foto']['name'];
$foto_temp = $_FILES['foto']['tmp_name'];
$tam_foto = $_FILES['foto']['size'];
Além disso, use também...
$caminho = $_SERVER['DOCUMENT_ROOT'];
move_uploaded_file($foto_temp,$caminho.$foto);

Esta ultima parte deve ser inserida no inserir_registros.php :-(

Obrigado por ajudar e desculpa a falta de conhecimento :-)

Link para o comentário
Compartilhar em outros sites

  • 0

Nada cara, estamos aqui para ajudar. Veja um exemplo...

<form name="formulario" action="cadastrar_evento.php" method="post" enctype="multipart/form-data">
<table align="center">
    <tr>
        <td>
            <table>
                <tr>
                    <td>
                        <label class="foto">Foto:</label>
                    </td>
                    <td>
                        <input type="file" name="foto" />
                    </td>
                </tr>
                <tr height="50">
                    <td align="center" colspan="2">
                        <input type="button" name="enviar" value="Enviar Dados" />
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>
</form>
<?php
    if($_SERVER['REQUEST_METHOD']=="POST")
    {
        $caminho = $_SERVER['DOCUMENT_ROOT'];
        // INÍCIO DAS PROPRIEDADES PARA AS FOTOS
        $extensoes = array('.gif','.jpg','.jpeg'); // EXTENSÕES VÁLIDAS PARA AS FOTOS
        $tam_max = "102400"; // TAMANHO MÁXIMO DE CADA FOTO (100KB)
        $foto = $_FILES['foto']['name'];
        $foto = strtolower($foto);
        $ext = strrchr($foto,'.');
        $foto_temp = $_FILES['foto']['tmp_name'];
        $tam_foto = $_FILES['foto']['size'];
    
        if(in_array($ext,$extensoes) && ($tam_foto <= $tam_max))
        {
            move_uploaded_file($foto_temp,$caminho.$foto);
            echo"<script language='JavaScript'>window.alert('Foto enviada com sucesso!');</script>";
        }
        else
        {
            if(!in_array($ext,$extensoes))
            {
                echo"<script language='JavaScript'>window.alert('Essa extensão de arquivo é inválida! São aceitas apenas arquivos com extensão .jpeg .gif A extensão desse arquivo é ".$ext."');</script>";
            }
            else if($tam_foto > $tam_max)
            {
                $kb1 = $tam_foto/1024;
                $pos = strpos($kb1,'.');
                $kb = substr($kb1,0,$pos);
                echo"<script language='JavaScript'>window.alert('Essa foto é muito grande. O tamanho máximo para a foto é de 100KB e essa foto tem ".$kb."KB');</script>";
            }
        }
    }
?>

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

  • 0
Guest jefferson andre da silva

Cara, tentei fazer o seu script de duas maneiras e não deram certo

A primeira eu separei o arquivo em duas partes, sendo uma um formulario e a segunda o cadastrar_evento.php

Depois tentei um unico arquivo chamado s2.php e tmb não deu certo.

Nos dois casos permite selecionar a imagem, o campo preenche com o caminho mas o botao enviar não responde

Pode me ajudar

Editado por jefferson andre da silva
Link para o comentário
Compartilhar em outros sites

  • 0

ah sim, perdão. Onde está escrito...

<input type="button" name="enviar" value="Enviar Dados" />
Coloque isso...
<input type="button" name="enviar" value="Enviar Dados" onclick="verificar();" />
E acima do form coloque...
<script language="javascript">
function verificar()
{
    var foto = document.formulario.foto.value;
    if(foto=="")
        window.alert("O campo \"Foto\" não pode estar em branco!");
    else
        document.formulario.submit();
}
</script>

Link para o comentário
Compartilhar em outros sites

  • 0
Guest jefferson andre da silva
ah sim, perdão. Onde está escrito...
<input type="button" name="enviar" value="Enviar Dados" />
Coloque isso...
<input type="button" name="enviar" value="Enviar Dados" onclick="verificar();" />
E acima do form coloque...
&lt;script language="javascript">
function verificar()
{
    var foto = document.formulario.foto.value;
    if(foto=="")
        window.alert("O campo \"Foto\" não pode estar em branco!");
    else
        document.formulario.submit();
}
</script>

Valeu pela ajuda

Apos as mudancas o erro mudou para :

Warning: move_uploaded_file(/home/xcompbrasil/site03 murales.jpg): failed to open stream: Permission denied in /home/xcompbrasil/site/nome/tst_imagen/cadastrar_evento.php on line 16

Warning: move_uploaded_file(): Unable to move '/tmp/phpKTcgJS' to '/home/xcompbrasil/site03 murales.jpg' in /home/xcompbrasil/site/nome/tst_imagen/cadastrar_evento.php on line 16

A linha que ele se refere no cadastrar_evento.php é :

move_uploaded_file($foto_temp,$caminho.$foto);

O que pode estar dando errado

Link para o comentário
Compartilhar em outros sites

  • 0
Warning: move_uploaded_file(/home/xcompbrasil/site03 murales.jpg): failed to open stream: Permission denied in /home/xcompbrasil/site/nome/tst_imagen/cadastrar_evento.php on line 16

Permissão negada.

Verifique o CHMOD do diretório de destino.

Para testes, deixe-o como 777.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest jefferson andre da silva
Warning: move_uploaded_file(/home/xcompbrasil/site03 murales.jpg): failed to open stream: Permission denied in /home/xcompbrasil/site/nome/tst_imagen/cadastrar_evento.php on line 16

Permissão negada.

Verifique o CHMOD do diretório de destino.

Para testes, deixe-o como 777.

Mudei para o chmod 777 e mesmo assim o erro continua.

Mas nos 2 casos a mensagem "Foto enviada com sucesso!" aparece, mas quando verifico dentro da pasta ela não existe.

Valeu

Link para o comentário
Compartilhar em outros sites

  • 0
Guest jefferson andre da silva
Verifique se a pasta /xcompbrasil/ tem chmod 777.

não posso fazer isso nesta pasta porque todo o site e os emails estao em sub-pastas deste dominio.

Entretando estive verificando a seguinte mensagem de erro :

Warning: move_uploaded_file(/home/xcompbrasil/site01 murales.jpg): failed to open stream: Permission denied in /home/xcompbrasil/site/nome/tst_imagen/cadastrar_evento.php on line 16

Warning: move_uploaded_file(): Unable to move '/tmp/phpFTBTHj' to '/home/xcompbrasil/site01 murales.jpg' in /home/xcompbrasil/site/nome/tst_imagen/cadastrar_evento.php on line 16

E o que diz o arquivo cadastrar_evento.php

if($_SERVER['REQUEST_METHOD']==POST")

{

$caminho = $_SERVER['DOCUMENT_ROOT];

// INÍCIO DAS PROPRIEDADES PARA AS FOTOS

$extensoes = array('.gif','.jpg','.jpeg'); // EXTENSÕES VÁLIDAS PARA AS FOTOS

$tam_max = "102400"; // TAMANHO MÁXIMO DE CADA FOTO (100KB)

$foto = $_FILES['foto']['name'];

$foto = strtolower($foto);

$ext = strrchr($foto,'.');

$foto_temp = $_FILES['foto']['tmp_name']; $tam_foto = $_FILES['foto']['size'];

if(in_array($ext,$extensoes) && ($tam_foto <= $tam_max))

{

move_uploaded_file($foto_temp,$caminho.$foto);

echo"&lt;script language='JavaScript'>window.alert('Foto enviada com sucesso!');</script>";

Aonde foi definido que a imagem deve subir para a sub-pasta tst_imagen na variavel tmp_name :-(

Editado por jefferson andre da silva
Link para o comentário
Compartilhar em outros sites

  • 0

A variável que diz para onde o arquivo deve ir é a variável $caminho. Se você quer que a foto vá para a pasta /tst_imagen/ então coloque abaixo da variável $caminho a seguinte linha de código:

$caminho.="/site/nome/tst_imagen/";

Desta forma o caminho será ... /home/xcompbrasil/site/nome/tst_imagen/ e a foto será enviada para a pasta /tst_imagen/

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

  • 0
Guest jefferson andre da silva
A variável que diz para onde o arquivo deve ir é a variável $caminho. Se você quer que a foto vá para a pasta /tst_imagen/ então coloque abaixo da variável $caminho a seguinte linha de código:

$caminho.="/site/nome/tst_imagen/";

Desta forma o caminho será ... /home/xcompbrasil/site/nome/tst_imagen/ e a foto será enviada para a pasta /tst_imagen/

Ok, mudei a variavel para $caminho.="/home/xcompbrasil/site/nome/tst_imagen/"; e deu certo.

Entretanto preciso que ela "entre" dentro do banco de dados deste cliente, tenho conhecimento que com o tempo este arquivo ficara grande mas por enquanto preciso realmente que seja feito desta maneira.

O que preciso fazer para que isso de certo no meu INSERT INTO do php :-(

Link para o comentário
Compartilhar em outros sites

  • 0
Guest jefferson andre da silva
Cara, o mais sensato seria você cadastrar o caminho da foto no banco e na hora de exibí-la pegar esse caminho. Mas se você quiser colocar a foto lá, coloque o campo que vai recebe-la como BLOB e faça o insert normailmente colocando a variável $foto no insert.

Tá certo, então meu problema é o seguinte :

Para cada cliente cadastrado existe um codigo de inclusao unico, preciso criar um sub-diretorio com estes codigos de inclusao para que os documentos e fotos deste cliente fiquem dentro desta pasta.

Como posso fazer isso em php :-)

Link para o comentário
Compartilhar em outros sites

  • 0

Use este código do cliente para criar o diretório de cada cliente com a função mkdir . Depois use este diretório na variável $caminho. Desta forma a variável caminho mudará dinâmicamente e guardará as fotos do usuário x em /home/xcompbrasil/site/nome/tst_imagen/x/ e as fotos do usuário y em /home/xcompbrasil/site/nome/tst_imagen/y/ e assim por diante.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest jefferson andre da silva
Cara, o mais sensato seria você cadastrar o caminho da foto no banco e na hora de exibí-la pegar esse caminho. Mas se você quiser colocar a foto lá, coloque o campo que vai recebe-la como BLOB e faça o insert normailmente colocando a variável $foto no insert.

Tá certo, então meu problema é o seguinte :

Para cada cliente cadastrado existe um codigo de inclusao unico, preciso criar um sub-diretorio com estes codigos de inclusao para que os documentos e fotos deste cliente fiquem dentro desta pasta.

Como posso fazer isso em php :-)

Ainda vou testar sua outra dica, mas enquanto isso fiz as modificacoes para subir a imagem para dentro do mysql, aparece que foi feita a inclusao no arquivo com sucesso.

Entrei no mysql e coloquei select no campo, aparece escrito NULL

então a imagem não entrou no arquivo não e mesmo ?-(

Link para o comentário
Compartilhar em outros sites

  • 0
Guest jefferson andre da silva
Isso mesmo. Ela entrou na pasta mas não no banco de dados. Como você está fazendo o insert ?

Estive verificando e tmb não entrou na pasta, segue o arquivo que faz o insert

<?php

$conexao = mysql_connect("localhost", "root", "") or die (mysql_error());

$associados_1 = mysql_select_db("xcomp",$conexao) or die (mysql_error());

$razao = $_POST['razao'];

$nome = $_POST['nomefantasia'];

$cnpj = $_POST['cnpj'];

$inscricao = $_POST['inscricao'];

$endereco = $_POST['endereco'];

$numero = $_POST['numero'];

$bairro = $_POST['bairro'];

$cidade = $_POST['cidade'];

$estado = $_POST['estado'];

$cep = $_POST['cep'];

$telefone1 = $_POST['telefone1'];

$telefone2 = $_POST['telefone2'];

$celular = $_POST['celular'];

$fax = $_POST['fax'];

$email = $_POST['email'];

$site = $_POST['site'];

$contato = $_POST['contato'];

$horario = $_POST['horario'];

$ramo = $_POST['ramo'];

$ponto = $_POST['ponto'];

$fotosest = $_POST['fotosest'];

$nomelogin= $_POST['login'];

$senha = $_POST['senha'];

//$data = $_POST['codigo'];

$caminho.=/home/xcompbrasil/site/nome/tst_imagen/";

// INÍCIO DAS PROPRIEDADES PARA AS FOTOS

$extensoes = array('.gif','.jpg','.jpeg'); // EXTENSÕES VÁLIDAS PARA AS FOTOS

$tam_max = "102400"; // TAMANHO MÁXIMO DE CADA FOTO (100KB)

$foto = $_FILES['fotoest]['name'];

$foto = strtolower($foto);

$ext = strrchr($foto,'.');

$foto_temp = $_FILES['foto']['tmp_name'];

$tam_foto = $_FILES['foto']['size'];

// if(in_array($ext,$extensoes) && ($tam_foto <= $tam_max))

// {

move_uploaded_file($foto_temp,$caminho.$foto);

// echo"<script language='JavaScript'>window.alert('Foto enviada com sucesso!');</script>";

$sql = mysql_query("INSERT INTO cad_clientes (razao, nomefantasia, cnpj, inscricao, endereco, numero, bairro, cidade, estado, cep, telefone1, telefone2, celular, fax, email, site, contato, horario, ramodeatividade, ponto,fotoest, login, senha) VALUE ('$razao', '$nome', '$cnpj', '$inscricao', '$endereco', '$numero', '$bairro', '$cidade', '$estado', '$cep', '$telefone1', '$telefone2', '$celular', '$fax', '$email', '$site', '$contato', '$horario', '$ramo', '$ponto', '$foto', '$nomelogin', '$senha')") or die (mysql_error());

if($sql) {

echo "O seu cadastro foi realizado com sucesso!";

}else{

echo "Estamos atualizando nosso banco de dados, tente novamente mais tarde";}

mysql_close($conexao);

?>

Link para o comentário
Compartilhar em outros sites

  • 0
Guest jefferson andre da silva
Duas coisas:

1 - Troque isso ... $caminho.="/home/xcompbrasil/site/nome/tst_imagen/"; por isso ... $caminho=$_SERVER['DOCUMENT_ROOT']."/site/nome/tst_imagen/";

Trocado, mas mesmo assim no campo aparece escrito NULL, ou [e isso mesmo que aparece quando se usa um SELECT codigo,fotoest FROM cad_clientes/

2 - Verifique se o campo fotoest é do tipo BLOB no banco de dados.

Esta neste formato, entretanto existe algum comando do tipo DISPLAY STRUCTURE no mysql ?

Editado por jefferson andre da silva
Link para o comentário
Compartilhar em outros sites

  • 0
Guest jefferson andre da silva
1 - Você precisa refazer o upload

2 -

ALTER TABLE `teste` CHANGE `fotoest` `fotoest` BLOB NOT NULL

Refiz o upload de todo o cadastro do cliente, aparece que imagem subiu mas dentro do mysql não vejo nada neste campo.

Como faco para saber se realmente subiu, da pra ver a imagem pelo select ou tenho que montar algo em html

Estes testes estao sendo feitos em http://www.xcompbrasil.com.br/nome/pontosdeacesso.htm se você quizer dar uma olhada te agradeco

Editado por jefferson andre da silva
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
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...