Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Lerub

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

Recommended Posts

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.";
    }
}
?>
Editado por DiF

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @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@dominio.com.br";
    
    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;

     

    Editado por DiF

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Ok. Eu vou dar uma olhada nisso. Eu parei com PHP, por um tempo, até  migrar para WordPress. Eu vou estudar mais sobre isso.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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?

    Editado por Lerub

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Como eu impéço o redirecionamento para "uploads.php" e consigo fazer os dois codigos PHP funcionarem juntos? Eu estou tendo problemas com isso.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • eu desisto! Preciso terminar um post mega atrasado. Alguma ideia para checar todos os campos?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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 = 'me@example.com'; $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: webmaster@example.com\r\nReply-To: webmaster@example.com"; $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>
    
    

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @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? 

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Eu usei o termo errado. Eu quis dizer: CHECAR. É para que quem visita o meu blog possa   enviar imagens referente a uma seção que eu penso em inaugurar. E seria legal se a pessoa pudesse deixar o seu nome e/ou nick.  O e-mail é para avisar que a imagem foi publicada.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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 = 'me@example.com'; 
    $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: webmaster@example.com\r\nReply-To: webmaster@example.com"; 
     $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!

    Editado por Lerub

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @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 = "seu_email@gmail.com"; 
           $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.

     

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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>
    Editado por Lerub

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Entendi sim, coléga. O que eu quis dizer é que o meu tempo anda apertado mesmo. Eu ainda dependo do AdSense para ganhar uma grana e o meu publico é bem especifico. O tipo que gosta de textão. É o que tem mais views no blog/.

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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;
    
    Editado por Lerub

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×