Ir para conteúdo

POWERED BY:

Arquivado

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

oomaikoo

[ERRO] PHP Upload de Imagens no Servidor

Recommended Posts

Boa tarde Galera do iMasters, então estou com um pequeno problema que é o seguinte:

 

Tenho uma página de upload de arquivos integrada com um banco de dados MySQL (para salvar o nome da imagem, etc) porém quando eu clico no botão de selecionar Arquivo seleciono a foto, coloco o nome da foto aperto em cadastrar, aparece no banco de dados, porém, a imagem não é inserida no meu HOST, já olhei as configurações do host, upload está Online, Maxime File size está de acordo, segue o código do sistema

 

<div class="container">
<?php if( empty( $acao ) ) { ?>
<h1> Adicionar Projeto </h1><br>
<form name="add" action="projetos_add.php?acao=add" method="post" enctype="multipart/form-data">
<label>Nome do Projeto *</label>
<input type="text" name="projeto" /><br>
<label>Mostrar na Página Principal *</label>
<select name="destaque">
<option value="1">Sim</option>
<option value="0" selected="selected">Não</option>
</select><br>
<label>Imagem principal *</label>
<input name="foto" id="foto" type="file" /><br />
<input type="submit" name="submit" value="Cadastrar Projeto" style="width:150px;" />
<label><b>Titulo</b> da imagem principal <span>Será exibido quando o imóvel estiver em destaque</span></label>
<input type="text" name="foto_titulo" /><br />
</form>
<?php
} // fim da ação EMPTY
if( $acao == 'add')
{
extract( $_POST, EXTR_OVERWRITE); // extrai os dados do POST, transformando os indices em nomes. Sobrescreve as variaveis existentes, se houver
$sql1 = mysql_query("SELECT id FROM imoveis WHERE codigo='$codigo'");
$ttlCodigo = mysql_num_rows($sql1);
if( !empty( $codigo ) && $ttlCodigo > 0){
echo "<script language='JavaScript'>
alert('Código duplicado, informe outro código');
window.location.href='javascript:history.go(-1)'
</script>";
exit;
}
///////////////// TRATA A IMAGEM
$arquivo = isset($_FILES["foto"]) ? $_FILES["foto"] : FALSE;
if( !empty( $arquivo['name'] ) ) {
if(!eregi("^image\/(pjpeg|jpeg|gif)$", $arquivo["type"])){
echo "<script language='JavaScript'>
alert('Arquivo em formato inválido! Formato aceito: JPG, JPEG e GIF');
window.location.href='javascript:history.go(-1)'
</script>";
exit;
}
// Verifica tamanho do arquivo
if($arquivo["size"] > 8000000)
{
echo "<script language='JavaScript'>
alert('A imagem deve ser de no máximo 2020680 bytes');
window.location.href='javascript:history.go(-1)'
</script>";
exit;
}
// Para verificar as dimensões da imagem
$tamanhos = getimagesize($arquivo["tmp_name"]);
if($tamanhos[0] > 5000 || $tamanhos[0] < 200 || $tamanhos[1] > 5000 || $tamanhos[1] < 200 )
{
echo "<script language='JavaScript'>
alert('A dimensão da imagem não é permitido, tamanhao aceito: de 200 a 5000 pixels');
window.location.href='javascript:history.go(-1)'
</script>";
exit;
}
preg_match("/\.(gif|bmp|png|jpg|jpeg|swf){1}$/i", $arquivo["name"], $ext);
$imagem_nome = md5(uniqid(time())) . "." . $ext[1];
$imagem_nome2 = md5(uniqid(time())) . "_gr." . $ext[1];
$imagem_dir = "/img_projetos" . $imagem_nome;
}else{
// se não for informado nenhuma imagem
echo "<script language='JavaScript'>
alert('A imagem do Projeto esta faltando');
window.location.href='javascript:history.go(-1)'
</script>";
exit;
}
//////////////// FIM DA IMAGEM
$data = date( "d/m/Y" );
$hora = date( "H:i:s" );
$valor = str_replace('.', '', $valor);
$valor = str_replace(',', '.', $valor);
$sql = mysql_query("INSERT INTO projetos (projeto, foto, destaque, foto_titulo ) VALUES ('$projeto', '$imagem_nome','$destaque','$foto_titulo' )") or print(mysql_error());
$ultimo_id = mysql_insert_id();
echo '<center>Projeto cadastrado com sucesso<br /><br />
<p><a href="album_add.php?id='.$ultimo_id.'" target="_blank">GERENCIAR FOTOS</a></p>';
}
?>

