Ir ao conteúdo
  • Cadastre-se

PHP Formulario para upload com nome e verificação de e-mail


Posts recomendados

Olá.

 

Eu sou meio "iniciante" - eu já "brinquei" com PHP há anos atrás - em PHP. e pretendo criar um formulario para upload, com verificação de e-mail. E seria bom se as mensagens de aviso aparecessem na mesma página. Se isso não for possível, eu corrijo com o codigo do Wordpress.

 

E eu já aviso que sou um pouco "orgulhoso" - se essa é a expressão corréta - então, APENAS ME DIGAM AS ALTERAÇÕES QUE EU DEVO FAZER!

 

Formulario:

 

<form action="upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>

 

PHP:

 



<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 10000000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "apng"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG, APNG and GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>
Link para o comentário
Compartilhar em outros sites

  • Moderador

@Lerub Olá, Todos nós temos orgulho quando se trata de alguma coisa.

 

Porém, você deve lembrar que não é assim que funciona aqui. Participar do fórum não é direito, é um privilégio.

Dito isso, volto ao problema. Não vou dar códigos prontos.

 

Mas posso dar o norte para você pesquisar e tentar implementar. Você vai fazer isso com ajax(requisição assíncrona).

Crie um novo form contendo apenas um campo de input. Através do jQuery você faz uma requisição assíncrona usando a função $.ajax() para um arquivo php que faça a verificação do e-mail e retorne a resposta em um elemento que você definir.

 

Posso dar um exemplo simples de requisição. 

 

$(document).ready(function(){
     $('#verificarEmail').on('blur', function(){
         var email = $('#verificarEmail').val();
         $.ajax({
                url: 'processaDados.php',
                dataType: 'html',
                data: {verifica: email} 
         }).done(function(retorno){
               $('#msg-retorno').html(retorno);
          
         });
     });

});

Obviamente, copiar este código não vai funcionar. Precisas entender o funcionamento dele.

Basicamente ao tirar o foco do campo input, faz uma requisição assíncrona com o arquivo processaDados.php  onde nele você verifica se o e-mail é válido ou se ele é cadastrado no seu banco de dados...  não sei qual tipo de verificação que você quer fazer., 

Link para o comentário
Compartilhar em outros sites

Só verificar se é um e-mail válido. Apesar que eu não pretendo enviar uma notificação, por enquanto. É só um registro de quem enviou a imagem.

 

agora que eu cochilei um pouco, eu vou ver como resolver isso. Eu adimito ter copiado isso da W3C. Hehe! E eu nunca consegui fazer Ajax funcuinar. já consegui até um "Hello" em PythonWeb...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderador

@Lerub

7 horas atrás, Lerub disse:

Só verificar se é um e-mail válido.

Nesse caso, você pode validar via Javascript apenas ou usar o php mesmo.

 

Em php você pode criar uma função ou usar uma já existente.

Por exemplo este: 

 

arquivo funcoes.php

function validaEmail($email){
    $er = "/^(([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}){0,1}$/";
    if (preg_match($er, $email)):
	    return true;
    else :
	    return false;
    endif;
}

Para usar seria algo assim:

// criamos uma variável com um e-mail qualquer. 
// Aqui pode ser um $_POST['email'] caso venha de um formulário
$email = "[email protected]";

include 'funcoes.php';
 
// usamos a função isMail passando a variável $email
if (validaEmail($email)):
    echo "É um e-mail válido.";
else:
    echo "E-mail inválido.";
endif;

 

Link para o comentário
Compartilhar em outros sites

Até o momento, eu cheguei nesse resultado.

 

Form:

 


<p><span class="error">* required field.</span></p>
<form action="upload.php <?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
    Name: <input type="text" name="name" value="<?php echo $name;?>">
  <span class="error">* <?php echo $nameErr;?></span>
  <br><br>
  E-mail: <input type="text" name="email" value="<?php echo $email;?>">
  <span class="error">* <?php echo $emailErr;?></span>
  <br><br>
  Website: <input type="text" name="website" value="<?php echo $website;?>">
  <span class="error"><?php echo $websiteErr;?></span>
  <br><br>
  Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
  <br><br>
  Gender:
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male
  <span class="error">* <?php echo $genderErr;?></span>
  <br><br>
 </form>

 

