Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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">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
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
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
Se você não tentar, nunca vai aprender
De qualquer forma, aí vai
move_uploaded_file($arquivo["tmp_name"], $imagem_dir);
Opa beraldo eu sei que é esse o Código mas onde eu coloco ele exatamente qual eu tenho que excluir??
Você precisa colocar esse código onde a imagem precisa ser salva. Ou seja, no mesmo if que cria a variável $imagem_dir
Coloque essa logo abaixo da linha que cria $imagem_dir
<?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
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;
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
Arquivos não encontrados, variáveis não definidas, sem retorno no mysql...
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)
Não vi no seu código onde é feito o upload http://php.net/manual/pt_BR/function.move-uploaded-file.php