Simplesmente não está aparecendo a imagem no meu Host, na Pasta /img_projetos

Compartilhar este post


Link para o post
Compartilhar em outros sites

então osmar eu não entendo muito de PHP, estou utilizando esse upload de imagem que peguei de um outro Script, no outro ele funciona perfeitamente mas no meu não

 

Não seria essa a parte de upload ?

 

$arquivo = isset($_FILES["foto"]) ? $_FILES["foto"] : FALSE;
if( !empty( $arquivo['name'] ) ) {
if(!eregi("^image\/(pjpeg|jpeg|gif)$", $arquivo["type"])){
echo "<script language='JavaScript'>
alert('Arquivo em formato inválido! Formato aceito: JPG, JPEG e GIF');
window.location.href='javascript:history.go(-1)'
</script>";
exit;
}
o upload em si está num Form Action, que quando Clico no Submit chama o <form name="add" action="projetos_add.php?acao=add" method="post" enctype="multipart/form-data">

Compartilhar este post


Link para o post
Compartilhar em outros sites

o upload em si é feito automaticamente pelo PHP. O valor em ['tmp_name'] é caminho temporário (por isso o "tmp") do arquivo no servidor. Porém ele é temporário. Ou seja, você precisa mover o arquivo para um local definitivo. E pra isso usa-se move_uploaded_file

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi Beraldo, tem como você me mandar somente essa parte pronta, exclui o tmp_name e colocar o move_uploaded_file ? eu não sei direito a sintaxe do PHP

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque o Script ele ta pegando outras informações e jogando no Banco de Dados, se eu colocar o Form Action somente para o script de upload do arquivo ele não vai pegar os outros dados que vão para o Banco

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?php 
        } // fim da ação EMPTY
        if( $acao == 'add') 
        { 
            extract( $_POST, EXTR_OVERWRITE); // extrai os dados do POST, transformando os indices em nomes. Sobrescreve as variaveis existentes, se houver          
                       
        	$sql1 = mysql_query("SELECT id FROM projetos WHERE codigo='$codigo'");
            $ttlCodigo = mysql_num_rows($sql1);
            
            if( !empty( $codigo ) && $ttlCodigo > 0){
    			echo "<script language='JavaScript'>
          		alert('Código duplicado, informe outro código');
          		window.location.href='javascript:history.go(-1)'
                </script>";
                exit;
                }
            
            ///////////////// TRATA A IMAGEM
                $arquivo = isset($_FILES["foto"]) ? $_FILES["foto"] : FALSE;
                
            if( !empty( $arquivo['name'] ) ) {
                if(!eregi("^image\/(pjpeg|jpeg|gif)$", $arquivo["type"])){
            		echo "<script language='JavaScript'>
              		alert('Arquivo em formato inválido! Formato aceito: JPG, JPEG e GIF');
              		window.location.href='javascript:history.go(-1)'
             		 </script>";
            		 exit;
                }

                // Verifica tamanho do arquivo
                if($arquivo["size"] > 2020680)
                {
            		echo "<script language='JavaScript'>
              		alert('A imagem deve ser de no máximo 2020680 bytes');
              		window.location.href='javascript:history.go(-1)'
             		 </script>";
            		 exit;
                }
                
                // Para verificar as dimensões da imagem
                $tamanhos = getimagesize($arquivo["tmp_name"]);
                
                if($tamanhos[0] > 2000 || $tamanhos[0] < 200 || $tamanhos[1] > 2000 || $tamanhos[1] < 200 )
                {	
            		echo "<script language='JavaScript'>
              		alert('A dimensão da imagem não é permitido, tamanhao aceito: de 200 a 2000 pixels');
              		window.location.href='javascript:history.go(-1)'
             		 </script>";
            		 exit;
                }

                preg_match("/\.(gif|bmp|png|jpg|jpeg|swf){1}$/i", $arquivo["name"], $ext);

                $imagem_nome = md5(uniqid(time())) . "." . $ext[1];
        		$imagem_nome2 = md5(uniqid(time())) . "_gr." . $ext[1];

                $imagem_dir = "/img_projetos/" . $imagem_nome;
				move_uploaded_file($arquivo["tmp_name"], $imagem_dir);
				
            }else{
                // se não for informado nenhuma imagem
            		echo "<script language='JavaScript'>
              		alert('A imagem do imóvel esta faltando');
              		window.location.href='javascript:history.go(-1)'
             		 </script>";
            		 exit;
            }
 

Coloquei Beraldo mas mesmo assim não está salvando no host :/ olha ai o código

Compartilhar este post


Link para o post
Compartilhar em outros sites

Habilite todas as exibições de erro, como mostrado neste tópico e teste de novo.

 

Você verá uma mensagem dizendo que o caminho "/img_projetos" não existe

Isso por que "/" no começo significa raiz do sistema. Para referenciar diretórios relativos ao diretório atual, use "./":

 

 

$imagem_dir = "./img_projetos/" . $imagem_nome;

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Warning: include_once(menu.php): failed to open stream: No such file or directory in /home/caioande/public_html/login/projetos_add.php on line51

 

Warning: include_once(): Failed opening 'menu.php' for inclusion (include_path='.:/opt/alt/php54/usr/share/pear:/opt/alt/php54/usr/share/php') in /home/caioande/public_html/login/projetos_add.php on line 51

Notice: Undefined variable: codigo in/home/caioande/public_html/login/projetos_add.phpon line 91

 

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in/home/caioande/public_html/login/projetos_add.phpon line 92

 

Notice: Undefined index: arquivo in/home/caioande/public_html/login/projetos_add.phpon line 104

 

Deprecated: Function eregi() is deprecated in/home/caioande/public_html/login/projetos_add.phpon line 126

 

Notice: Undefined variable: valor in/home/caioande/public_html/login/projetos_add.phpon line 176

 

Deu todos esses erros Beraldo, os erros com o menu.php é besteira eu que tirei o menu, mas o resto eu não faço ideia, mas já estou procurando como concertar todos esses erros, muito obrigado pela ajuda Beraldo, vou ver se resolvendo todos esses erros ele consegue fazer o upload no Host, assim que eu conseguir, ou surgir outro problema eu falo aqui no tópico

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu explico quase todos esses erros neste artigo:

http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/

 

Dê uma olhada nele inteiro, que resolverá a maioria

 

Acho que só o do eregi() eu não abordo. Mas o correto é usar preg_match, pois funções ereg_* e eregi_* estão obsoletas (aliás, já foram removidas do PHP 7)

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Tudo bem pessoal?
       
      No código abaixo, estou fazendo uma consulta nas tabelas, banners e banners_referencia
      Meu objetivo é trazer resultados com valores iguais ao nome da cidade declarada na $cidade ou resultados com a referencia Total.
      O problema é que está trazendo todos os resultados. Tenho 10 linhas, 1 com o nome da cidade e duas com o valor Total, então o resultado teria que ser de apenas 3 linhas, mas mostra tudo.
       
      $banner = "SELECT A.*, B.* FROM banners A, banners_referencia B WHERE B.cod_referencia = A.cod_referencia AND A.cidade = '$cidade' OR B.referencia = 'Total' ORDER BY RAND()";
      $banner = mysqli_query($conexao, $banner) or die ("Banner não encontrado");
      while($busca= mysqli_fetch_array($banner)){
          print $busca['cidade'].'<br>';
      };
       
      Alguém consegue me ajudar?
    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Tenho 3 selects assim com varias categorias...
       
              $sql = "SELECT * FROM topicos          WHERE idcategoria = $idcategoria          AND pubdate BETWEEN NOW() - INTERVAL $intervalo1_horas_ou_minutos $tipo_intervalo1_horas_mnutos AND          NOW() - $intervalo2_horas_ou_minutos ORDER BY pubdate DESC LIMIT 1"; Preciso que na minha pagina principal (index) mostre este registro por 10minutos.. passando de 10 minutos mostra o resultado do proximo select (categoria)..
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.