PHP:

 


<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 10000000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "apng"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG, APNG and GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}

// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
      $nameErr = "Only letters and white space allowed";
    }
  }
  
  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = "Invalid email format";
    }
  }
    
  if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
    // check if URL address syntax is valid (this regular expression also allows dashes in the URL)
    if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
      $websiteErr = "Invalid URL";
    }
  }

  if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }

  if (empty($_POST["gender"])) {
    $genderErr = "Gender is required";
  } else {
    $gender = test_input($_POST["gender"]);
  }
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

 

Só que agora, o upload não é concluido e é gerado uma mensagem de erro 404 .

 

Edit

Eu consegui uma maneira de comtornar o erro. Eu apago <?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?> que é a medida de segurança, para que não possam injetar código pela URL. E ainda da para efetuar o upload sem preencher os campos obrigatórios.

 

Esse tutorial ensinou uma  coisa interessante - e que eu aprendi com o WP - mas, ainda não consigo mesclar isso com outro tipo de formulario.

 

Edit2

 

Segui esse tutorial e gera a seguinte mensagem:

 

Citação

Parse error: syntax error, unexpected ',' in /home/suite906/beta_html/beta/upload.php on line 25

 

PHP:

 


<?php
echo '<pre>';

var_export($_POST);

echo '</pre>';

echo '<pre>';

var_export($_FILES);

echo '</pre>';


$error = '';

 

if ($_FILES['filePhoto']['error'] > 0) {

$error = 'Sorry, there was an error in uploading the file';

} elseif ($_FILES['filePhoto']['type'] != 'image/gif', 'image/png',  'image/jpeg') {

$error = 'Only .gif files are allowed';

} elseif ($_FILES['filePhoto']['size'] >  11000000) { 

$error = 'Files size should be less than 50KB';

} else {

 

$sizeInfo = getimagesize($_FILES['filePhoto']['tmp_name']);

 

if ($sizeInfo[0] > 100 || $sizeInfo[1] > 125) {

$error = 'Desculpe! Você ultrapasspu o limite de 11M';

} else {

move_uploaded_file($_FILES['filePhoto']['tmp_name'], "uploads/".$_POST['txtUsername'].".gif");

}

 

}
 

if ($error == '') {

echo 'Thnkk yooouuu!';

} else {

echo $error;

}

 
 
 

?>

 

Sugestões?

Link para o comentário
Compartilhar em outros sites

Eu resolvi voltar a usar esse código:

 

<?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); // Check if image file is a actual image or fake image if(isset($_POST["submit"])) {     $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);     if($check !== false) {         echo "File is an image - " . $check["mime"] . ".";         $uploadOk = 1;     } else {         echo "File is not an image.";         $uploadOk = 0;     } } // Check if file already exists if (file_exists($target_file)) {     echo "Sorry, file already exists.";     $uploadOk = 0; } // Check file size if ($_FILES["fileToUpload"]["size"] > 10000000) {     echo "Sorry, your file is too large.";     $uploadOk = 0; } // Allow certain file formats if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "apng" && $imageFileType != "gif" ) {     echo "Sorry, only JPG, JPEG, PNG, APNG and GIF files are allowed.";     $uploadOk = 0; } // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) {     echo "Sorry, your file was not uploaded."; // if everything is ok, try to upload file } else {     if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {         echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";     } else {         echo "Sorry, there was an error uploading your file.";     } } // define variables and set to empty values $nameErr = $emailErr = $genderErr = $websiteErr = ""; $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") {   if (empty($_POST["name"])) {     $nameErr = "Name is required";   } else {     $name = test_input($_POST["name"]);     // check if name only contains letters and whitespace     if (!preg_match("/^[a-zA-Z ]*$/",$name)) {       $nameErr = "Only letters and white space allowed";     }   }      if (empty($_POST["email"])) {     $emailErr = "Email is required";   } else {     $email = test_input($_POST["email"]);     // check if e-mail address is well-formed     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {       $emailErr = "Invalid email format";     }   }        if (empty($_POST["website"])) {     $website = "";   } else {     $website = test_input($_POST["website"]);     // check if URL address syntax is valid (this regular expression also allows dashes in the URL)     if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {       $websiteErr = "Invalid URL";     }   }   if (empty($_POST["comment"])) {     $comment = "";   } else {     $comment = test_input($_POST["comment"]);   }   if (empty($_POST["gender"])) {     $genderErr = "Gender is required";   } else {     $gender = test_input($_POST["gender"]);   } } function test_input($data) {   $data = trim($data);   $data = stripslashes($data);   $data = htmlspecialchars($data);   return $data; } ?>

 

