Código php para upload de arquivos [RESOLVIDO]

1. Código php para upload de arquivos [RESOLVIDO]

Andressa Moura
andressa.moura

(usa Ubuntu)

Enviado em 18/04/2011 - 01:36h

Eai galere!
To com um problemão!
Tenho um código php q funciona pra enviar arquivos de imagem. Até aí tudo bem. Mas eu preciso que antes de enviar o arquivo a pessoa preencha um formulário com algumas informaçoes e que estas cheguem junto com a imagem.
Não sei bem como fazer isso, talvez se pudesse chegar um txt com o mesmo nome da imagem ou algo assim. Preciso de ideias. Alguém sabe como fazer isso???
Mto Obrigada!!!


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 06/05/2011 - 00:32h

Bom, dei uma modificada, não sei se eu entendi o que você queria fazer, mas espero que rode sem problemas.... dois arquivos, index.php e cadastra.php
Não esqueça de criar o diretório fotos, e de dar permissão de escrita nesse diretório.

index.php
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<title>Enviar Arquivo</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<link rel="stylesheet" href="stilo.css" type="text/css" />
<meta name="generator" content="Geany 0.19.1" />
</head>

<body>

<div id="todo">
<h1>Envio de Arquivos para Impress&atilde;o Digital</h1>
<div class="form">
<form id="frm" action="cadastra.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="frm_ok" />
<fieldset>
<legend class="style1 style4"> Preencha o Formul&aacute;rio </legend>
<p >
<label for="nome"><span class="style2">Nome / Raz&atilde;o Social:</span></label>

<input name="nome" id="nome" onKeyDown="if(event.keyCode==13) event.keyCode=9;" size="35" />

</p>

<p>

<label for="email"><span class="style2">E-Mail:</span></label>

<input name="email" id="email" onKeyDown="if(event.keyCode==13) event.keyCode=9;" size="35" />

</p>

<p>

<label for="telefone"><span class="style2">Telefone:</span></label>

<input name="telefone" id="telefone" onKeyDown="if(event.keyCode==13) event.keyCode=9;" size="35" />

</p>

<p>

<label for="servico"><span class="style2">Tipo de Material:</span></label>

<input name="servico" id="servico" onKeyDown="if(event.keyCode==13) event.keyCode=9;" size="10" />

</p>

<p>

<label for="tamanho"><span class="style2">Tamanho:</span></label>

<input name="tamanho" id="tamanho" onKeyDown="if(event.keyCode==13) event.keyCode=9;" size="10" />

</p>
<p>

<label for="qualidade"><span class="style2">Qualidade (Alta ou Grandes Formatos):</span></label>
<input name="qualidade" id="qualidade" onKeyDown="if(event.keyCode==13) event.keyCode=9;" size="10" />

</p>


<p>

<label for="mensagem"><span class="style2">Anexo:</span></label>

<input type="file" name="arquivo" size="50" class="file" />

</p>
<p>

<label for="mensagem"><span class="style2">Mensagem:</span></label>

<textarea name="mensagem" cols="100" rows="10" class="text" id="mensagem"></textarea>

</p>

<p style="text-align:right; padding-right:10px;">

<input name="submit" type="submit" class="send" value="ENVIAR" />

</p>
</fieldset>
</form>
</div>
</div>
</body>
</html>


cadastra.php
<?php
/**
* Função para retirar acentos, caracteres especiais de uma string
* @param $string
* @return $string
*/
function removerCaracter($string){
@$string = ereg_replace("[áàâãª]","a",$string);
@$string = ereg_replace("[ÁÀÂÃ]","A",$string);
@$string = ereg_replace("[éèê]","e",$string);
@$string = ereg_replace("[ÉÈÊ]","E",$string);
@$string = ereg_replace("[íì]","i",$string);
@$string = ereg_replace("[ÍÌ]","I",$string);
@$string = ereg_replace("[óòôõº]","o",$string);
@$string = ereg_replace("[ÓÒÔÕ]","O",$string);
@$string = ereg_replace("[úùû]","u",$string);
@$string = ereg_replace("[ÚÙÛ]","U",$string);
@$string = ereg_replace("ç","c",$string);
@$string = ereg_replace("Ç","C",$string);
@$string = ereg_replace("[][><}{)(:;,!?*%~^`&#@]","",$string);
@$string = ereg_replace(" ","_",$string);
return $string;
}


