Jump to content

Omar~

Members
  • Content count

    897
  • Joined

  • Last visited

  • Days Won

    15

Posts posted by Omar~


  1. Simples você precisará adicionar um evento change ao seletor.

    Esse evento uma função irá ouvir esse evento que por sua vez irá realizar uma checagem do valor selecionado.

     

    De acordo com cada valor você irá usar a função createElement e então anexar suas propriedades como class, name e o que for mais necessários para você.

     

    Uma vez criado o input injete-o dentro de algum elemento, seja o um form ou um div dentro do formulário usando a função appendChild

     

     

    Veja um exemplo que preparei aqui:

    Spoiler
    
    <select name="id_plano" id="id_plano" required="">
        <option value="">Selecione uma Opção</option>
        <option value="1">Plano 1</option>
        <option value="2">Plano 2</option>
        <option value="3">Plano 3</option>
        <option value="4">Plano 4</option>
    </select>
    <div id="colocar-inputs"></div>
    
    <script>
        var colocar = document.getElementById('colocar-inputs');
        document.getElementById('id_plano').addEventListener('change', adicionarInput, false);
    
        /*
         * Essa função é acionada toda vez que o seletor é alterado
         * Ela vai criar elemento e definir dados de cada um deles
         */
        function adicionarInput(e) {
            removerInputs(); // Remove qualquer input inserido para realizar uma troca
            var valor = parseInt(e.target.value); // Obtem o value selecionado
            var inputA, inputB, inputC, inputD, inputE, inputF, inputG, inputH, inputI, inputsPadrao; // Variáveis de escopo
    
            if (valor) {
                inputA = document.createElement('input');
                inputB = document.createElement('input');
                inputC = document.createElement('input');
                inputD = document.createElement('input'); // Até o 4 elemento todas condições usam ele.
                inputE, inputF, inputG, inputH, inputI;
                inputsPadrao = [inputA, inputB, inputC];
    
                /* Como todas condições recebem esses inputs eles serão criados */
                inputA.name = 'titulo';
                inputB.name = 'telefone';
                inputC.name = 'endereco';
            }
    
            switch (valor) {
                case 1:
                    inputD.name = 'logo';
                    inputD.type = 'file';
    
                    insereInputs(inputsPadrao.concat([inputD])); // Adiciona os elementos criados
                    propridadesComuns(4); // 4 input's criados
                    break;
                case 2:
                    inputE = document.createElement('input');
                    inputF = document.createElement('input');
                    inputG = document.createElement('input');
    
                    inputD.name = 'email';
                    inputD.setAttribute('data-no', ''); // "data-no" inpede que seja definido a proprieade "required"
                    inputE.name = 'facebook';
                    inputE.setAttribute('data-no', '');
                    inputF.name = 'instagram';
                    inputF.setAttribute('data-no', '');
                    inputG.name = 'logo';
                    inputG.type = 'file';
    
                    insereInputs(inputsPadrao.concat([inputD, inputE, inputF, inputG]));
                    propridadesComuns(7); // 7 input's criados
                    break;
                case 3:
                    inputE = document.createElement('input');
                    inputF = document.createElement('input');
                    inputG = document.createElement('input');
                    inputH = document.createElement('input');
                    inputI = document.createElement('textarea');
    
                    inputD.name = 'email';
                    inputD.setAttribute('data-no', '');
                    inputE.name = 'facebook';
                    inputE.setAttribute('data-no', '');
                    inputF.name = 'instagram';
                    inputF.setAttribute('data-no', '');
                    inputG.name = 'logo';
                    inputG.type = 'file';
                    inputH.name = 'video';
                    inputH.setAttribute('data-no', '');
                    inputI.name = 'frase';
                    inputI.classList.add('form-control'); // Como essa é uma tag <textarea> e não <input>, a função "propridadesComuns" não irá funcionar para esse elemento
    
                    insereInputs(inputsPadrao.concat([inputD, inputE, inputF, inputG, inputH, inputI]));
                    propridadesComuns(8); // 8 input's criados, 1 é textarea
                    break;
                case 4:
                    // São exatamente dos memos elementos que são gerados na condição 3 (então desnecessário)
                    break;
                default :
                    removerInputs();
                    break;
            }
        }
    
        /*
         * Essa função vai definir propiedades que está
         * presente em quase todos os elementos como
         * class="form-control" & required, por isso
         * a existência dela para automatizar e reduzir
         * muitas linhas de código.
         * Porém alguns deles não recebem o required
         * Então uma checagem será feita se ele possui
         * a propiedade "data-no"
         */
        function propridadesComuns(quantidade) {
            var atual = '';
            for (var i = 0; i < quantidade; i++) {
                atual = colocar.getElementsByTagName('input')[i];
                atual.classList.add('form-control');
                if (!atual.dataset.no) {
                    atual.setAttribute('required', 'true');
                }
            }
        }
    
        /*
         * Essa função vai anexar os inputs recebendo
         * como parâmetro a lista do array "inputsPadrao"
         * que contém quais elementos serão inseridos.
         * Como isso ocorre várias vezes a cada condição
         * da função "adicionarInput" nada melhor que
         * automatizar e reduzir muitas linhas de código
         */
        function insereInputs(lista) {
            for (var i = 0; i < lista.length; i++) {
                colocar.appendChild(lista[i]);
            }
        }
    
        /*
         * Essa função irá remover todos os elementos
         * que foram inseridos.
         * Como eles devem ser trocados a cada condição
         * e o usuário pode selecionar o valor padrão
         * "Selecione uma Opção" do seletor, eles devem
         * ser removidos.
         */
        function removerInputs() {
            var alvos = colocar.querySelectorAll('.form-control'), i;
            if (alvos.length) {
                for (i = 0; i < alvos.length; i++) {
                    if (alvos[i].parentNode) {
                        alvos[i].parentNode.removeChild(alvos[i]);
                    }
                }
            }
        }
    </script>

     

     

     


  2. Usei o tinymce por quase 5 anos desenvolvi infinitos plugins e aplicações para o mesmo.

    Enfim hoje para meus clientes quando necessário aplico o ckEditor (o mesmo aqui do fórum, só que aqui é v4).

     

    Cara sobre isso de criar plugin fica complicado te ensinar em um post. Aconselho que apenda primeiro Javascript só então comece a estudar os recursos de plugins do tinymce

     

    Independente do joomla ou qualquer a funcionalidade, o mesmo se refere a ele. O que você quer um atalho e atalhos não existem na programação.


  3. Se eu entendi, você que linkar o usuário para uma página onde nessa página você quer que seja aberta um tab específica. Foi para isso que criei o método openTab.

    Nesse caso basta passe essa informação por GET

     

    Exemplo (em PHP):

    Página A que contém o link,

    <a href="endereco_da_pagina?abrir_tab=1">Ir para outra página mostrando a primeira tab</a>
    <a href="endereco_da_pagina?abrir_tab=2">Ir para outra página mostrando a segunda tab</a>
    <a href="endereco_da_pagina?abrir_tab=3">Ir para outra página mostrando a terceira tab</a>

    Página B que contém as tabs

    tab.openTab(<?= isset($_GET['abrir_tab']) ? $_GET['abrir_tab'] : 1 ?>);

    Na página então verificamos a existência dessa informação, se ela existir usamos seu valor, caso não usamos o valor 1.


  4. Antes de mais nada s solução apresentada pelo @Jack Oliveira é a única a qual você pode aderir pois desse forma como ele disse será impossível acessar diretamente o arquivo (não quer dizer que não possa baixa-lo).

    Tenha em mente que uma vez renderizado para o usuário no caso um PDF ele possui o arquivo ele poderá acessá-lo, pois quando você o renderiza o browser dele fará o download dele automaticamente assim como qualquer outro conteúdo presente em um documento html seja texto, video, audio ou qualquer outro arquivo.

     

    Em 19/05/2020 at 16:04, Guilherme Morete Felix disse:

    permitir a impressão dos arquivos com o cpf do aluno e um termo de compromisso como marca d'água.

    Já vi scripts no GitHub para impressão com marca baseadas em NodeJS, só que não as encontrei novamente (infelizmente)

    Mesmo assim como disse:

    - Se renderizou para o usuário já é dele....


  5. Se te ajuda eu desenvolvi um script para essa finalidade

    https://github.com/Spell-Master/sm-web/tree/master/javascript/TabPaginator

    <ul class="tab-menu">
        <li><a class="tab-link">London</a></li>
        <li><a class="tab-link">Paris</a></li>
        <li><a class="tab-link">Tokyo</a></li>
    </ul>
    
    <div class="tab-body">
        <h3>London</h3>
        <p>London is the capital city of England.</p>
    </div>
    
    <div class="tab-body">
        <h3>Paris</h3>
        <p>Paris is the capital of France.</p> 
    </div>
    
    <div class="tab-body">
        <h3>Tokyo</h3>
        <p>Tokyo is the capital of Japan.</p>
    </div>
    
    
    <script>
        var tab = new TabPaginator();
        tab.openTab(1); // Quer dizer que a primeira tab é o padrão (obs.: nesse caso é desnecessário pois por padrão sempre será a primeira)
    </script>

     

    No mais se quiser vertical basta editar o CSS


  6. Provavelmente você obteve essa aplicação comprando-a ou fazendo o download.

    Pois bem, a única forma é levar a algum programador (responsável) que irá identificar o que está acontecendo porque como disse sem os arquivos em mãos é impossível de saber o que está de errado.

    Se você comprou no mínimo é exigir do fornecedor a correção do problema.


  7. Eu nunca fiz isso, mas de uma coisa é certa.

    Se você que somente a contagem se foi publicado o compartilhamento como no facebook por exemplo, você teria que obter algum retorno da plataforma, e de fato não sei se o facebook fornece esse tipo de serviço.

     

    Então aqui eu vou supor que clicou em compartilhar já registro que foi compartilhado.

    Podemos usar a tabela catalogo para verificar se o usuário já fez esse compartilhamento, desde que adicionemos mais uma coluna para isso, e é até prático pois podemos até saber o que cada usuário compartilhou.

     

    A ideia que pensei é executar um ajax em um arquivo, esse arquivo verifica se o usuário já compartilhou, caso não ele registra que foi compartilhado, então acionamos um script que irá abrir uma nova aba e redirecionar para.

    Obs.: Usei meu script para executar ajax: https://github.com/Spell-Master/sm-web/tree/master/javascript/AjaxRequest

     

    <a
        data-site="<?= ConfigPainel('site_url') ?>"
        data-slug="<?= $dados['slug'] ?>"
        class="compartilhar"
        >
        Shared Facebook
    </a>
    
    <div id="compartilhamento"></div> <!-- Usando esse elemento para gerenciar conteúdo -->
    
    <script>
        document.querySelectorAll('.compartilhar').forEach(definirEvento);
    
        function definirEvento(e) {
            e.addEventListener('click', compartilharLink, false);
        }
    
        function compartilharLink(e) {
            var link = e.target;
            compartilharLink.prototype = new AjaxRequest();
            compartilharLink.prototype.open('compartilhamento', 'arquivo.php?site=' + link.dataset.site + '&slug=' + link.dataset.slug);
        }
    </script>

    Simples, temos o link de compartilhamento, mas quando clicado aciona a função que obtem os dados de compartilhamento dos atributos "data", assim sendo carregando um arquivo e enviado esses valores por GET.

     

    Então no arquivos que carrega:

    <?php
    $usuario = "?????";
    $query = "SELECT item, id_user FROM catalogo WHERE item='{$_GET['slug']}' AND id_user='{$usuario}'";
    
    // <<<< execute então a query
    
    if (!$resultado_do_banco) {
        /* Não tem o registro do usuário junto ao registro de compartilhamento
         * Assim sendo aqui registramos que o compartilhamento disso
         * E fazemos o updade conforme você está fazendo
         */
        ?>
        <script>
            window.open('http://www.facebook.com/sharer.php?u=<?= $_GET['site'] ?>catalogo/<?= $_GET['slug']; ?>', '_blank');
        </script>
        <?php
    }

    Na suposta nova coluna "item" armazeno o valor slug, então comparando o id do usuário mais isso podemos saber se ele já compartilhou determinada coisa.


  8. Também não consegui só com css acho que não dar mesmo.

    Que seja JS então:

    <table width="200" border="1">
        <tr>
            <td>&nbsp;</td>
            <td><input class="marcar" type="checkbox" /></td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td><input class="marcar" type="checkbox" /></td>
        </tr>
    </table>
    
    <script>
        var item = document.querySelectorAll('.marcar');
        item.forEach(evento);
    
        function evento(e) {
            e.addEventListener('change', colocarCor, false);
        }
    
        function colocarCor(e) {
            var cor = 'red';
            var definirCor = e.target.parentNode.parentNode;
            // parentNode [1] <td>
            // parentNode [2] <tr>
            if (e.target.checked) {
                definirCor.setAttribute('style', 'background-color:' + cor);
            } else {
                definirCor.removeAttribute('style');
            }
        }
    </script>

     


  9. Certo, certo.... Está usando win8/8.1 ou 10, enfim a causa pode vim da porcaria do windows defender, mas descarto isso, pelo fato de um arquivo que não interage com o que estava acessando funcionar.

    Acredito que o problema esteja no diretório "sistema" que está acessando, pode uma condição do PHP ou uma reescrita de um htaccess.

    Por não saber o que tem nesse diretório e por desconhecer sua source não tenho e ninguém terá como lhe ajudar.

    Vá até esse diretório analise arquivos como index, home ou default (.php/.html/.hta/.htaml) se existir um .htaccess analise-o também porque em algum desses arquivos está fazendo é não renderizar um html para o usuário.

    Pode também ser um erro fatal do php e a demonstração desses erros estão desabilitados em algum arquivo como os que mencionei.


  10. Fez o arquivo que falei e colocou o que disse nele?

    Se sim ficou todo em branco?

    Veja o console do browser se há algum warning ou error apresentado.

     

    Qual é SO que está usando?


  11. Faz um teste aí....

    Vá até a pasta htdocs pegue todos os arquivos e tire-os de lá. (Você pode até apagar se quiser.....)

    Então nessa mesma pasta crie um arquivo qualquer desde que seja um .PHP.

    Nesse arquivo escreva:

    Citar

    <?php phpinfo(); ?>

     

    Abra seu browser e acesse 127.0.0.1/nome_do_arquivo_que_criou.php

     

    Veja se funciona...

    Funcionou? Cache do seu browser está ainda pegando os heades de index.php dos arquivos da documentação.

    Não funcionou? 99% de certeza que o Apache não está funcionando.


  12. Tipo isso?

    <?php
    function formatStr($string) {
        $match = [];
        $match['a'] = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜüÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿRr"!@#$%&*()_+={[}]/?;:.,\\\'<>°ºª`';
        $match['b'] = 'aaaaaaaceeeeiiiidnoooooouuuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr                                 ';
        $decode = strtr(utf8_decode($string), utf8_decode($match['a']), $match['b']);
        $stroke = preg_replace('/[ -]+/', '-', $decode);
        $leftStroke = ltrim($stroke, '-');
        $rightStroke = rtrim($leftStroke, '-');
        return (utf8_encode($rightStroke));
    }
    
    function createCode($len = null) {
        $lengths = (isset($len) ? (int) $len : 10);
        $chars = '0123456789aAbBcCdDeEfFgGhHiIjJkKlLm0123456789MnNoOpPqQrRsStTuUvVxXyYwWzZ0123456789';
        $code = "";
        $arr = str_split($chars);
        for ($i = 0; $i < $lengths; $i++) {
            $code .= $arr[array_rand($arr)];
        }
        return ($code);
    }
    
    $nome = "João Maria José";
    $resultado = mb_strtolower(formatStr($nome)) . '-' . createCode(20);

     


  13. Vai transportar dados para o update?

    Qual a linguagem back-end?

    Essas são coisas que você deveria informar.

     

    O problema do ajax nessa situação é que dependendo do vai requisitar/atualizar * a quantidade de pessoas acessando  pode deixar seu servidor lento. Em casos extremos até a queda ou travamento do mesmo.

    por isso o ideal é usar uma linguagem javascript serve-side no caso NodeJS para manipular WebSocket. Mais informações em:

    https://developer.mozilla.org/pt-BR/docs/WebSockets/Writing_WebSocket_servers

     

    No entanto se sua aplicação não terá uma gama enorme de centenas acessos simultâneos e não irá executar muitas consultas e updades simultâneos a cada atualização. Você pode sim usar ajax a cada X segundos, usando-se por detectar a atividade do(s) usuário(s) na página.

    O que isso quer dizer?

    - Quer dizer que faremos uma aquisição de arquivos ao qual fará o updade a cada intervalo de tempo, mas só quando o usuário estiver visualizando o documento, caso ele minimize o browser, esteja em outra aba; esse processo de aquisição de arquivo automatizado é interrompido, e iniciado caso o usuário retorne.

     

    Então vamos ao caso do ajax (obs.: Usarei esse script que desenvolvi por ser bem pático para fim de requisições)

    Arquivos necessários:

    https://github.com/Spell-Master/sm-web/tree/master/javascript/AjaxRequest

    Exemplo:

    Spoiler

     

    
    <!-- Nesse lugar será carregado o arquivo por via GET que fará o update -->
    <div id="executar_arqui"></div>
    
    <script>
        var intervalo = 0;
    
        /* Fazer com que o carregamento automático só funcione caso a pessoa esteja visualizando o documento */
        document.addEventListener('visibilitychange', visibilidade, false);
        function visibilidade() {
            if (document.hidden) {
                parar();
            } else {
                iniciar();
            }
        };
        /* --- */
    
    
        /* Define que a cada X segundos a função de carregar deve ser executada */
        function iniciar(alguma_infomacao) {
            window.intervalo = setInterval(function () {
                carregar((alguma_infomacao ? alguma_infomacao : false));
            }, 10000); // A cada 10 Segundos
        };
    
        /* Para a contagem de tempo pararando as requisições */
        function parar() {
            clearInterval(window.intervalo);
        };
    
        /* Carrega o arquivo que fará o update */
        function carregar(recebe_isso) {
            carregar.prototype = new AjaxRequest();
            carregar.prototype.open('executar_arqui', 'diretorio/arquivos.php' + (recebe_isso ? '?alguma_coisa=' + recebe_isso : null));
        };
    </script>

     

     


  14. @Alberto Nascimento uma session nada mais que é um ARRAY global portanto você deletar como deleta qualquer outro array no php.

    unset($_SESSION); // Simples assim

     

    Porque se isso aqui não surtiu efeito acredito que seu problema é o buffer do cabeçalho.

    2 horas atrás, Sapinn disse:
    
    <?php
    session_start();
    session_unset();
    session_destroy();
    header("location:../index.html");
    ?>

     

     

     

    Experimente essa minha classe para gerenciar sessões:

    Session.php

    Spoiler
    
    <?php
    /**
     * ********************************************
     * * @class Session
     * * @copyright (c) Spell master
     * * @version 2.0
     * * @see Classe para gerenciamento de cessões
     * ********************************************
     * @usage
     * * Iniciar cessão
     * $session = Session::startSession();
     * Inicia as cessões, caso já iniciadas
     * retorna as mesmas não iniciando novamente.
     * 
     * * Definir uma cessão
     * $session->Word = "Olá";
     * 
     * * Verificar as cessões estão ativas
     * Session::getSession();
     * 
     * * Remover todas cessões
     * Session::destroy();
     * 
     * * Remover a cessão expecífica
     * unset($session->Word);
     * 
     * ********************************************
     * * Para evitar roubo de cessões defina
     * um nome prefixo para suas cessões exemplo:
     * $session = Session::startSession('nome');
     * $session->Word = 'Olá';
     * var_dump($_SESSION);
     * - Resultado:
     * array(1) { ["Word_nome"]=> string(3) "Olá" }
     * ********************************************
     */
    
    class Session {
    
        private static $status;
        private static $globalName;
        private static $session;
    
        /**
         * ****************************************
         * Gerencia entradas para cessões.
         * ****************************************
         * @Param {STR} $prefix
         * Se definido o prefixo todas as cessões
         * terão esse prefixo alocado.
         * ****************************************
         */
        public static function startSession($prefix = null) {
            self::$globalName = (empty($prefix) ? null : '_' . $prefix);
            if (!self::$status) {
                self::$session = new self;
            }
            self::$status = session_start();
            return (self::$session);
        }
    
        /**
         * ****************************************
         * Verifica se existem cessões iniciadas
         * ****************************************
         */
        public static function getSession() {
            return (self::$status);
        }
    
        /**
         * ****************************************
         * Elimina todas cessões iniciadas
         * ****************************************
         */
        public static function destroy() {
            self::$session = session_destroy();
            unset($_SESSION);
        }
    
        /**
         * ****************************************
         * Métodos de auxilio a classe.
         * Automatiza eventos...
         * ****************************************
         */
        public function __set($name, $value) {
            $_SESSION[$name . self::$globalName] = $value;
        }
    
        public function __get($name) {
            if (isset($_SESSION[$name . self::$globalName])) {
                return ($_SESSION[$name . self::$globalName]);
            }
        }
    
        public function __isset($name) {
            return (isset($_SESSION[$name . self::$globalName]));
        }
    
        public function __unset($name) {
            unset($_SESSION[$name . self::$globalName]);
        }
    
    }

     

     

     

    Muito simples de usar. Vou demostrar o exemplo com três arquivos

    Arquivo 1. Onde criamos a cessão

    Citar
    
    <?php
    require_once ('Session.php');
    $session = Session::startSession();
    $session->dizer = "Olá";
    
    var_dump($_SESSION); // array(1) { ["dizer"]=> string(4) "Olá" }
    
    if (isset($session->dizer)) {
        echo '<p>Existe a $_SESSION[\'dizer\']</p>';
    }

     

     

    Arquivo 2. Onde destruímos a cessão:

    <?php
    require_once ('Session.php');
    $session = Session::startSession();
    var_dump($_SESSION); // array(1) { ["dizer"]=> string(4) "Olá" }
    
    if (isset($session->dizer)) {
        echo '<p>Existe a $_SESSION[\'dizer\'] e vamos destruír</p>';
        Session::destroy(); // <<<<< Destroi todas cessões iniciadas!
    }

     

    Arquivo 3. Onde verificamos quais sessões existem:

    <?php
    require_once ('Session.php');
    $session = Session::startSession();
    var_dump($_SESSION);
    
    
    if (isset($session->dizer)) {
        echo '<p>Existe a $_SESSION[\'dizer\']</p>';
    } else {
        echo '<p>Não existe a $_SESSION[\'dizer\']</p>';
    }

     

    Bom, se você acessar o (arquivo 1) pelo browser verá que a sessão é criada, então acessar o (arquivo 3) vemos que essa cessão que criamos no arquivo 1 existe.

    Porém se acessar o (arquivo 2) a sessão vai deixar de existir, então se irmos até o arquivo 3 vemos que não existe mais a cessão.

     

    No mais leia a documentação da classe pois exitem mais recursos disponíveis


  15. ??? Deveria está fazendo o calculo?

     

    Tentou verificar o que são:

    $qtC

    e

    $vatual

     

    Faça um var_dump dessas variáveis e veja se seus valores são dados que podem ser calculados, pois acredito que possa ser essa a razão de não fazer o calculo.

    Se mesmo assim forem strings numérias converta-as em INTEGER antes do calculo.


  16. Não entendi direito mas veja se é isso:

     

    SELECT * FROM boletos WHERE proc = 0 AND (idOrganizador !='0' AND idPiloto !='0');

     

    Instrução da query:

    Citar

    Selecione tudo em boletos

    Onde proc tem que ser '0'

    E na mesma linha idOrganizador não pode ser '0' e também idPiloto não pode ser '0'

    Obs.: idOrganizador & idPiloto forem do tipo (int) você também pode instruir dessa forma >'0'


  17. De fato, tudo se  normalizou hoje devido a backup's da hospedagem, mas a treta continua e mesmo agora insiste que tem que ser ressarcido pelo estresse e problema passado.

    Eu disse ao meu parsa que fique tranquilo a culpa de fato não foi dele, pois ele me passou os arquivos, revisei e vi que realmente o problema não foi causado pelo programador.

     

    Mas será um briga de "Davi VS Golias" pois é uma franquia de varejo presente em quase todos estados brasileiros enquanto ele só um programador autônomo que passa praticamente 20 horas por dia na frente do PC para sustentar a família.

     

    De fato não sei o que querem tirar dele, porque o que essa empresa ganha em um dia ele nem chega perto de ganhar em um/dois/três meses. E acho que qualquer judiciário que for analisar o caso terá esse mesmo entendimento meu.


  18. 2 horas atrás, Alberto Nascimento disse:

    Existe algum código que faça redimensionar as imagens?

     

    Ter, não tem. Mas tem como recriar outra com o tamanho específico usando a função imagecopyresampled

    Porém acho que complicar com algo simples como o seu não é o caso.

    //Ao invés de fazer
    echo "".$rows_cursos['novonome']."<br>";
    
    //Faça
    echo "<pre>";
    var_dump($rows_cursos['novonome']); // Precisamos saber como essa string é

    E poste o que aparece na tela

     


  19. Boas, desculpa aí mas nem sei onde postar algo como isso...

    A poucos minutos antes dessa postagem um amigo meu me liga dizendo que se enfiou numa encrenca devido a um sistema que ele desenvolveu.

    Todos nós sabemos que nunca se deve modificar arquivos no servidor por FTP enquanto a aplicação está sendo usada.

    Porém nesse mesmo sistema que ele criou, existe uma página para o administrador alterar configurações da aplicação tais como senhas, comportamento, acessos dentre outras configurações.

    Nada mais que pegar o valor de inputs usar a função fwrite e re-escrever o arquivo que guarda essas informações com as novas.

    Acontece que durante a manhã o dono do website fez modificações nas configurações e ao salvar por algum bug do PHP a função fwrite  simplesmente escreveu o arquivo de modo errôneo o que expôs em texto toda a configuração do website incluindo login e senha de acesso ao banco de dados.

    E assim permaneceu por quase 24h até que o dono da aplicação conseguiu contactar esse meu amigo que desenvolveu e fez a restauração do arquivo manualmente, porém já era tarde demais, alguém acessou o servidor e apagou tudo.

     

    A questão complica mais que durante a madrugada ele me liga desesperado pois seu cliente ao qual ele desenvolveu a aplicação falou que vai processar-lo por causa dos danos, uma vez que todos dados de estoque, débitos e créditos foram perdidos, pois o infeliz parece que nunca ouviu falar em backup.

    Segundo o dono que comprou o website desse meu amigo, o prejuízo pode ultrapassar os 1.5 milhões.

    Mas é um caso isolado pois o website já estava a quase 2 anos online e tempos em tempos as configurações eram alteradas e nada de anormal aconteceu, por isso acredito que foi algum tipo de bug.

    Acontece que eu também faço isso a anos em websites que desenvolvo e nunca recebi qualquer tipo de reclamação sobre algum erro nem que seja similar.

     

    E se fossem você o que faria nessa situação complicada?


  20. Hun... Nesse caso basta fazer a substituição, listando todos os caracteres em um array e usar a função str_replace para substituí-los por nada.

    Exemplo:

    <?php
    $stringInicial = " > 'João' e 'maria' < foram no \"mercado\" comprar = `pão`";
    var_dump($stringInicial);
    
    $invalidos = [ // Array com todos tipos de caracteres que queira remover da string;
        '"',
        "'",
        '`',
        '=',
        '-',
        '<',
        '>'
    ];
    
    $stringLimpa = str_replace($invalidos, null, $stringInicial); // Fazendo a substituição por um valor nulo
    
    echo ("<hr />");
    var_dump($stringLimpa);

    Lógico que isso irá remover quaisquer caracteres que estejam no array, porém temos nesse termo espaços duplicados como "o asterisco representa um espaço"

    Antes: *>*'João'

    Depois:  **João

    Então basta fazer o tratamento desse termo.

     

    Porém se for mesmo questão de usar uma expressão basta usar o regex aceitando acentuações:

    <?php
    $stringInicial = " > 'João' e 'maria' < foram no \"mercado\" comprar `pão`";
    var_dump($stringInicial);
    
    echo ("<hr />");
    $stringLimpa = preg_replace('/[^[:alnum:] a-zÀ-ú]/', '', $stringInicial);
    var_dump($stringLimpa);

     


  21. Sorry... É que quando coloco um código aqui no forum apenas o escrevo aqui, dificilmente testo antes.

    Mas, enfim, podemos então verificar se o valor digitado no input é um número válido toda a vez que waapTel1 é clicado.

    Sim o evento vai existir sempre, porém a função só é acionada caso o que está no input seja um número de telefone válido. (Obs.: Usei como referência dados da ANATEL)

    Assim aceitando como válido os seguintes tipos de números de telefone:

    • +55(99)99999-9999
    • +559999999-9999
    • +5599999999999
    • 9999999-9999
    • 99999999999
    • 9999-9999
    • 99999999

    Desta vez testei e está funcionando bem como esperado aqui, dar um olhada:

    Spoiler
    
    <input type="text" name="telefone" id="telefone" />
    <button id="waapTel1">waapTel1</button>
    
    <script>
        var telefone = document.getElementById('telefone');
        telefone.value = null; // Apaga qualquer valor no input vindo de cache ou atualização da página
    
        document.getElementById('waapTel1').addEventListener('click', function (e) {
            if (numeroValido()) {
                // openWhatsApp(b, apelido); // Requisitando a função pois o número do input é válido
                console.log('Requisitando a função'); // Só por depuração mesmo
            } 
            else { // Só por depuração mesmo
                console.log('O numero não é válido'); // Só por depuração mesmo
            } // Só por depuração mesmo
        }, false);
    
        function numeroValido() {
            var numero = ((window.telefone).value); // "numero" getID do input onde é digitado o numero
            if (numero.length && numero.match(/\s/g)) {
                return false;
            } else if (numero.length && !numero.match(/^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)?(?:((?:9\d|[2-9])\d{3})\-?(\d{4}))$/)) {
                return false;
            } else {
                return true;
            }
        }
    </script>

     

     

    O problema é que não consegui uma forma de validar se é realmente um número de telefone móvel ou fixo sem conflitar.... :confused:

     

    Tomei a liberdade de criar uma máscara ao input fazendo com que o usuário só possa digitar um número de telefone de forma correta (mas para o funcionamento tive de alterar a função):

    Spoiler
    
    <input 
        type="text"
        id="telefone"
        maxlength="15"
        placeholder="Forneça o telefone"
        onkeypress="mask(this, mtel)" onblur="clearTimeout()"
        required
        />
    
    <button id="waapTel1">waapTel1</button>
    
    <script>
        var telefone = document.getElementById('telefone'),
                vObj,
                vFun;
        telefone.value = null; // Apaga qualquer valor no input vindo de cache ou atualização da página
    
        document.getElementById('waapTel1').addEventListener('click', function (e) {
            if (numeroValido()) {
                // openWhatsApp(b, apelido); // Requisitando a função pois o número do input é válido
                console.log('Requisitando a função'); // Só por depuração mesmo
            }
        }, false);
    
        function numeroValido() {
            var numero = ((window.telefone).value); // "numero" getID do input onde é digitado o numero
            /*
             * Descartamos isso
             * if (numero.length && numero.match(/\s/g)) {
             *     return false;
             * } else
             * if (numero.length && !numero.match(/^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)?(?:((?:9\d|[2-9])\d{3})\-?(\d{4}))$/)) {
             *     return false;
             * } else {
             *     return true;
             * }
             */
    
            var exp = /^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)?(?:((?:9\d|[2-9])\d{3})\-?(\d{4}))$/;
            if (numero.length) {
                return (numero.match(exp) ? true : false);
            } else {
                return false;
            }
        }
    
        function mask(o, f) {
            window.vObj = o;
            window.vFun = f;
            setTimeout(function () {
                window.vObj.value = window.vFun(window.vObj.value);
            }, 1);
        }
    
        function mtel(v) {
            var valor = v.replace(/\D/g, '')
                         .replace(/^(\d{2})(\d)/g, '($1) $2')
                         .replace(/(\d)(\d{4})$/, '$1-$2');
            return valor;
        }
    </script>

     

     

    Em ambos eu testei e está funcional aqui, também de nada adianta isso sem uma verificação do lado do servidor

×

Important Information

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