O unico problema é o fato da  página ser redirecionada sem a confirmação dos dados.

Link para o comentário
Compartilhar em outros sites

Como eu faço para validar o Upload também? E enviar os dados para um arquivo de texto?

 

Eu consegui um meio de não ter que atualizar a página. Verei como implementar a validação do formuláril e-mail.

 


<?php if(isset($_POST['submit'])) { //The form has been submitted, prep a nice thank you message $output = '<h1>Thanks for your file and message!</h1>'; //Set the form flag to no display (cheap way!) $flags = 'style="display:none;"'; //Deal with the email $to = '[email protected]'; $subject = 'a file for you'; $message = strip_tags($_POST['message']); $attachment = chunk_split(base64_encode(file_get_contents($_FILES['file']['tmp_name']))); $filename = $_FILES['file']['name']; $boundary =md5(date('r', time())); $headers = "From: [email protected]\r\nReply-To: [email protected]"; $headers .= "\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"_1_$boundary\""; $message="This is a multi-part message in MIME format. --_1_$boundary Content-Type: multipart/alternative; boundary=\"_2_$boundary\" --_2_$boundary Content-Type: text/plain; charset=\"iso-8859-1\" Content-Transfer-Encoding: 7bit $message --_2_$boundary-- --_1_$boundary Content-Type: application/octet-stream; name=\"$filename\" Content-Transfer-Encoding: base64 Content-Disposition: attachment $attachment --_1_$boundary--"; mail($to, $subject, $message, $headers); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>MailFile</title> </head> <body> <?php echo $output; ?> <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" <?php echo $flags;?>> <p><label for="message">Message</label> <textarea name="message" id="message" cols="20" rows="8"></textarea></p> <p><label for="file">File</label> <input type="file" name="file" id="file"></p> <p><input type="submit" name="submit" id="submit" value="send"></p> </form> </body> </html>

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Lerub

 

3 horas atrás, Lerub disse:

Eu consegui um meio de não ter que atualizar a página. Verei como implementar a validação do formuláril e-mail.

Eu respondi isso mais acima. Use o ajax para validações em  tempo real, sem a necessidade de atualizar a página.

 

Sobre validar o upload, o que você deseja com isso?  seria validar os tipos de arquivos aceitos? 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Lerub Ah mas nesse caso, tem duas formas:

 

1) Ter um fomulário de cadastro de usuários, banco de dados.

O usuário teria um login e senha. Você poderia  identificar o usuário através do ID gravado em uma sessão depois de ter feito o login, buscar na tabela o email dele e enviar a notificação  de imagem publicada.

 

 

2)Ter um formulário contendo um campo input para inserir o nome, outro para inserir o e-mail e o campo do tipo file para enviar a imagem.

Nesse caso, ao enviar a imagem, o php recebe o nome dele  e o e-mail...  assim que terminado de enviar ele recebe um e-mail sendo informado que em breve a imagem será publicada.

Link para o comentário
Compartilhar em outros sites