$nome = $_POST['nome'];
$email = $_POST['email'];
$telefone =$_POST['telefone'];
$servico =$_POST['servico'];
$tamanho =$_POST['tamanho'];
$qualidade =$_POST['qualidade'];
$mensagem =$_POST['mensagem'];
$arquivo = $_FILES['arquivo']['tmp_name'];
$original = removerCaracter($_FILES['arquivo']['name']);
$destino = 'fotos\\'.$original;
if(move_uploaded_file($arquivo,$destino)){
$fp = fopen('fotos\\'.removerCaracter($nome).'.txt','a');
$linha = $original.';'.$nome.';'.$email.';'.$telefone.';'.$servico.';'.$tamanho.';'.$qualidade.';'.$mensagem.";\r\n";
fwrite($fp,$linha,strlen($linha));
fclose($fp);
echo "<script>window.alert('Enviado com sucesso.');</script>";
} else echo "<script>window.alert('Erro ao enviar o arquivo');</script>";

?>

Ainda tem bastante coisa pra implementar, tipo, se eu enviar um arquivo de mesmo nome, teste.jpg e depois outro teste.jpg. Pense nisso.

Parabéns pelo artigo, estava precisando criar um servidor ftp para upload de arquivos pelo php, vou testar.

3. Simples

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/04/2011 - 06:23h


Pegue o valores das variaveis atraves de um input text do formulario ou outro tipo de campo mais apropriado. Recomendo da seguinte forma:
HTML
<form name="imagem" method="" action="script.php" >
<p>Campo X: <input type="text" name="campo_x" /></p>
<p><input type="submit" value="Enviar Imagem" /></p>
</form>

<?php
// script.php
$campo_x =@ $_REQUEST["campo_x"];
if( $campo_x )
{
echo $campo_x;
}
else
{
echo 'Por favor, preencha o campo...';
}
?>

Salve os dois em arquivos(HTML e PHP) com nomes diferentes.

Caso tenha outras duvidas teremos prazer em ajuda-la.




4. Re: Código php para upload de arquivos [RESOLVIDO]

Andressa Moura
andressa.moura

(usa Ubuntu)

Enviado em 18/04/2011 - 16:54h

Olha ./. ronin, desse jeito nao funcionou. Mas eu nao sei mta coisa de html e php, então pode ser q eu não tenha entendido direito.
O q eu fiz foi copiar a primeira parte e salvar como .html e a segunda como .php. Copiei para o meu servidor e testei. Aí quando clico em enviar apenas imprime na tela o q foi escrito, aliás, não deveria ter um campo pra escolher q arquivo enviar?


