Ir para conteúdo

Omar~

Members
  • Total de itens

    1325
  • Registro em

  • Última visita

  • Dias vencidos

    15

Posts postados por Omar~


  1. Isso ocorre quando tenta manipular um elemento inexistente.

    do caso vamos ao questão:

    <div id="detalhesExemplo">detalhes</div>
    
    <button onclick="exemplo('Teste')">Executar</button>
    
    <script>
        function exemplo(id) {
            /*
             * Note que como parâmetros estamos enviando a string "Teste"
             * Logo a consulta no DOM será pelo elemento #ID "detalhesTeste"
             * No entanto o único elemento existente é "detalhesExemplo"
             */
            var A = document.getElementById('detalhes' + id); // O resultado disso será "NULL"
            A.style.display = 'none'; // Segue o erro de manipulação por "A" ser null
        }
    </script>

     


  2. @Maujor

    Não importa cara, o evento change não é acionado por ação externa independente do elemento oculto ou não. Somente se o o próprio elemento em si o dispara.

     

    Que seja consegui resolver minha situação aqui simulando a tag label, pelo fato dela se vincular a outro elemento, usei a mesma lógica que os browsers usam para a tag label.

     


  3. É um evento específico que só funciona em alguns elementos em situações como a que eu definitivamente quero chegar,  no caso uma ação externa. change só detecta se o o evento é disparado pelo próprio elemento em questão e não por ação externa.

     

    Na verdade a questão está sobre a tag <progress> e não no <select>, mas usei um seletor pois assim o script de exemplo ficaria mais simples de demostrar.

    Enfim em todo caso o ValueChange só é disparado no MozillaFirefox


  4. Pois cá estava eu fazendo algumas coisinhas e me deparei com uma questão.

    Que o o javascript não detecta mudanças em elementos não visíveis.

    Para ser mais coeso vamos ao exemplo:

    <select id="teste">
        <option value="a">Opção A</option>
        <option value="b">Opção B</option>
    </select>
    
    <button onclick="mudar()">Alterar</button>
    
    <script>
        var teste = document.getElementById('teste');
        
        teste.addEventListener('ValueChange', function (e) {
            console.log(e.target);
        });
        
        function mudar() {
            teste.value = teste.value === 'a' ? 'b' : 'a';
            console.log('Mudou para:' + teste.value);
        }
    </script>

    Simples né, temos um seletor que contém um evento que detecta quando ele é modificado.

    E uma função que irá modificar o valor do seletor.

    Até aqui tudo bem.... Então ao X do problema.

     

    Adicionamos isso na função que altera o seletor:

    teste.style.display = 'none';

    Logo quando pelo botão alteramos o valor temos no console a exibição do elemento, e ocultando o seletor.

    Uma vez oculto o evento que detecta se seu valor é alterado não mais dispara.

     

    Alguém teria alguma ideia de como contornar isso, fazendo com que o evento sempre dispare ao alterar o seletor (mesmo ele oculto)?

     

     

    Para ser franco, o único jeito que pensei em solucionar é:

    Alterar o opacidade do seletor para 0(zero), assim ele está visível mas transparente, então alterar suas dimensões height e width também para zero, assim não ocupando espaço no documento.

    Porém acho que essa minha solução não é a mais ideal.

     


  5. Em 18/10/2019 at 18:23, Sapinn disse:

    problema é que não fica organizado.

    Isso se rebate na correta utilização de tags e atributos dos elementos.

     

    Em 18/10/2019 at 18:23, Sapinn disse:

    Então eu gostaria de imprimir outra pagina

    O problema é que nesse caso deve-se recriar a página com a formatação desejada.

    A única forma que pensei nesse momento é abrir um novo arquivo e imprimi-lo.

     

    Página inicial:

    <p style="color:red">Lorem ipsum dolor sit amet.</p>
    <button onclick="window.open('arquivo.html');">Imprimir</button>

    Então estamos abrindo uma janela ao qual será carregado o arquivo.html e nele poderemos modificar a estrutura, assim imprimir e fechar em seguida.

     

    arquivo.html:

    <p style="color:blue">Lorem ipsum dolor sit amet.</p>
    <script>
        window.print();
        window.close();
    </script>

     


  6. <style>
        .escondido {display: none}
        .escondido.mostar {display: block}
    </style>
    
    <div>
        <button class="exemplo">Exemplo 1</button>
        <div class="escondido">
            Exemplo 1
        </div>
    </div>
    
    <div>
        <button class="exemplo">Exemplo 2</button>
        <div class="escondido">
            Exemplo 2
        </div>
    </div>
    
    <div>
        <button class="exemplo">Exemplo 3</button>
        <div class="escondido">
            Exemplo 2
        </div>
    </div>
    
    <script>
        var botao = document.getElementsByClassName('exemplo');
        for (var i = 0; i < botao.length; i++) {
            botao[i].addEventListener('click', function () {
                this.nextElementSibling.classList.toggle('mostar');
            }, false);
        }
    </script>

     

    Veja também:

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

     


  7. Olha não vou está analisando seu código, mas vou lhe dar as ferramentas necessárias para o entendimento.

     

    Para executar-mos uma paginação de precisamos usar o LIMIT e o OFFSET em nossa query.

    O "LIMITE" vai determinar quantos resultados vão aparecer.

    O OFFSET vai determinar de qual índice vai mostrar os resultados.

     

    Digamos então que temos a tabela centroautomotivo nela temos 10 registros.

    No genérico nossa query:

    SELECT * FROM centroautomotivo LIMIT 3 OFFSET 1

    Isso quer dize que terei os três(3) resultados a partir do primeiro(1).

     

    Então para que minha paginação funcione eu tenho que sempre aumentar o OFFSET em relação ao LIMIT.

    Assim sendo a próxima consulta deverá ficar:

    SELECT * FROM centroautomotivo LIMIT 3 OFFSET 4

    Ou seja exibindo três resultados mas a partir do quarto índice porque os três primeiros já vimos com a query anterior.

    E por assim adiante.

     

    E como informar esse OFFSET corretamente?

    Através de links, por exemplo:

    <a href="arquivo.php?offset=1">Página 1</a>

    <a href="arquivo.php?offset=4">Página 2</a>

    Então temos a super global $_GET com o índice "offset" que poderemos usar para fazer a consulta.

    Ou seja sempre o OFFSET da query será o que for informado pela url.

     

    O ideal para que uma paginação funcione sem dores de cabeça é fazer uma consulta prévia para somente informar índices com o total de resultados, filtrar e tratar esses get's de entrada para evitar danos ao DB.


  8. Olha, não me preocupo com tais circunstâncias, classes filhas podem acessar atributos ou métodos de suas classes mães por ambas formas desde-que os mesmo não sejam privados.

    Mesmo que $this possa acessar métodos é mais estético usar o parent pois assim você sabe que está acessando método e não um atributo.

    Use o $this somente mesmo para acessar atributos das classes mães.

     

    Uma coisa que você deve saber que o construtor de uma classe vale para qualquer outra classe que é estendida a ela.

    <?php
    class AbstractDB {
    
        protected $retorno;
        public $retornoB;
    
        function __construct() {
            $this->retorno = 'Minha finha herda minha construção';
        }
    
        protected function rB() {
            $this->retornoB = 'Acesso ao atributo';
        }
    }
    
    class Db extends AbstractDB {
    
        public function exemplo() {
            return $this->retorno;
        }
    
        public function acessoB() {
            parent::rB();
        }
    
    }
    
    $obj = new Db();
    
    var_dump($obj->exemplo());
    
    $obj->acessoB();
    var_dump($obj->retornoB);

     


  9. E qual seria a linha 66?

    Seria essa?

    1 hora atrás, Jefferson andre disse:

    <input class="form-check-input" type="radio" name="sexo" id="sexo" value="M" <?php echo ($sexo=="M" ) ? "checked" : null; ?>/> Masculino

     

    Bem, nesse caso crie a variável antes de usar-la.

    <?php
    $sexo = isset($sexo) ? $sexo : false; // Mesmo que a variável original não exista criamos ela falsa mesmo assim ela sempre vai existir

     

    <input type="radio" name="sexo" id="sexo" value="M" <?= ($sexo=="M"  ? "checked" : null) ?> /> Masculino

     

    Dica para usar o fórum....

    Se seu problema é o PHP não poste toda estrutura HTML nem entradas de CSS, isso atrapalha quem quer lhe ajudar.


  10. @Jack Oliveira

    Hun...

    8 horas atrás, Jack Oliveira disse:

    esta função para que na url amigavel não pegar o id

    Eu usaria o modelo assim:

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

    Então tudo que vem na url depois do endereço físico base passa a ser $_GET['entrada']

    Assim sendo o get para isso sao_paulo/12/forum-imasters/123/ é uma string só.

    No entanto como temos que obter cada entrada temos que dividi-la em diferentes coisas.

    <?php
    $filtro = filter_input(INPUT_GET, 'entrada', FILTER_DEFAULT); // Identifica se é realmente uma super global GET
    $requisitado = empty($filtro) ? 'padrao' : $filtro; // Se exite assume o existente, do contrário o get será "padrao"
    $separa = explode('/', $requisitado); // Aqui separamos em índices a partir de todas ocorrências de barras
    $url = array_filter($separa); // Removemos então ídices nulos ou vazios do array

     

    Se dermos então var_dump($url) com a seguinte url "meusite.com/sao_paulo/12/forum-imasters/123/teremos:

    Citar

    array(5) {

        [0]=> string(9) "sao_paulo"

        [1]=> string(2) "12"

        [2]=> string(14) "forum-imasters"

        [3]=> string(3) "123"

    }

     

    Com isso fica simples manipular cada entrada na url, por exemplo se eu quiser remover o 12.

    unset($url[1]);

     

    No entanto como você disse não há necessidade desse 12.

    Então vamos supor que eu escreva o seguinte link, ao acessar-lo irei consultar no banco se os dados do link existe

    <a href="sao_paulo/outra_coisa">Exemplo</a>

     

    Ao redirecionar, quer dizer que url no índice zero é "sao_paulo" então eu uso essa informação $url[0] para fazer a consulta no banco de dados pelo nome da cidade.

    $query = "SELECT * FROM cidades WHERE titulo = '{$url[0]}'";

    O ideal é que sempre manipule a entrada para transformar a string do índice em formato válido para o banco de dados, seja na hora de salvar, seja na hora de ler.

    Veja essa postagem:

    https://forum.imasters.com.br/topic/584706-transformar-uma-frase-em-formato-url/?do=findComment&amp;comment=2283669

     

    Você terá que reestruturar seus databases para no caso usar JOINS, o nome de cada cidade deve está presente em db's que tem dados compartilhados, já que não quer usar o id.

     

    Uma coisa que me chamou atenção foi em uma query apresentada por você temos o seguinte trecho:

    8 horas atrás, Jack Oliveira disse:

    indexar = 'S'

    Hora que nas estruturas de tabelas que você apresentou não existe a coluna indexar.

    Logo temos um erro de query.

     


  11. @Jack Oliveira

    Não entendi de onde vem as url's se são inseridas ou composta no html como links.

     

    Bom.. não sei o que esse "12" faz e qual a utilidade em:

    2 horas atrás, Jack Oliveira disse:

    meusite.com/sao_paulo/12/forum-imasters/123/

     

    No entanto se ele for uma informação necessária você não pode ofuscar.

    Justamente porque irá precisar para fazer alguma coisa. Do contrário você poderá criar funções que filtrem a entrada da url, e remova dados desnecessários, mas se forem desnecessários a arquitetura da aplicação deve ser reavaliada, pois está criando algo não usável.


  12. Primeiramente decodificar um STRING em formato url usamos urlencode

     

    Que no caso a string Alguém viu minha maçã? se transforma em um formato url aceitável sendo 

    Algu%C3%A9m+viu+minha+ma%C3%A7%C3%A3%3F

    <?php
    $texto = urlencode('Alguém viu minha maçã?');
    $textoB = urldecode($texto);
    echo("Texto codificado em url:"
    . "<p>{$texto}</p>"
    . "<hr />"
    . "<p>Texto decodificado da url</p>"
            . "{$textoB}");

     

    Mas como você mesmo disse você precisa de um conversor de texto.

    Eu criei um método em uma classe para justamente fazer o que você espera só não posto o código porque o forum estragaria dados de string da mesma, pois o método em questão remove tudo que não for caractere aceitável. Então você terá que fazer o download:

    https://drive.google.com/file/d/1VHHiotb60BajGBdc9XoGsHONuXTu_Ylt/view?usp=sharing

    <?php
    require_once(__DIR__ . DIRECTORY_SEPARATOR . 'StrClean.php');
    $clear = new StrClean();
    $texto = $clear->formatStr('Alguém viu minha maçã?');
    echo($texto);
    // Resultado:
    // Alguem-viu-minha-maca

     

    Veja também:

    echo(strtolower($texto));
    // Resultado:
    // alguem-viu-minha-maca


  13. Sim... Manipulando o get:

    <?php
    $entrada = (isset($_GET['exemplo']) && !empty($_GET['exemplo']) ? $_GET['exemplo'] : false);
    switch($entrada) {
      case 'idx':
        $arquivo = 'arquivo_qualquer.php';
        break;
      case 'outro_exemplo':
        $arquivo = 'outro_arquivo.php';
        break;
      default:
        $arquivo = 'arquivo_padrao.php';
        break;
    }
    include($arquivo);

    Isso ficaria no index.php, e toda vez que um parâmetro de url exemplo existir ele vai incluir o arquivo de acordo com o valor caso não um arquivo padrão é incluído.

    Então se a url for

    http://localhost?arquivo=idx&id=123

     

    Quer dizer que arquivo_qualquer.php será incluído então o parâmetro id você poderá manipular-lo no arquivo aberto.

     

    Isso é uma questão de rotina quando trabalhamos com url's amigáveis.


  14. 13 horas atrás, Numero 0800 disse:

    A minha duvida é a seguinte ---> Como eu faço para que sempre que eu preencher um formulário o site criar automaticamente uma DIV com as informações que foram ali inseridas?

    Faça leitura via back-end de um local de armazenamento, se existirem dados exiba eles..

     

    13 horas atrás, Numero 0800 disse:

    A minha duvida é a seguinte ---> Como eu faço para que sempre que eu preencher um formulário o site criar automaticamente uma DIV com as informações que foram ali inseridas?

    Isso vai depender do back-end.... No caso esse fórum usa php, mysqli, e sql.

    No caso usar PDO é bem melhor do que mysqli.

     

    Nesse tópico mostrei um basicão e como utilizar PDO:

    https://forum.imasters.com.br/topic/565800-crud-introdução-a-pdo/

     

    Nele mesmo temos um simples exemplo de inserir dados, também ler e ser exitem dados exibir-los.

    No mais você deve se aprofundar nos conceitos pois o guia é voltado para primeiro passo nesses quesitos, e jamais deve ser usados de tal forma em uma aplicação final.


  15. 4 horas atrás, Tommoraes disse:

    Isso mesmo, porém como faço pra programar meu texto?

    Uai segue o mesmo conceito....

     

    <button onclick="escrever('meu texto')"></button>
    <input id="aqui" />
    <!-- 
    caso não seja um input
    <div id="aqui"></div>
    -->
    
    <script>
    function escrever(parametro) {
      if (parametro) {
        document.getElementById('aqui').value = parametro;
        /*
        //caso não seja um input
        document.getElementById('aqui').innerText = parametro;
        */
      }
    }
    </script>

     


  16. 3 horas atrás, Numero 0800 disse:

    Quero que isso seja possível sem a necessidade das pessoas terem que estar logadas no site, acredito então que seria baseado no IP da pessoa

    Isso pode gerar uma quantidade enorme de SPAN....

    Pode usar COOKIES para isso. Não existe forma precisa de regatar o IP, porque depende do servidor de acesso e não necessariamente o IP da máquina.

     

    3 horas atrás, Numero 0800 disse:

    Só sei usar HTML, CSS e JavaScript.

    Aí que está o problema pois é necessário back-end para tal ação.


  17. Certo...

    Reveja a codificação geral do seu projeto (Arquivos e cabeçalhos).

    Os arquivos devem está na codificação UTF-8 sem BOM.

    O charset deve ser UTF-8.

    Reveja a codificação da forma que os dados são criados.

    Exemplo:

    utf8_encode('Olá mundo');

    Se os arquivos e cabeçalhos estiverem corretamente em uft-8 o encode se torna desnecessário.

     

    Outra forma é usar entidades html ao invés de codificação.

    htmlentities('Olá mundo');

     


  18. Para deixar algo mais claro vamos de um exemplo (isso seria minha arquitetura você pode fazer conforme suas necessidades):

     

    Tabela

    CREATE TABLE `notificar` (
        `status` ENUM('nova','antiga'),
        `usuario` int(9),
        `titulo` varchar(100) NOT NULL DEFAULT '',
        `dia` date NOT NULL,
        `mensagem` text
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    • Em status temos a condicional nova e antiga.
    • Toda vez que uma notificação é inserida ela vai como nova, então se o usuário a ver alteramos esse valor para antiga.
    • Em usuario registramos o id da conta daquele usuário para que possamos fazer a consulta e somente ele receba sua notificação.
    • Em titulo poderemos dar um título a notificação exemplo "Você tem uma notificação em blablabla"
    • Em dia poderemos registrar a data que a notificação foi lançada.
    • Em mensagem transcrevemos o conteúdo.

     

    Então para que somente o usuário específico receba suas notificações fazemos a consulta.

    "SELECT * FROM notificar WHERE usuario = '{$ID_DO_USUARIO}'"

    Esse $ID_DO_USUARIO pode ser uma cessão que o identifique.

×

Informação importante

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