Isso eu já estou tentando resolver. Mas, eu ainda preciso das informações de quem enviou. Assim eu posso fazer uma referenccia a(o) visitante que enviou a imagem.

 

Jajá eu volto com o código.

 

Edit:

 

Eentão... tem esse código, que eu postei aqui antes.

 


<doctype html>
<html>
<head>
<title>Tests</title><meta charset="utl8">
</head>
<body>


<?php if(isset($_POST['submit'])) { //The form has been submitted, prep a nice thank you message 
$output = '<h1>Thanks for your file and message!</h1>'; //Set the form flag to no display (cheap way!) 
$flags = 'style="display:none;"'; //Deal with the email 
$to = '[email protected]'; 
$subject = 'a file for you'; 
$message = strip_tags($_POST['message']);
 $attachment = chunk_split(base64_encode(file_get_contents($_FILES['file']['tmp_name'])));
  $filename = $_FILES['file']['name']; 
 $boundary =md5(date('r', time())); 
 $headers = "From: [email protected]\r\nReply-To: [email protected]"; 
 $headers .= "\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; 
 boundary=\"_1_$boundary\"";
  $message="This is a multi-part message in MIME format. --_1_$boundary Content-Type: multipart/alternative;
   boundary=\"_2_$boundary\" --_2_$boundary Content-Type: text/plain;
    charset=\"iso-8859-1\" Content-Transfer-Encoding: 7bit $message --_2_$boundary-- --_1_$boundary Content-Type: application/octet-stream;
     name=\"$filename\" Content-Transfer-Encoding: base64 Content-Disposition: attachment $attachment --_1_$boundary--";
      mail($to, $subject, $message, $headers); } 
      ?>
 <?php echo $output; ?> <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" <?php echo $flags;?>> <p><label for="message">Message</label> <textarea name="message" id="message" cols="20" rows="8"></textarea></p> <p><label for="file">File</label> <input type="file" name="file" id="file"></p> <p><input type="submit" name="submit" id="submit" value="send"></p> </form>
</body>
</html>

Só que, mesmo sem completar nenhum campo, aparece a mensagem de agradecimento e retorna um erro. E esse é o unico  código que eu testei, que não redireciona para outra página.

 

Resultado:


Warning: file_get_contents(): Filename cannot be empty in /home/domainUser/beta_html/beta/tests.php on line 15

Thanks for your file and message!

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Lerub Minha sugestão é que você passe a usar arquivos diferentes para formulário e php.

 

Exemplo simples:

 

arquivo.HTML

<form enctype="multipart/form-data" action="upload.php" method="post">
   <input type="text" name="nome"  placeholder="Insira seu nome aqui" />
   <input type="text" name="email" placeholder="Insira seu E-mail aqui" />
   <input type="file" name="img" />
   <textarea name="message"></textarea>
   <input type="submit" value="Enviar" />

</form>

 

Arquivo upload.php

<?php
   
   //dados escritos no formulário
   $nome  = $_POST["nome"];
   $email = $_POST["email"];
   $msg   = $_POST["message"];

   //arquivo que foi enviado
   $arquivo_tmp = $_FILES['arquivo']['tmp_name'];
   $destino = 'imagens/' . $_FILES['arquivo']['name'];
   
 
   //linha que faz o upload. Só mero exemplo
    $upload = move_uploaded_file($arquivo_tmp, $destino);
    
    if($upload):
      
       //aqui dentro você pode colocar uma instrução SQL para salvar a mensagem do usuário como se fosse uma descrição da imagem.
       
       //Parte do enviar e-mail, este exemplo é simples. Aconselho a usar o phpmailer para enviar os e-mails.
       $from = "Nome do seu blog";
       $to = $email;
       $de = "[email protected]"; 
       $subject = "Confirmação de upload";
       $message = "Olá $nome, Seu upload foi realizado com sucesso. Em breve ele será publicado";
       $headers = "De:". $De;
 
       if(mail($to, $subject, $message, $headers)):
          echo "A mensagem de e-mail foi enviada.";
       endif;
   endif;

  