5. Re: Código php para upload de arquivos [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/05/2011 - 23:25h

Olá, qual a idéia? Preencher um formulário e depois que estiver ok enviar o arquivo, ou, preencher o formulário e junto selecionar o arquivo?

Lembre que o formulário que você envia o arquivo pode enviar campos também, basta criar os campos e recuperar esses campos com $_POST(Ex: $_POST['nome']). Se você quiser criar arquivos txt também pode, basta definir o nome do arquivo final da imagem e depois usar o mesmo nome pra utilizar a função fopen() e criar o txt e em seguida, fwrite() para armazenar as informações e fechar o arquivo com fclose.



6. Re: Código php para upload de arquivos [RESOLVIDO]

Andressa Moura
andressa.moura

(usa Ubuntu)

Enviado em 02/05/2011 - 14:32h

A ideia é preencher o formulário e junto selecionar o arquivo.
Não sei bem como isso funciona, mas quero uma soluçao q não use banco de dados. Por isso q falei do txt, ou pode ser até q esse formulario seja enviado por email, algo assim estaria otimo.

Do jeito q vc explicou alex.castilho, parece mto boa ideia, acho q é isso msmo que preciso. Mas eu não entendo qse nada de PHP, entao vc poderia me enviar um arquivo com essa ideia, por favor?
Se puder fazer isso será mto bom! Mto obrigada desde já!


7. Uma força

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/05/2011 - 22:25h

Bom, vou lhe dar uma força pra você iniciar e poder entender. Aprender faz parte do processo e é importante que você aprenda.

O código abaixo vai fazer o básico do básico, é preciso aprimorá-lo e escapar de todos os erros possíveis, poste depois os erros que encontrar que iremos evoluíndo o código junto com a sua evolução.

index.php
<center><h1>Cadastro de Usuário</h1></center>
<form id="form1" name="form1" enctype="multipart/form-data" method="post" action="cadastra.php">
<table width="288" border="0" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="44"><label for="nome">Nome:</label></td>
<td width="224">
<input type="text" name="nome" id="nome" /></td>
</tr>
<tr>
<td><label for="login">Login:</label></td>
<td>
<input type="text" name="login" id="login" /></td>
</tr>
<tr>
<td><label for="senha">Senha:</label></td>
<td>
<input type="password" name="senha" id="senha" /></td>
</tr>
<tr>
<td><label for="foto">Foto:</label></td>
<td><input type="file" name="foto" id="foto" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="button" id="button" value="Cadastrar" /></td>
</tr>
</table>
</form>

cadastra.php
<?php
$nome = $_POST['nome'];
$login = $_POST['login'];
$senha = $_POST['senha'];
$arquivo = $_FILES['foto']['tmp_name'];
$destino = 'fotos\\'.$login.'.jpg';
if(move_uploaded_file($arquivo,$destino)){
$fp = fopen("usuarios.txt",'a');
$arquivo_nome = "$login".".jpg";
$linha = $nome.';'.$login.';'.$senha.';'.$arquivo_nome.";\r\n";
fwrite($fp,$linha,strlen($linha));
fclose($fp);
echo "<script>window.alert('Cadastro com sucesso.');</script>";
} else echo "<script>window.alert('Erro ao cadastrar o arquivo');</script>";

?>

Deixei bem básico para uma fácil visualização de estudo e aprendizado.

Erros ocorrerão, um belo exemplo é tratar arquivos com ç e acentos, repare que o nome da foto é o nome do login, seria interessante ler os logins antes de cadastrá-los, etc etc etc...

Repare também que separei os campos por ';'. Para futuras leituras de campos através da função explode().

Esse código ainda pode crescer bastante, depende só de você. Poste a próxima dificuldade.


8. Re: Código php para upload de arquivos [RESOLVIDO]

Andressa Moura
andressa.moura

(usa Ubuntu)

Enviado em 03/05/2011 - 00:56h

Mto obrigada pela força alex.castilho!
Ocorreram alguns erros sim, mas consegui resolver.
O q está sendo um pouco difícil agora é q preciso alterar alguns campos do formulario.
Por exemplo, não gostaria de usar login e senha, o form seria mais para enviar informaçoes uteis como nome, telefone, email, etc.
Entao como eu poderia mudar isso? Se eu alterar o html preciso mudar o que no php?
Obrigada :)


9. Formulário

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/05/2011 - 08:39h

Bom, se você mudar os campos do formulário, lembre-se de mudar a leitura desses campos na página seguinte, vou separar um exemplo abaixo:

<form id="form1" name="form1" enctype="multipart/form-data" method="post" action="cadastra.php">
<label for="nome">Nome:</label>
<input type="text" name="nome" id="nome" />
<input type="submit" name="button" id="button" value="Enviar" />
</form>

O código acima, como agente usou antes, mostra um formulário, com o campo NOME e passando esse campo para uma página chamada cadastra.php através do método POST. Na página seguinte, você vai escrever o código para leitura dessas variáveis.

<?php
$nome = $_POST['nome'];
?>

Para mudar o formulário use uma ferramenta para edição de html, o melhor hoje é o Dreamweaver.

Agora é só compreender o que o código de armazenamento faz, outro exemplo é:

$linha = $nome.';'.$login.';'.$senha.';'.$arquivo_nome.";\r\n";

Aqui é onde prepara a linha para ser armazenada, $nome é a variável, o . concatena string, as aspas simples é para não interpretar a string e usa-la somente como string, e o \r\n finaliza a linha e pula pra seguinte.

É isso, até mais :)



10. Vídeo aula, fica mais fácil.

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/05/2011 - 09:30h

