Ir para conteúdo

Omar~

Members
  • Total de itens

    1325
  • Registro em

  • Última visita

  • Dias vencidos

    15

Posts postados por Omar~


  1. Você terá que abrir o PDF em uma tag iframe, mas mesmo assim se o browser não for capaz de ler a opção de download será acionada. No entanto qualquer browser atual já vem com suporte a pdf nativo.

    Também é possível carregar e mostrar PDF usando a API nativa XMLHttpRequest. 


  2. Tente então algo como isso:

    O input está alí mas o editor não, ao digitar no input pelo menos 2 caracteres mostramos o local e o editor é inciado.

    Não sei se essa é a lógica, mas toda vez que alterar algo no input o conteúdo do editor é alterado

    <input type="text" id="exemplo" value="" />
    <div style="display: none">
        <textarea id="editor"></textarea>
    </div>
    <script>
        var exemplo = document.getElementById('exemplo');
        exemplo.value = null;
        exemplo.addEventListener('keypress', iniciarEditor, false);
    
        function iniciarEditor(e) {
            var proximoElemento = e.target.nextElementSibling,
                editor = proximoElemento.children[0].id;
            if (typeof CKEDITOR.instances[editor] === 'undefined') {
                proximoElemento.removeAttribute('style');
                CKEDITOR.replace(editor);
            }
            CKEDITOR.instances[editor].setData(
                e.target.value
            );
        }
    </script>

     


  3. Primeiramente o "ckEditor 4" é o mesmo usando por esse fórum.

    Enfim, basta que que você crie um elemento qualquer (assim como é usado por esse fórum) assim quando clicar nesse elemento o editor é iniciado.

    Aí temos as opções de ter já uma textarea pronta para receber o editor, ou criar uma (no caso desse fórum a textarea já existe); independente qual for a iniciativa o elemento ao qual o editor vai iniciar deve ser mostrado pois vai ser uma iFrame.

     

    CKEDITOR.replace('iD_DA_TEXTAREA');

     

    Aí vai depender da lógica que vai seguir para ter uma noção melhor de como deve prosseguir...

    No resto há uma infinidade de documentação espalhada na web sobre como usar essa ferramenta; confesso que nenhuma delas é de muita ajuda, a não ser confundir mais em vez de ir direto a situação real

     

    10 horas atrás, Jack Oliveira disse:

    quando digitar em um campo textarea aparecer em outro textarea com  ckeditor.

    Exemplo você pode criar um elemento editável assim que uma key code é inserida pós clique o elemento alvo o editor seja iniciado..... seguindo os conceitos (ou mostra ou cria)

     

    Veja como eu realizei esse processo ao usuário clicar.....:

    https://github.com/Spell-Master/source-map/blob/master/modules/forum/post-new.php#L7

    https://github.com/Spell-Master/source-map/blob/master/lib/javascript/sm-forum.js#L330 > a linha 335

    https://github.com/Spell-Master/source-map/blob/master/lib/javascript/sm-editor.js#L28

     

    obs.: Isso é o "rascunho" de um projeto meu portanto posso remover ou modicar tudo no github (serve para leitores futuros desse post)

     

     


  4. Tente algo como isso:

    <?php
    $array = [
        0 => ['produto' => 'bala', 'valor' => '10,00'],
        1 => ['produto' => 'doce', 'valor' => '30,00'],
        2 => ['produto' => 'laranja', 'valor' => '14,00'],
        3 => ['produto' => 'banana', 'valor' => '16,00']
    ];
    
    foreach($array as $chave => $indice){
        echo ("<p>Nome do produto: {$indice['produto']} / valor: {$indice['valor']} / chave no array: {$chave}</p>");
    }

     

    Se não for isso é porque interpretei/adivinhei errado qual é sua dúvida.....


  5. Não entendi com o contexto geral qual é a dúvida.

     

    Mas especulando talvez isso seria o substituto para o problema: https://ckeditor.com/ckeditor-5/download/

    Ou talvez esse que é o mesmo usado pelo IPS (o mesmo desse fórum pois é um  IPS): https://ckeditor.com/ckeditor-4/download/

     

    OBS.: Existem outros editores WYSIWYG, mas o melhor que o ckeditor é completamente in dependente ao jQuery (o mais letal veneno uma vez inventado para uma aplicação e o mais nocivo veneno da internet atualmente)


  6. Assim como o colega já mencionou png ou jpg tanto faz qualquer navegador vai carregar independentemente, pois isso se trata de front e não interfere em nada no servidor exceto no tamanho do armazenamento.

    Acontece que imagens PNG são mais pesadas para carregar portanto desaconselhável usar quando não for necessário.

     

    18 horas atrás, Jack Oliveira disse:

    Recomendado da imagem for

    600px x 300px

     

    Mais como disse sem que perca a qualidade

    É possível mas meio complicado pois requer uso de algumas funções do PHP

    • imagecreatefromjpeg ou imagecreatefrompng
    • imagesximagesy
    • imagecreatetruecolor
    • imagealphablending
    • imagesavealpha
    • imagecopyresampled
    • imagejpeg ou imagepng

    Combinando essas funções podemos recriar a imagem conforme desejamos convertendo-a para outro formato ou redimensionando.

     

    Por exemplo essa classe para upload de imagens

    https://github.com/Spell-Master/source-map/blob/master/system/class/model/ImageUpload.php

    Ela utiliza todas as funções acima, assim possui a possibilidade de definir uma altura ou largura máxima para imagem pois se é maior ela a redimensiona.

     

    $upload = new ImageUpload('diretorio_onde_salvar');

    $upload->sendImage($_FILES['name_do_input'], 'nome da imagem', 600);

    Por exemplo se a imagem tiver a altura maior que 600 a classe redimensiona a altura e em proporção igual sua largura para manter o aspecto original, o mesmo vale se a largura for maior que 600.


  7. Em 16/05/2022 at 15:15, Jack Oliveira disse:

    Mais deixa pergunta como consigo passar as paginas por exemplo 

    Sobre | Plano | Blog | Contato

    Sim $url[0] é a cidade e $url[1] será uma dessas opções. basta apenas programar o arquivo que será carregado por $url[0] para trabalhar com a informação correta conforme for o valor de $url[1]


  8. O problema é relativamente simples, pois é um padrão de arquitetura que uso a anos, então poderíamos simplificar as coisas.

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url=$1

    Pós produção se for conveniente você poderá remover as entradas RewriteCond, porque com isso alguém pode acessar acessar meusite.com/diretorio/arquivo.php.

     

    Enfim qualquer caractere inserido pós a primeira barra depois do endereço será uma entrada "url" armazenada na super global INPUT_GET e seu valor será uma string.

    Então simplificando sua situação vamos separar cada qual.

    <?php
    function ObterURL () {
        $filtro = filter_input(INPUT_GET, 'url', FILTER_DEFAULT);
        $definir = empty($filtro) ? 'inicio' : $filtro;
        $explode = explode('/', $definir);
        $array = array_filter($explode);
        return ($array);
    }

    Perceba que a função irá retornar pelo menos um índice "inicio" mesmo que INPUT_GET['url'] esteja vazio ou nulo

    Então no index.php começamos o processo:

    <?php
    require('ObterURL.php')
    $url = ObterURL();
    /*
    // site.com/a/b/c será $url['a', 'b', 'c']
    echo ($url[0] . '<br />');
    var_dump($url);
    */

    Até agora tudo bem seguimos seu conceito apenas simplificando. E é agora que começamos a estrutura da coisa toda e é nesse momento que acho que você está se perdendo.

     

    Como valor $url[0] carrego os arquivos que vão dar seguimento ao que quero aderir.

    Por exemplo o padrão "inicio" é porque ninguém acessou nada, se for "sao-paulo" carrego tudo referente a isso e por aí vai.

    Podemos etão criar uma função para anexar os arquivos conforme o valor de url[0]

    <?php
    function CarregarArquivo($valor) {
        switch ($valor) {
            case 'inicio': $arquivo = 'inicio'; break;
            case 'vitoria':
            case 'rio-de-janeiro':
            case 'sao-paulo':
            case 'salvador':
            case 'distrito-federal':
                $arquivo = 'cidades';
            break;
            case 'catalogo': $arquivo = 'catalogo'; break;
            case 'buscar': $arquivo = 'pesquisa'; break;
            case 'contato': $arquivo = 'contato'; break;
            default: $arquivo = false; break;
        }
        if ($arquivo) {
            return ('paginas' . DIRECTORY_SEPARATOR . $arquivo . '.php');
        } else {
            return ('paginas' . DIRECTORY_SEPARATOR . '404.php');
        }
    }

    Adicionamos no index.php um require para o arquivo que contém a função e pedimos para incluir o arquivo conforma a string que essa função retornar.

    include (CarregarArquivo($url[0]));

     

    Então dessa forma conseguimos carregar os arquivos que vão fazer o que tem de fazer isoladamente sem nenhuma complicação. E se precisamos de mais alguma coisa é só consutar os valores de $url

    Exemplo:

    site.com/contado/outra_coisa

    $url[0] é contado e $url[1] é outra_coisa

     

     

     

    Por fim a nosso htaccess anula quaisquer demais entradas GET pois ele diz que só existe uma entrada a "url" então podemos  contornar isso buscando essa informação do servidor ao invés da aplicação em sí.

    <?php
    
    function EntradaNoServidor() { // Função meramente para exemplificar
        $filtro = filter_input_array(INPUT_SERVER, FILTER_DEFAULT);
        $retorno = isset($filtro) ? $filtro : false;
        return ($retorno);
    }
    
    $uri = EntradaNoServidor();
    $chave = explode('?chave=', $uri['REQUEST_URI']);
    
    if (isset($chave[1])) {
        echo (
            'Existe ?chave=' . $chave[1]
            . ' então podemos usar essa informação'
            . (empty($chave[1]) ? ' mas ela está vazia' : null)
        );
    } else {
        echo ('Não existe uma entrada GET nesse arquivo');
    }

     

    Lógico que dependendo da forma da estrutura de diretórios e arquivos seus as funções ou mesmo os arquivos devem ser adaptados para a lógica aqui apresentada.

     

    Se for o caso coloquei no g.drive o exemplo funcional disso que apresentei.

    https://drive.google.com/file/d/1O-jq3luqLybShUtltbIjgKdGSrTVd1zc/view?usp=sharing

     


  9. Eu mudaria a navegação para se realizada só com ajax, porém o probela a barra de url persiste.

    Bom você pode está usando esse meu script para realizar a navegação por ajax que esse problema é sanado:

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

     

    De qualquer forma se for o caso de usar frame pode optar por manipular a barra de navegação:

    https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState

    https://developer.mozilla.org/en-US/docs/Web/API/History/pushState


  10. Tem sim e não tem....

    Depende de como é realizado esse processo de "bater foto"

     

    Veja que nesse javascript que criei para realizar ajuste de corte de imagem, precisamente nessa linha:

    https://github.com/Spell-Master/sm-web/blob/master/javascript/ImageCut/ImageCut.js#L416

    Pego o canvas criado que é em uma imagem PNG da imagem alvo, ao qual será o código base64 e esse código 64 pode ser usado para recriar a imagem no servidor enviando-o.

    Porque aí que está a questão quando seleciona o corte a imagem deve ser somente a área de corte, portanto a mesma técnica pode ser usada em sua situação "obter o base64 da sua foto que foi batida"

     

    Porém fico-lhe devendo como fazer isso em asp....


  11. //extract($_POST);
    //extract($_COOKIE);
    require_once("../config.php");
    
    //$senha_ = $_POST["senha_"];
    //$senha_ = strip_tags($senha_);
    //$senha_ = md5($senha_);
    
    //$login_ = $_POST["login_"];
    //$login_ = strip_tags($login_);
    
    $senha = (isset($_POST['senha_']) ? $_POST['senha_'] : false);
    $login = (isset($_POST['login_']) ? $_POST['login_'] : false);
    
    if (!$senha) {
      // Não existe o índice senha_ na super global $_POST
    } else if (empty($senha)) {
      // $senha não possui valor algum para manipular
    } else if (!$login) {
      // Não existe o índice login_ na super global $_POST
    } else if (empty($login)) {
      // $login não possui valor algum para manipular
    } else {
      $senha_ = password_hash($_POST['senha_'], PASSWORD_DEFAULT);
      $login_ = htmlentities($_POST['login_']);
      
      // Dessa forma você registra o usuário e também pode validar seu login
    }

    Qualquer dado deve ser verificado antes de usar, além do mais o PHP em desencorajando as formas procedurais de códigos a cada tempo que passa.

     

    Para usar a encriptação por password_hash a coluna ao qual vai armazenar esse valor, aconselho ser um varchar com o tamanho de 400 a 500 entradas.

     

    password_hash: Irá criar uma sequência criptográfica portanto nenhum código será usado no banco.

    htmlentities: Irá substituir qualquer tag por entidade html portanto nenhum código será usado no banco.


  12. Você teria que mudar sua lógica de forma que as respostas que estiverem corretas sejam armazenadas.

    Não sei como você está passando as peguntas, nem mesmo como contabiliza os acertos então fica complicado dar uma resposta mais clara.

     

    Se fosse eu faria algo similar a isso:

    <?php
    session_start();
    
    $acertos = (isset($_SESSION['acertos']) ? (int) $_SESSION['acertos'] : 0);
    
    $pergunta = ['a', 'b'];
    
    if ($acertos < 2) {
        $resposta = 'a';
    } else if ($acertos < 4) {
        $resposta = 'b';
        array_push($pergunta, 'c', 'd');
    } else if ($acertos < 6) {
        $resposta = 'f';
        array_push($pergunta, 'c', 'd', 'e', 'f');
    } else {
        $resposta = 'c';
        array_push($pergunta, 'c', 'd', 'e', 'f', 'g', 'h');
    }
    
    if (isset($_POST['exemplo'])) {
        $_SESSION['acertos'] = ($_POST['exemplo'] == $resposta ? ($acertos + 1) : $acertos);
    }
    
    echo ("Você até agora acertou {$acertos} perguntas");
    ?>
    
    <form method="POST" action="">
        <select name="exemplo">
            <option value="">Selecione a Resposta</option>
            <?php foreach ($pergunta as $p) { ?>
                <option value="<?= $p ?>"><?= $p ?></option>
            <?php } ?>
        </select>
        <button type="submit">Enviar Resposta</button>
    </form>

     


  13. <audio id="exemplo">
        <source src="arquivo_de_audio.wav" type="audio/x-wav">
    </audio>
    <script>
        document.getElementById('exemplo').play();
    </script>

    Use um arquivo pequeno, pois ao acessar a página o browser irá fazer o download automaticamente do arquivo, se ele for grande a página vai demorar para carregar, além também que o som vai demorar para tocar.


  14. Bom, eu não mecho com jQuery....

    Então o que posso te ajudar é como diminuir em muito (mas muito mesmo) o uso de memória para realizar as tarefas tão simples e desejadas.

     

    Começando por observações:

    Isso aqui não é um array

    Em 05/02/2022 at 14:16, 4Unknow disse:

    jQuery("#ft")[0]

     

    Para que ficar varrendo o documento toda hora em busca de um elemento, ainda mais com jquery que é extremamente lento para executar a busca? 

    Em 05/02/2022 at 14:16, 4Unknow disse:

    jQuery('#rocketmeluncur').slideUp(500); }else{ jQuery('#rocketmeluncur').slideDown(500);

     

    Isso é sempre inteiro a função para conversão aqui é não está fazendo nada a não ser consumir CPU

    Em 05/02/2022 at 14:16, 4Unknow disse:

    var viewPortHeightrocketmeluncur = parseInt(document.documentElement.clientHeight); var scrollHeightrocketmeluncur = parseInt(document.body.getBoundingClientRect().top);

     

    Um conflito... Seu problema deve ser esse pois isso pode está reescrevendo.

    Em 05/02/2022 at 14:16, 4Unknow disse:

    var scrolltoprocketmeluncur = $('rocketmeluncur');

     

    Além do mais o problema pode ser justamente que os dados em re-escrita etão sobrecarregando a memória.

    Mais ou menos no sentido

    Função diz que o X e outra função diz que Y daí o browser não entende o que é para fazer com a informação, fazendo uma função anular outra.

     

     

    Como disse não mecho com jquery então apresentarei duas maneiras de executar

     

    1 usando apenas HTML (recomendo):

    Spoiler

    Como dito antes rolar ao topo:

    
    <a href="#" alt="">Subir para o topo</a>

    Rolar até algum elemento.

    
    <a href="#exemplo" alt="">Rola a página até div id exemplo</a>
    
    <div id="exemplo">bla bla bla</div>

     

    2 usando javascript (javascript não jquery) 

    Spoiler
    
    <style>
        #botao-topo {
            position: fixed;
            right: 10px;
            bottom: 10px;
    
            opacity: 0;
            pointer-events: none;
            transition: all 2s
        }
        #botao-topo.ativado {
            opacity: 1;
            pointer-events: auto
        }
    </style>
    
    <button onclick="rolarPara('#abaixo-de-tudo')">Decer até o elemento id abaixo-de-tudo</button>
    
    <button id="botao-topo">
        Subir
        Coloque aqui qualquer coisa ou formate com CSS conforme desejar
    </button>
    
    <?php
    echo str_repeat('<p>Lorem ipsum dolor sit amet</p>', 100);
    ?>
    <div id="abaixo-de-tudo">Olá mundo</div>
    
    <script>
        var botaoTopo = document.getElementById('botao-topo');
        botaoTopo.addEventListener('click', rolarPara, false);
        
        mostraBotao();
    </script>

    Então as duas funções uma para mostrar o botão com a rolagem da página e outro para rolar a página para o topo ou para algum elemento...

    
    /*
     * Essa função é responável por mostrar ou ocultar o botão para ir ao topo
     * Note que eu criei a variável botaoTopo fora do escopo da função
     * Isso diminuirá drasticamente do consumo de CPU uma vez que não
     * será mais necessário buscar pelo elemento toda vez que rolar a página
    */
    function mostraBotao() {
        document.addEventListener('scroll', function (e) {
            if (window.scrollY > 30) { // 30 equivale a 0,5 segundo de rolagem
                botaoTopo.classList.add('ativado');
            } else {
                botaoTopo.classList.remove('ativado');
            }
        }, false);
    }
    
    /*
     * Essa função é responsável por rolar a página
     * Se passado como parâmetro alguma string o alvo da rolagem será essa argumento
     * caso contrário será o primeiro elemento na tag <body>
    */
    function rolarPara(alvo) {
        (typeof alvo === 'string' ? document.querySelector(alvo) : document.body.firstChild)
        .scrollIntoView(false);
    }

    No mais você pode está usando o CSS para dar um efeito de ancoragem no documento para criar um rolagem suave.

     


  15. Digamos que eu tenha 2 arquivos chamados exemplo_A.php e exemplo_B.php.

    Dentro do A eu quero incluir o B, mas o B está em outro diretório.

    Então o certo não seria eu indicar um url para buscar esse arquivo, uma vez que a url já é uma variante da aplicação e o php não gosta disso o que geralmente vai dar em erro mesmo.

    Então o correto é só indicar diretórios mesmos e nada de usar url's.

    include ('../outro_diretorio/arquivo_B.php');

    E bingo! funcionou....

    Porém devido a certas reescritas do apache não dar para buscar o arquivo dessa forma, então basta apenas que indique a partir de onde está o arquivo atual usando a contante __DIR__:

    include (__DIR__ . '/../outro_diretorio/arquivo_B.php');


  16.  

    Tenta assim:

    /* Rola a página para o topo */
    function rolarParaTopo () {
        var $tempo = -window.scrollY / (1000 / 50);
        var $intervalo = setInterval(function () {
            if (window.scrollY != 0) {
                window.scrollBy(0, $tempo);
            } else {
                clearInterval($intervalo);
            }
        }, 10);
    }
    
    /*
     * Rola a página para um elemento no HTML, exemplo:
     * Javascript
     * rolarPara(#alguma_coisa);
    */
    function rolarPara(alvo) {
        document.querySelector(alvo).previousElementSibling.scrollIntoView(false);
    };

     

    Você também pode criar um botão para ir ao topo assim:

    <a href="#" alt="">Subir para o topo</a>

     


  17. Muito bom que resolveu.....

     

    4 horas atrás, joao b silva disse:

    Notei uma indiferença ao falar dele.

    Sim.... Entorto o nariz para qualquer coisa que promete entregar algo que não passou por meu controle de qualidade (Que não foi eu mesmo quem fez).


  18. Seguindo a arquitetura:

    • __DIR__ //> No mesmo diretório que está o arquivo que contém a função __autoload
    • DIRECTORY_SEPARATOR //> Separar diretório
    • $dirName // Em qualquer dos diretórios listados em $cDir
    • DIRECTORY_SEPARATOR //> Separar diretório
    • $Class . '.class.php' //> aquivo de classe .class .php

    Então no mesmo local onde está a função deve haver os diretórios 'Conn', 'Helpers', 'Models' e dentro de um deles o arquivo Read.class.php

     

    O arquivo está lá nesse local e dar erro se implementado esses tais pdf e mpdf.

    É quase que certeza que em algum arquivo presente na composição desses aí existe um autoload funcionando que sobrescreve a sua função gerando conflito.

    Se for o caso é só apagar a função conflitante e usar a outra.

    Abra arquivo por arquivo que compõe  pdf e mpdf e remova quaisquer includes e requires de classes que esses arquivo possam conter e use sua função.

     

    A propósito o método mágico __autoload está obsoleto nas últimas versões do PHP você deve usar a função spl_autoload_register agora.

     

    Exemplo de spl_autoload_register:

    Spoiler
    
    <?php
    /**
     * *********************************************************************
     * @function: Função para auto carregamento de classes
     * *********************************************************************
     * @autor: Spell Master
     * @copyright (c) 2014, Spell Master AND Zeed
     * @vesion: 6.0 2021, Spell Master
     * *********************************************************************
     */
    
    spl_autoload_register(function ($Class) {
        $findDir = [
            'database',
            'helper',
            'mailer',
            'model'
        ];
        $includeDir = null;
        foreach ($findDir as $DirName) {
            if (!$includeDir && file_exists(__DIR__ . FindClass($DirName, $Class))
                    && !is_dir(__DIR__ . FindClass($DirName, $Class))) {
                include_once (__DIR__ . FindClass($DirName, $Class));
    
                $includeDir = true;
            }
        }
        if (!$includeDir) {
            die("Erro interno no servidor ao encontrar dados cruciais de funcionamento!");
        }
    });
    
    function FindClass($dir, $class) {
        return (
            DIRECTORY_SEPARATOR
            . '..'
            . DIRECTORY_SEPARATOR . 'class'
            . DIRECTORY_SEPARATOR . $dir
            . DIRECTORY_SEPARATOR . $class . '.php'
        );
    }

     

     


  19. Além do que o Matheus disse, não sei quem instalou o sql na máquina e nem como instalou.

    Nesse caso em uma hospedagem na grande maioria dos casos justamente por medidas de segurança sobre o usuário root pode acontecer as algumas situações:

    • Usuário root existe, mas não tem acesso nem a leitura do banco de dados.
    • Usuário root existe, mas tem senha de acesso ao  do banco de dados.
    • Usuário root não existe.

    De qualquer forma se essa função fazer o que deveria fazer mysqli_errno() alertaria sobre quaisquer eventuais problemas de conexão o que inclui o caso do usuário.

     

    NOTA*

    Spoiler

    Pode não ser o caso, mas ha muito aconteceu comigo (em ambiente local), atualizei a versão do Ubuntu na máquina... Desde então toda vez que tentava conectar ao banco de dados falhava, simplesmente a conexão não funcionava não importando o que eu fizesse.

    Depois de muito pesquisar procurar tentei inumeradas alternativas para fazer a coisa andar. Foi então que descobrir por conta própria que o problema estava no código fonte do sistema operacional.

    Assim sendo formatei a máquina com uma versão mais antiga do SO e tudo se normalizou.

    Como disse pode não ser o caso, mas desde então quando aconteceu comigo fico alerta a anomalias que o SO pode apresentar.

    Não digo para você formatar a máquina aí! Apenas olhar a coisa com cautela e não descartar um pouco provável problema do sistema operacional.

     

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.