Bem, exemplo ali é simples, não considerei segurança e nem nada.. só apare lógica mesmo.

Basicamente você vai receber do formulário os dados, fazer o upload do arquivo para o servidor, registrar a message da imagem como descrição e enviar ao e-mail da pessoa um aviso de que vai ser publicado.

 

Recomendo que não copie o código, mas sim use-o para estudar e implementar o seu.

 

Dicas:

Se usar o phpmailer,  a versão nova requer que faça uma instalação de um jeito diferente. Chamado Composer. Ele é um controle de versão, como o github.

 

 

Link para o comentário
Compartilhar em outros sites

Obrogado pelo conselho. E eu estou fazendo isso. O problema  é quela fase de aprendizado - CTRL-C CTRL-V - e eu preciso trabalhar en tempo integral, se quiser ganhar alguma grana com o blog.

 

Eu só consegui que check se tem um arquivo selecionado.

 

agora, enviar e-mail de confirmação  imagens para um diretório. E seria bom saber quem  enviou a imagem.


<doctype html>
<html>
<head>
<title>Tests</title><meta charset="utl8">
</head>
<body>
<?php
if($_POST && isset($_FILES['my_file']))
{

    $from_email         = '...'; //from mail, it is mandatory with some hosts
    $recipient_email    = '...'; //recipient email (most cases it is your personal email)
   
    //Capture POST data from HTML form and Sanitize them,
    $sender_name    = filter_var($_POST["sender_name"], FILTER_SANITIZE_STRING); //sender name
    $reply_to_email = filter_var($_POST["sender_email"], FILTER_SANITIZE_STRING); //sender email used in "reply-to" header
    $subject        = filter_var($_POST["subject"], FILTER_SANITIZE_STRING); //get subject from HTML form
    $message        = filter_var($_POST["message"], FILTER_SANITIZE_STRING); //message
   
    /* //don't forget to validate empty fields
    if(strlen($sender_name)<1){
        die('Name is too short or empty!');
    }
    */
   
    //Get uploaded file data
    $file_tmp_name    = $_FILES['my_file']['tmp_name'];
    $file_name        = $_FILES['my_file']['name'];
    $file_size        = $_FILES['my_file']['size'];
    $file_type        = $_FILES['my_file']['type'];
    $file_error       = $_FILES['my_file']['error'];

    if($file_error > 0)
    {
        die('Upload error or No files uploaded');
    }
    //read from the uploaded file & base64_encode content for the mail
    $handle = fopen($file_tmp_name, "r");
    $content = fread($handle, $file_size);
    fclose($handle);
    $encoded_content = chunk_split(base64_encode($content));

        $boundary = md5("sanwebe");
        //header
        $headers = "MIME-Version: 1.0\r\n";
        $headers .= "From:".$from_email."\r\n";
        $headers .= "Reply-To: ".$reply_to_email."" . "\r\n";
        $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n";
       
        //plain text
        $body = "--$boundary\r\n";
        $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n";
        $body .= "Content-Transfer-Encoding: base64\r\n\r\n";
        $body .= chunk_split(base64_encode($message));
       
        //attachment
        $body .= "--$boundary\r\n";
        $body .="Content-Type: $file_type; name=".$file_name."\r\n";
        $body .="Content-Disposition: attachment; filename=".$file_name."\r\n";
        $body .="Content-Transfer-Encoding: base64\r\n";
        $body .="X-Attachment-Id: ".rand(1000,99999)."\r\n\r\n";
        $body .= $encoded_content;
   
    $sentMail = @mail($recipient_email, $subject, $body, $headers);
    if($sentMail) //output success or failure messages
    {      
        die('Thank you for your email');
    }else{
        die('Could not send mail! Please check your PHP mail configuration.');  
    }

}
?>