Seria bacana vc ver isso, assim conhecerá mais sobre os códigos.

http://www.videoaulasbrasil.com.br/php/desenvolvendo-um-sistema-de-uploads/

Abs.


11. Re: Código php para upload de arquivos [RESOLVIDO]

Andressa Moura
andressa.moura

(usa Ubuntu)

Enviado em 03/05/2011 - 20:29h

Alex Castilho, vc tem ajudado mt, obrigada.
Alterei algumas coisas no index e no php. Abaixo vou colocar o código php e o erro q está ocorrendo.

_______________________________________
<?php
$nome = $_POST['nome'];
$email = $_POST['email'];
$telefone =$_POST['telefone'];
$servico =$_POST['servico'];
$tamanho =$_POST['tamanho'];
$qualidade =$_POST['qualidade'];
$mensagem =$_POST['mensagem'];
$arquivo = $_FILES['arquivo']['tmp_name'];
$destino = 'fotos/'.'$nome.';

if(move_uploaded_file($arquivo,$destino)){
$fp = fopen("clientes.txt",'a');
$arquivo_nome = "$nome".".$arquivo";
$linha = $arquivo_nome.';'$nome.';'.$email.';'.$telefone.';'
.$servico.';'.$tamanho.';'.$qualidade.';'.$mensagem.";\r\n";
fwrite($fp,$linha,strlen($linha));
fclose($fp);
echo "<script>window.alert('Enviado com sucesso.');</script>";
} else echo "<script>window.alert('Erro ao enviar o arquivo');</script>";

?>
___________________________________

ERRO: Parse error: syntax error, unexpected T_VARIABLE in /home/upload/cadastra.php on line 15


O que estou tentando fazer nesse php é copiar os dados inseridos no formulario (nome, email, telefone, tipo de material, etc) para o txt "clientes.txt".

Não sei se é possivel , mas gostaria q cada envio de arquivo gerasse um novo txt com o nome original da imagem (ex: img enviada= foto1.png + foto1.png.txt). Ou então q esse formulario fosse enviado por email.

Outra coisa, como faço para que o nome do arquivo não fique .jpg e sim com a extensao original?



12. Concatenação de string

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/05/2011 - 21:32h

Bom pelo visto você não entendeu o processo da concatenação de string vamos dar uma olhada nisso.

O . (ponto) serve pra concatenar strings, tem que ser usado entre elas, vamos ver exemplos?

$nome = 'Alex '.'Castilho';
echo $nome;

Resultado:
Alex Castilho

Vamos corrigir os erros:
$arquivo_nome = "$nome".".$arquivo"; (Neste caso as variáveis não precisam ficar entre as aspas duplas, isso facilitará a você visualizar o código, a utilização de aspas simples reforçam a idéia de que é somente string e não irá interpretar nenhum caractere especial)

Corrigindo:
$arquivo_nome = $nome.'.'.$arquivo;

$linha = $arquivo_nome.';'$nome.';'.$email.';'.$telefone.';'
.$servico.';'.$tamanho.';'.$qualidade.';'.$mensagem.";\r\n"; (Apareceu escrito em duas linhas, verifique se foi erro na hora de colar ou se realmente está em duas linhas, também foi esquecido ponto no $nome)

Corrigindo:
$linha = $arquivo_nome.';'.$nome.';'.$email.';'.$telefone.';'.$servico.';'.$tamanho.';'.$qualidade.';'.$mensagem.";\r\n";


Você disse que queria gerar o arquivo com o nome da foto, sem problema, a alteração está aqui:
$fp = fopen("clientes.txt",'a');

Repare que a função fopen é passado como parâmetro o nome do arquivo e o modo que ele será acessado, a letra 'a' indica que ele será aberto para acréscimo no final do arquivo e se ele não existir tentará criá-lo. Agora ficou fácil, ao invés de clientes.txt, coloque:
$fp = fopen($nome.'.txt','a');

A função mail(), vai servir bem pra você enviar os campos dos formulários, mas arquivos como fotos e etc requer um nível mais avançado, existem diversas classes já feitas que utilizam autenticação smtp para envio de e-mails e arquivos anexados, mas acho que vai ser forçar demais já que você está começando no php agora.

Até mais!



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts