Jump to content

Gustavo2503

Members
  • Content count

    29
  • Joined

  • Last visited

Posts posted by Gustavo2503


  1. Estes são alguns pontos do que eu preciso

    1. Eu tenho um sistema que em cada registro tem um ou mais anexos.
    2. Os nomes destes anexos estão guardados no banco de dados, e os arquivos ficam na pasta anexos/ no servidor. 
    3. O usuário manda este registro via email e os anexos devem ir juntos.
    4. Eu estou usando a função do PHP mail().

    Objetivo: Enviar um email com um ou mais anexos

    Problema: Este código só está enviando um anexo, que é o último anexo que a query pega.

    OBS.: Eu não entendo de boundary e de anexos por email, eu peguei esse código na internet, mas eu fiz algumas alterações nele, porque no código original só mandava um anexo.

    $assunto = "Registros";
    $boundary = "XYZ-".md5(date("dmYis"))."-ZYX";
    
    // cabeçalho do email
    $cabecalho = "MIME-Version: 1.0" . PHP_EOL;
    $cabecalho .= "Content-Type: multipart/mixed; ";
    $cabecalho .= "boundary=" . $boundary . PHP_EOL;
    $cabecalho .= "$boundary" . PHP_EOL;
    
    $msg = "";
    // Anexos
    $sql = " SELECT A.LOCAL, A.ARQUIVO
     FROM TB_ANEXOS AS A
      LEFT JOIN TB_REGISTROS AS R ON (A.ID_REGISTRO = R.ID)
     WHERE R.ID = $ID ";
    $resultado = mysqli_query($link, $sql);
    if ($resultado){
        while ($dados = mysqli_fetch_array($resultado, MYSQLI_ASSOC)){
            $LOCAL = $dados['LOCAL'];
            $ARQUIVO_NAME = $dados['ARQUIVO'];
            $path = 'anexos/'.$LOCAL;
            $fileType = mime_content_type( $path );
    
            // Pegando o conteúdo do arquivo
            $fp = fopen( $path, "rb" ); // abre o arquivo enviado
            $anexo = fread( $fp, filesize( $path ) ); // calcula o tamanho
            $anexo = chunk_split(base64_encode( $anexo )); // codifica o anexo em base 64
            fclose( $fp ); // fecha o arquivo
    
            $msg.= "Content-Type: ". $fileType ."; name=\"". $ARQUIVO_NAME . "\"" . PHP_EOL;
            $msg.= "Content-Transfer-Encoding: base64" . PHP_EOL;
            $msg.= "Content-Disposition: attachment; filename=\"". $ARQUIVO_NAME . "\"" . PHP_EOL;
            $msg.= "$anexo" . PHP_EOL;
            $msg.= "--$boundary" . PHP_EOL;
        }
    }
    
    $msg.= "--$boundary" . PHP_EOL;
    $msg.= "Content-Type: text/html; charset='utf-8'" . PHP_EOL;
    $msg.= "
    <!doctype html>
    <html lang='pt-br'>
    <head>
        <meta charset='UTF-8'>
        <meta name='viewport' content='width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0'>
        <meta http-equiv='X-UA-Compatible' content='ie=edge'>
        <title>$assunto</title>
        <style>
        h2, b, legend {
            color: #2d2d2d;
        }
        </style>
    </head>
    <body>
      <p>CORPO DO EMAIL</p>
    </body>
    </html>
    ";
    $msg.= "--$boundary" . PHP_EOL;
    
    if(mail($para, $assunto, $msg, $cabecalho)) {
    	echo "<p>Email enviado com sucesso</p>";
    } else {
        echo '<p style="color: #f00">Erro!</p>';
    }

     


  2. fgets() não funciona em xml versão 4.00, só funciona na versão 3.10

    $arquivo = $_FILES['arquivo']["tmp_name"];
    
    $xml = fopen($arquivo, 'r');
    while(!feof($xml)){
      $linha = fgets($xml);
      if (!$linha){
        $linha = "Erro";
      }
    }
    
    echo $linha;

    Ele retorna "Erro" quando o xml está na versão 4.00. Como arruma isso?


  3. Eu estou criando uma classe que cria modais usando React, eu preciso criar um modal dentro de um modal, para isso, eu quero chamar a mesma função dentro dela mesma. O modal é criado, mas o problema é que ele não abre, abre o modal principal (#modal-1), mas não abre o sub modal (#modal-2), veja como ficou meu código:

    index.html

    <!DOCTYPE html>
    <html lang="pt-br">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Modal</title>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
        <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
        <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
        <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
        <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
        <script src="js/modal.js" type="text/babel"></script>
        <link rel="stylesheet" href="css/modal.css">
    </head>
    <body>
    
    <div align="center">
        <h1>Modal</h1>
    </div>
    
        <button type="button" data-modal="modal-1">Open Modal</button>
        <div id="modal-content"></div>
    
        <script type="text/babel">
            const contentSub = [
                <h2>Title SubModal 1</h2>,
                <p>SubModal</p>,
                <small>Rodapé submodal 1</small>
            ];
            const idSub = "modal-2";
    
            const content = [
                <h2>Title 1</h2>,
                <section>
                    <button type="button" data-modal="modal-2">Open SubModal</button>
                    <Modal id={idSub} content={contentSub}/>
                </section>,
                <small>Rodapé 1</small>
            ];
    
            const id = "modal-1";
            ReactDOM.render(
                <Modal id={id} content={content}/>,
                document.getElementById('modal-content')
            );
        </script>
    
    </body>
    </html>

    js/modal.js

    class Modal extends React.Component{
        constructor(props) {
            super(props);
    
            this.id = this.props.id;
    
            this.backgroudColorHeader = this.props.backgroudColorHeader === undefined ? 'rgba(103, 117, 240, 1)' : this.props.backgroudColorHeader;
            this.textColorHeader = this.props.textColorHeader === undefined ? '#fff' : this.props.textColorHeader;
    
            this.backgroudColorBody = this.props.backgroudColorBody === undefined ? 'rgba(255, 255, 255, 1)' : this.props.backgroudColorBody;
            this.textColorBody = this.props.textColorBody === undefined ? '#000' : this.props.textColorBody;
    
            this.backgroudColorFooter = this.props.backgroudColorFooter === undefined ? 'rgba(103, 117, 240, 1)' : this.props.backgroudColorFooter;
            this.textColorFooter = this.props.textColorFooter === undefined ? '#fff' : this.props.textColorFooter;
    
            this.borderRadius = this.props.borderRadius === undefined ? '8px' : this.props.borderRadius;
    
            this.content = this.props.content === undefined ? [<h2>header content</h2>, <p>body content</p>, <p>footer content</p>] : this.props.content;
            this.size = this.props.size === undefined ? 3 : this.props.size;
        }
    
        closeModal = () => {
            $('#'+this.id).removeClass("show");
            $('body').removeClass("overflow-hidden");
        };
    
        render(){
            $(`[data-modal]`).click( function () {
                var id = $(this).attr("data-modal");
                var el = document.getElementById(id);
                $(el).addClass("show");
                $('body').addClass("overflow-hidden");
            });
    
            var background,
                text;
    
            background = this.backgroudColorHeader;
            text = this.textColorHeader;
            const transparencyBackgroundHeader = background.substring(background.length-2,background.length-1) -.1;
            const backgroundColorHeader = `${background.substring(0,background.length-2)}${transparencyBackgroundHeader})`;
            const styleColorHeader = {
                backgroundColor: backgroundColorHeader,
                color: text,
                borderBottom: `1px solid ${background}`
            };
    
            background = this.backgroudColorBody;
            text = this.textColorBody;
            const styleColorBody = {
                backgroundColor: background,
                color: text
            };
    
            background = this.backgroudColorFooter;
            text = this.textColorFooter;
            const transparencyBackgroundFooter = background.substring(background.length-2,background.length-1) -.1;
            const backgroundColorFooter = `${background.substring(0,background.length-2)}${transparencyBackgroundFooter})`;
            const styleColorFooter = {
                backgroundColor: backgroundColorFooter,
                color: text,
                borderTop: `1px solid ${background}`
            };
    
            const styleBorderRadius = {borderRadius: this.borderRadius};
    
            const eDivision = ['h', 'b', 'f'];
            const eContent = this.content;
            var div = [];
            for (var i=0;i<eContent.length;i++){
                const part = eDivision[i].replace('h', 'header').replace('b', 'body').replace('f', 'footer')+"-modal";
                const closeModal = i === 0 ? <span onClick={this.closeModal} className="close-modal"><i className="material-icons">close</i></span> : "" ;
    
                var style;
                if (i===0) style = styleColorHeader;
                else if (i===1) style = styleColorBody;
                else style = styleColorFooter;
                div.push(<div key={i+1} className={part} style={style}>
                           {closeModal}
                           {eContent[i]}
                         </div>);
            }
    
            const eSize = this.size;
            const s = ['s', 'm-s', 'm', 'm-l', 'l'];
            const size = s[eSize-1];
    
            const classModal = (size !== "s" &&
                size !== "m-s" &&
                size !== "m" &&
                size !== "m-l" &&
                size !== "l") ? 'modal-modal modal-m' : "modal-modal modal-"+size;
    
            return <div id={this.id} className={classModal}>
                       <div className="overflow-modal">
                           <div className="container-modal" style={styleBorderRadius}>
                               {div}
                           </div>
                       </div>
                   </div>;
        }
    }

     


  4. Eu preciso de um link para abrir um arquivo em decodificado em base64, eu fiz o link mas quando eu abro o link ele não aparece nada, o título da página fica "Sem título" e a página fica branca, vazia. E quando eu clico na URL e dou ENTER, ele aparece o meu arquivo normal. O link está assim:

    <a target="_blank" href="data:application/pdf;base64,MEU_ARQUIVO_BASE64">Arquivo</a>

    Como arrumar isso?


  5. O que há de errado com o meu código jQuery?

    function atualizaItens45() {
      $.ajax({
        url: 'tb_itens.php',
        type: 'POST',
        data: { id: 45, valor: '1800.00' },
        beforeSend: function (){
          $('.carregando').fadeIn();
          document.title = 'carregando...';
        },
        complete: function (){
          $('.carregando').fadeOut();
          document.title = 'TÍTULO';
        },
        success: function (data) {
          $('#tabela-itens-info-45 tbody').html(data);
          $('#tabela-itens-edita-45 tbody').html(data);
        },
        error: function (request, status, erro) {
          alert('Erro! Por favor entre em contato conosco (COD: 1801)');
        }
      });
    }
    atualizaItens45();

     


  6. Quando eu abro o email no Gmail, vai em formato de HTML, mas no Outlook fica todo zuado, o código está assim:

    $email_enviar = "Nome <email@exemplo.com>";
    $email_para = "Nome <email@exemplo.com>";
    $cabecalho = 'MIME-Version: 1.0' . "\r\n";
    $cabecalho.= 'Content-type: text/html; charset=UTF-8;' . "\r\n";
    $cabecalho.= "Return-Path: $email_enviar \r\n";
    $cabecalho.= "From: $email_enviar \r\n";
    $cabecalho.= "Reply-To: $email_enviar \r\n";
    $assunto = "Assunto";
    $menssagem = "
    <!doctype html>
    <html lang='pt-br'>
    <head>
        <meta charset='UTF-8'>
        <meta name='viewport' content='width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0'>
        <meta http-equiv='X-UA-Compatible' content='ie=edge'>
        <title>Título</title>
        <style type='text/css'>
    </head>
    <body>
          <div align='center'>
          	<h1>Título</h1>
          </div>
          
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget commodo tortor, eget tincidunt urna. Aliquam odio elit, tristique ac nisl vel, fermentum porta elit. Suspendisse urna magna, maximus et ipsum quis, rutrum tristique sem. Curabitur faucibus nulla malesuada dolor venenatis pharetra. Curabitur ac massa placerat, viverra nibh id, volutpat nibh. Vestibulum leo purus, placerat vel lorem eu, rhoncus lacinia erat. Morbi venenatis fermentum pretium.</p>
    </body>
    </html>
    ";
      
    if (mail($email_para, $assunto, $mensagem, $cabecalho)){
    	echo 'Sucesso';  
    } else {
    	echo 'Erro';  
    }

     


  7. Eu preciso formatar um número com formatação brasileira para dos EUA. Mas está retornando assim:

    number_format('450.370,50', 2, '.', ',')

    Está retornando 450.37
    Era pra trazer 450,370.50


  8. Olá,

     

    Eu preciso da diferença entre um número e outro, mas ele trás deste jeito:

    $valor = 300 - 210.60;
    //retorna 89.4

    Mas eu preciso que retorne 89.40. Como eu faço isso?


  9. Olá!

    Eu preciso fazer uma tabela que contém muitos registros, para organizá-lo melhor eu necessitarei de uma paginação que não faça refresh na página, que não precise de um envio do método GET, que o usuário tivesse a opção de escolher quantos registros por página ele verá, e que só aparecesse no máximo 5 botões, por exemplo:

    < 1 2 3 4 5 >

    Ai o usuário foi pra página 8.

    < 6 7 8 9 10 >

    E detalhe, sem usar o DataTables. Agradeço.


  10. Olá!

    Existe uma extensão fácil de usar para baixar tabela em PDF?

    Eu tentei usar o jsPDF mas não consegui baixar a tabela com o css.

    var doc = new jsPDF();
    
    $('#pdf').click(function () {
      doc.fromHTML($('#tb_usuarios').get(0), 15, 15, {
          'width': 170
      });
      doc.save('usuarios.pdf');
    });

     


  11. Estou com problema para recuperar um atributo data. No meu código php, que recupera os dados do usuário no banco de dados, eu usei um WHILE para escrever numa tabela estes dados, cada button tem um atributo data-modal, eu preciso deles para abrir um modal que editará suas informações, quando eu coloco este buttton dentro do while ele não o retorna, mas quando eu coloco o button fora do WHILE ele retorna o data-modal. Assim:

    modal.js

    $(document).ready( function(){
    
    	$(".btn-modal").click( function(){
    		const modal = $(this).attr("data-modal");
    		const fecha = $(modal+" .fecha-modal");
    
    		console.log("Irá abrir o modal: "+modal);
    
    		$(modal).css("display", "block");
    		$("body, html").css("overflow", "hidden");
    
    		fecha.click( function() {
    			$(modal+" > .modal-container").addClass("sobe-modal");
    			setTimeout(function(){
    				$(modal).css("display","none");
    				$("body, html").css("overflow", "auto");
    				$(modal+" > .modal-container").removeClass("sobe-modal");
    			}, 400);
    		});
    
    		shortcut.add("Esc",function(){
    			fecha.click();
    		});
    	});
    	
    });

     

    tb_usuarios.php (neste caso o atributo data-modal não será retornado)

    <?php
    require_once '../bd/banco.php';
    
    $sql = " SELECT * ";
    $sql.= " FROM TB_USUARIOS ";
    $sql.= " ORDER BY nome ASC ";
    
    $resultado = mysqli_query($link, $sql);
    if($resultado){
    	while ($dados = mysqli_fetch_array($resultado, MYSQLI_ASSOC)) {
    		$id_usu = $dados['id_usuario'];
    		$nome = $dados['nome'];
    		$email = $dados['email'];
    		$telefone = $dados['telefone'];
    		$cc = $dados['cc'];
    		$perfil = $dados['perfil'];
    		echo '
    		<tr>
    			<td>'.$nome.'</td>
    			<td>'.$email.'</td>
    			<td>'.$telefone.'</td>
    			<td>'.$cc.'</td>
    			<td>'.$perfil.'</td>
    			<td>
    				<button class="btn-modal" data-modal="#modal-edita-'.$id_usu.'">
    					<span class="fa fa-pencil"></span>
    				</button>
    				<button>
    					<span class="fa fa-close"></span>
    				</button>
    			</td>
    		</tr>
    		';
    	}
    } else {
    	echo '
    	<tr>
    		<td colspan="6">
    			<p style="color: #ff0000">Erro na execução da consulta. <a href="" target="_blank">Por favor entre em contato conosco</a></p>
    		</td>
    	</tr>
    	';
    }

     

    index.php (neste caso o atributo data-modal será retornado)

    <button class="btn btn-roxo btn-modal" data-modal="#modal-novo">
        <span class="fa fa-plus"></span>
        Novo
    </button>

    Me ajudem por favor!!!!


  12. Eu precisa fazer uma tabela que muda o ORDER BY de acordo que o usuário aperta no titulo. Esse é o meu código SQL:

    $sql = " SELECT DATE_FORMAT(data_inclusao, '%d/%m/%Y %T') AS data_inclusao, o.descricao, o.id_ocorrencias, o.id_usuario";
    $sql.= ", u.id, u.usuario, u.email ";
    $sql.= " FROM tbl_ocorrencias AS o JOIN tbl_usuarios AS u ON (o.id_usuario = u.id) ";
    $sql.= " WHERE id_usuario = $id_usuario ";
    $sql.= " ORDER BY o.descricao ASC";

    E quando clicar nesse título 'Descrição' ele muda o ORDER BY:

    <div class="col-md-10">
      <strong>
        <h4>
          <b>
            <div class="order_none margin-cabecalho">Descrição</div>
            <div class="order_a-z hidden margin-cabecalho">Descrição <small class="glyphicon glyphicon-sort-by-alphabet"></small></div>
            <div class="order_z-a hidden margin-cabecalho">Descrição <small class="glyphicon glyphicon-sort-by-alphabet-alt"></small></div>
          </b>
        </h4>
      </strong>
    </div>

    Esse é o código que muda o glyphicon:

    $('.order_none').click(function () {
      $('.order_none').removeClass('order_none').addClass('order_none hidden');
      $('.order_a-z').removeClass('order_a-z hidden').addClass('order_a-z');
      $('.order_z-a').removeClass('order_z-a hidden').addClass('order_z-a hidden');
    });
    
    $('.order_a-z').click(function () {
      $('.order_a-z').removeClass('order_a-z').addClass('order_a-z hidden');
      $('.order_z-a').removeClass('order_z-a hidden').addClass('order_z-a');
      $('.order_none').removeClass('order_none hidden').addClass('order_none hidden');
    });
    $('.order_z-a').click(function () {
      $('.order_z-a').removeClass('order_z-a').addClass('order_z-a hidden');
      $('.order_none').removeClass('order_none hidden').addClass('order_none');
      $('.order_a-z').removeClass('order_a-z hidden').addClass('order_a-z hidden');
    });

     


  13. Eu preciso importar arquivo csv para um Banco de Dados com o charset UTF-8, eu já fiz de tudo, me ajudem por favor. Meu código de importação esta assim:

    <?php
    header('Content-Type: text/html; charset=UTF-8');
    session_start();
    
    if(!$_SESSION['usuario']){
        header('Location: ../index.php?erro=1');
    }
    
    require_once '../db.class.php';
    
    $id_usuario = $_SESSION['id_usuario'];
    $arquivo_tmp = $_FILES['importar_arquivo']['tmp_name'];
    $target_file = basename($_FILES["importar_arquivo"]["name"]);
    $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    
    $dados = file($arquivo_tmp);
    
    $objDb = new db();
    $link = $objDb->conecta_mysql();
    $link->set_charset('utf8');
    
    // Verifica se o arquivo está vazio
    if($arquivo_tmp == '') {
        die();
    }
    
    // Verifica se a extenção do arquivo é csv
    if($imageFileType != "csv") {
        echo "<span style='color: red;'>Escolha um arquivo csv.</span><br>";
        die();
    }
    
    foreach($dados as $linha){
        $linha = trim($linha);
        $valor = explode(';', $linha);
    
        $descricao = $valor[0];
    
        $sql = " INSERT INTO tbl_ocorrencias(id_usuario, descricao) ";
        $sql.= " VALUES('$id_usuario', '$descricao') ";
    
        mysqli_query($link, $sql);
    }

     

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.