<form enctype="multipart/form-data" method="POST" action="">
    <label>Your Name <input type="text" name="sender_name" /> </label>
    <label>Your Email <input type="email" name="sender_email" /> </label>
    <label>Subject <input type="text" name="subject" /> </label>
    <label>Message <textarea name="message"></textarea> </label>
    <label>Attachment <input type="file" name="my_file" /></label>
    <label><input type="submit" name="button" value="Submit" /></label>
</form>
</body>
</html>
Link para o comentário
Compartilhar em outros sites

  • Moderador

@Lerub

3 minutos atrás, Lerub disse:

O problema  é quela fase de aprendizado - CTRL-C CTRL-V - e eu preciso trabalhar en tempo integral, se quiser ganhar alguma grana com o blog.

Bem... aí o problema é com você exclusivamente.

Ao desenvolver, você deve entender o que acontece, não só copiar e colar.

 

Se você analisar meu post anterior, verá que deixei uma estrutura básica. Porque não utilizar? 

Não iremos dar um código pronto que funcione. Pois sempre incentivamos o usuário a pesquisa, ler, estudar para poder implementar seus códigos. 

espero que entenda. O que quer fazer é algo simples, mas exige que você se dedique para entender como funciona.

Link para o comentário
Compartilhar em outros sites

Eu  estou aprendendo a lidar com o PHPMail. Por enquanto, eu so aprendi a enviar para o e-mail  que a pessoa digita no formulário.

 

Eu vou ver como faço para incluir um log que registra  todos os dados no formulário para ficar mais fácil de fazer a referencia para quem me enviou a imagem. E incluir um formulário para upload - tanto para o e-mail quanto um diretório do servidor - também.

Edit:

Eu  temtei inserir esse código, para gerar o log com put    


$file = '/uploads/people.txt';
$current = file_get_contents($file);
$current .= "$name";
file_put_contents($file, $current);

 

e aparece esse erro

Citação

 


Parse error: syntax error, unexpected 'X' (T_STRING) in
 

 

 

E tentei de divérsas maneiras e deu o mesmo erro.

 

<?php include("upload.php"); ?>
<form action="<?= htmlspecialchars($_SERVER["PHP_SELF"]) ?>" method="post">
<h3>Envie a sua bizarrice!</h3>
<fieldset>
<input placeholder="Nome" type="text" name="name" value="<?= $name ?>">
<span><?= $name_error ?></span>
</fieldset>
<fieldset>
<input placeholder="Email" type="text" name="email" value="<?= $email ?>">
<span><?= $email_error ?></span>
</fieldset>
<fieldset>
<input placeholder="Site" type="text" name="url" value="<?= $url ?>">
<span><?= $url_error ?></span>
</fieldset>
<fieldset>
<textarea value="<?= $message ?>" name="message">
</textarea>
</fieldset>
<fieldset>
<button name="submit" type="submit" data-submit="Um instantinho...">Enviar</button>
</fieldset>
<div><?= $success ?></div>

<?php 
//upload.php
$name_error = $email_error = $url_error = "";
$name = $email = $message = $url = $success = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $name_error = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
      $name_error = "Apenas letras e espaços e branco"; 
    }
  }

  if (empty($_POST["email"])) {
    $email_error = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $email_error = "Invalid email format"; 
    }
  }
  

  if (empty($_POST["url"])) {
    $url_error = "";
  } else {
    $url = test_input($_POST["url"]);
    if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$url)) {
      $url_error = "Invalid URL"; 
    }
  }

  if (empty($_POST["message"])) {
    $message = "";
  } else {
    $message = test_input($_POST["message"]);
  }
  
  if ($name_error == '' and $email_error == '' and $phone_error == '' and $url_error == '' ){
      $message_body = '';
      unset($_POST['submit']);
      foreach ($_POST as $key => $value){
          $message_body .=  "$key: $value\n";
      }
      $headers = 'From: ****' . "\r\n" .
    'Reply-To: 8*****' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

      $to = $email;
      $subject = 'Recebemos...';
      if (mail($to, $subject, $message)){
          $success = "Enviado para o multiverso...";
          $name = $email = $message = $url = '';
      }
  }
  
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...