Ir para conteúdo

Omar~

Members
  • Total de itens

    1325
  • Registro em

  • Última visita

  • Dias vencidos

    15

Posts postados por Omar~


  1. Não mecho com mysql, tente verificar se é erro mesmo:

    var_dump( mysqli_errno() );

     

    Lógico que isso vem depois da conexão ser lançada e todos erros na aplicação devem ser habilitados e nenhum tipo de ofuscação deve ser usado exemplo:

    @$alguma_coisa = .....


  2. E onde está a função innerHTMLtransaction?

    O problema pode ser justamente nessa função.

     

    Em outro caso falta uma tag <td> já estamos manipulando uma tabela.

     

    Tente assim:

    addTransaction(transaction) {
      var tr = document.createElement('tr'),
          td = document.createElement('td');
    
      td.innerHTML = transaction;
      tr.appendChild(td);
    
      this.transacaoContainer.appendChild(tr);
    }

     

    Por fim certifique-se que existe uma tag <table> com o classificador mytbody, do contrário aqui:

    3 horas atrás, nelson99 disse:

    transacaoContainer: document.querySelector('.mytbody'),

    Será uma propriedade indefinida, portanto não será um objeto válido.


  3. Não entendi direito, mas se for separar cada caractere formando um array você pode está usando a função str_split:

    $separa = str_split('90');
    var_dump( $separa ); // array(2): ['9', '0']

    Mas não sei, mas desconfio que você esteja tentando fazer algo que a função number_format já faz. 


  4. Rapaz!!

    Espero que ajude, veja que acessei qualquer valor para criar uma mensagem de console exibindo cada qual:

    var objeto = {
        'Entradas': {
            'Receitas Operacionais': {
                0: 'Vendas',
                1: 'Serviços'
            },
            'Receitas financeiras': {
                0: 'Rendimentos'
            }
        },
        'Saidas': {
            'Despesas comerciais': {
                0: 'Comissões',
                1: 'Combustivel',
                2: 'Publicidade'
            }
        },
        'Despesas operacionais': {
            0: 'Matéria Prima',
            1: 'Fretes'
        }
    };
    
    var objA = 0,
        objB = 0,
        objC = 0,
        subObjetoA = [],
        subObjetoB = [],
        mensagemTeste = '';
    
    for (objA in objeto) {
        mensagemTeste = objA + ' = [';
        subObjetoA = objeto[objA];
        for (objB in subObjetoA) {
            subObjetoB = subObjetoA[objB];
            if (typeof subObjetoB === 'object') {
                mensagemTeste += '\n\t' + objB + ' = [';
                for (objC in subObjetoB) {
                    mensagemTeste += '\n\t\t' + subObjetoB[objC] + ', ';
                }
                mensagemTeste += '\n\t],';
            } else {
                mensagemTeste += '\n\t' + subObjetoB + ', ';
            }
        }
        mensagemTeste += '\n]';
        console.log(mensagemTeste);
    }

    Não é por nada não eim, mas se vai usar javascript para compilar html está metendo os pés pelas mão, javascript só deve ser usado no html para manipulação de conteúdo já carregado, por intermédio de uma ação executada pelo usuário. E não para o carregamento.


  5. Estranho deve ser alguma configuração do apache que desconheço.

    Tente então modificar a arquitetura e não usar um arquivo html e sim php. De fato fica até mais simples e prático.

     

    <?php
    $dados = [
        'titlo' => 'titulo da página',
        'texto' => 'um texto de teste'
    ];
    $html = include ('estrutura.php');
    echo $html;

    Aí nesse estrutura.php é que você transcreve a página

    <?php
    $renderiza = '<!DOCTYPE html>'
    . '<html lang="pt-BR">'
        . '<head>'
            . '<meta charset="UTF-8">'
            . '<title>' . $dados['titlo'] . '</title>'
        . '</head>'
        . '<body>'
            . '<p>' . $dados['texto'] . '</p>'
        . '</body>'
    . '</html>';
    return ($renderiza);

     


  6. Aparentemente deveria tudo funcionar como tal, tentei reproduzir o problema e a única coisa de anormal é se algum índice do array estiver vazio.

    Depure os valores do array para ver:

    Citar
    
    $vai_no_html = [ // Quais os dados vão ser adicionados ao html
        'titulo' => ConfigPainel('site_nome'),
        'url' => ConfigPainel('site_url')
    ];
    var_dump($vai_no_html);
    
    

    E veja se os índices possuem algum valor.

    De qualquer forma tente não usar a função ConfigPainel e escreva qualquer coisa aí para testar

    Estou disponibilizando o link para do teste que fiz para você testar aí.

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

     

     


  7. Bom, eu presumo que a linguagem back-end seja o PHP.

     

    Começando eu resumir o html só para alguns campos, mas já dar para ver como a coisa vai funcionar.

    Então o arquivo.html:

    Spoiler
    
    <!DOCTYPE html>
    <html lang="pt-BR">
        <head>
            <meta charset="UTF-8">
            <meta name="language" content="pt-BR">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <link rel="icon" href="{{ favicon }}">
    
            <title>{{ title }}</title>
    
            <meta name="description" content="{{ description }}">
            <link rel="stylesheet" href="{{ url }}assets/css/app_style.css">
    
            <script type="application/javascript" src="{{ url }}assets/js/script.js"></script> 
            <script>
                {{ google_analytics }}
            </script>
            <style>
                .card {
                    background-color: {{ background_color1 }};
                    color: {{ color1 }}
                }
            </style>
        </head>
    
        <body> 
            <div class="card">
                <!--
                    A TAG <strong> foi removida no HTML 5
                    Os navegadores ainda a reproduzem porque ainda existem
                    centenas de milhares de páginas que não são html 5
                    Mas será removida em um futuro breve.
                -->
                <span style="font-weight:bold"> {{ titulo_informacao }} </span>
                <p> {{ resumo }} </p>
            </div> 
        </body>
    </html>

     

     

    Então criei uma classe que irá pegar onde tem no html {{ alguma_coisa }} e substituir por dados vindos de um arrray no php:

    Spoiler
    
    <?php
    
    /* Essa classe fixa o buffer do cabeçalho
     * Isso impedirá que o cabeçalho http seja entregue após executar os métodos daqui */
    
    class RendeHtml {
    
        private $htmlBase;
        private $encontrarChave;
        private $substituirChave;
        private $htmlRenderizado;
    
        public function defineDados($arquivoHtml, $arrayDados = []) {
            $this->htmlBase = (string) $arquivoHtml;
            $this->existeHtml();
            $this->encontrarChave = [];
            $this->substituirChave = [];
            foreach ($arrayDados as $chave => $valor) {
                $this->encontrarChave[] = '{{ ' . $chave . ' }}';
                $this->substituirChave[] = $valor;
            }
            $this->substituirDados();
        }
    
        public function verHtml() {
            return (empty($this->htmlRenderizado) ? 'Não renderizado html de saída' : $this->htmlRenderizado);
        }
    
        private function existeHtml() {
            if (!file_exists($this->htmlBase)) {
                die('Erro ao encontrar arquivo html para gerar renderização');
            }
        }
    
        private function substituirDados() {
            ob_start();
            include($this->htmlBase);
            $fixarCabecalho = ob_get_clean();
            if (!empty($this->encontrarChave) && !empty($this->substituirChave)) {
                $this->htmlRenderizado = str_replace($this->encontrarChave, $this->substituirChave, $fixarCabecalho);
            }
        }
    
    }

     

     

    Daí então é só criar um array onde os índices terá o mesmo nome contido no que tem no html entre as chaves {{}}, os valores que serão inseridos nada mais que os valores dos índices com o mesmo nome.

    Spoiler
    
    <?php
    require_once (__DIR__ . DIRECTORY_SEPARATOR . 'RendeHtml.php');
    
    $vai_no_html = [ // Quais os dados vão ser adicionados ao html
        'favicon' => 'icone.ico',
        'title' => 'título da página',
        'description' => 'Descrição qualquer',
        'url' => 'https://endereco.com/',
        'google_analytics' => 'console.log(\'Um script javascript\')',
        'background_color1' => '#ff0000',
        'color1' => '#ffffff',
        'titulo_informacao' => 'Informação de título',
        'resumo' => 'Resumo qualquer'
    ];
    $html = __DIR__ . DIRECTORY_SEPARATOR . 'arquivo.html'; // Endereço para o arquivo html
    
    $renderizar = new RendeHtml();
    $renderizar->defineDados($html, $vai_no_html);
    
    echo ($renderizar->verHtml());

     

     


  8. Qual a linguagem back-end? Essa informação é vital.

     

    De qualquer forma a duas alternativas.

    1 (A mais correta e sensata) Renderizar a página e entregar para o usuário tudo completo, acredito que conseguiria fazer algo para isso usando um arquivo .html e alimentando os dados através do PHP.

    2 (O menos eficiente) Pré renderizar a página, pós seu carregamento redefinir todos os valores através do javascript. O problema disso é justamente você ter que renderizar um padrão e substituir tudo depois de carregado. É até simples demais porém ineficiente tanto em usabilidade quanto em desempenho.

     

     

    Em 27/12/2021 at 15:25, Jack Oliveira disse:

    só mais uma obs: toda vez que ser inserido ou atualizado os dados no banco que as informações seja atualizada tbm

    Aí você re-executa a coisa toda usando websocket

     


  9. Desculpe mas só agora fui ver a query rsrsrsr..... Se não indicar os índices que vão ser lidos, lógico que eles não vão existir.... Então você pode repassar os valores separados por virgula.

    SELECT
        bk_fantasia,
        bk_lote_del,
        bk_fc_ID
    FROM
        tab_for_sai
    WHERE
        bk_lote_del = 'BOM'
    ORDER BY
        bk_fantasia ASC

    Na via das dúvidas se for o caso você pode pegar todos os índices da tabela. Usando um "*" você diz na instrução: Selecione tudo na tabela

    SELECT * FROM tab_for_sai WHERE bk_lote_del = 'BOM' ORDER BY bk_fantasia ASC

     

    GROUP BY serve para agrupar resultados normalmente usado em join's, daí quando há resultados duplicados semelhantes ao qual pode-se agrupar os que são iguais em um único resultado.


  10. Você precisará fazer 2 tabelas ou 1 só, também precisará fazer 2 querys, ou uma só dar também.

    O negócio é que vamos precisar de 2 arrays um para a categoria outro para produto.

    Portanto se fazer 1 query terá que separar as categorias dos produtos.

    Então fazemos uma varredura primeiro no array de categoria e dentro dessa varredura varremos também o array de produtos, o segredo é comparar a referência.

     

    Veja como funciona a lógica:

    <?php
    $categorias = [
        0 => ['id' => 1, 'nome' => 'novidades'],
        1 => ['id' => 2, 'nome' => 'sucessos'],
        2 => ['id' => 3, 'nome' => 'vips']
    ];
    $produtos = [
        0 => ['id' => 1, 'categoria' => 1, 'nome' => 'Produto A'],
        1 => ['id' => 2, 'categoria' => 2, 'nome' => 'Produto B'],
        2 => ['id' => 3, 'categoria' => 3, 'nome' => 'Produto C'],
        3 => ['id' => 4, 'categoria' => 1, 'nome' => 'Produto D'],
        4 => ['id' => 5, 'categoria' => 3, 'nome' => 'Produto E']
    ];
    
    foreach ($categorias as $c) {
        echo ("<p>Atual laço de repetição {$c['id']}: {$c['nome']}</p>");
        foreach ($produtos as $p) {
            if ($c['id'] == $p['categoria']) {
                echo ("<p>Produto: {$p['nome']}/ Categoria: {$c['nome']}</p>");
            }
        }
        echo ("<hr />");
    }

     


  11. Mas você está usando PDO ou msqli como extensão para conectar?

    Enfim se não está usando PDO deveria está usando....

     

    Toda vez que ver UNDEFINED INDEX saiba que é um índice de algum array sendo usado quando ele não existe.

    Então podemos chegar a conclusão que o índice bk_fc_ID não existe.

    Pelo contexto sabemos que deveria ser o nome de uma das colunas da tabela tab_for_sai. Como aqui ninguém sabe como é a estrutura da tabela não podemos dizer como deveria ser esse índice ou se ele mesmo existe, mas acredito que o problema é que você transcreveu usando letras maiúsculas ao invés de minusculas, no entanto você mesmo pode depurar e chegar a solução por conta própria.

    Bastando apenas usar a função var_dump no resultado assim você terá como saber se existe, se está com erro, como é de fato e tudo mais, mais ou menos nesse sentido:

    <?php
    
    $select = $CALL->prepare(
      "SELECT bk_fantasia FROM tab_for_sai WHERE bk_lote_del = 'BOM' GROUP BY bk_fantasia ORDER BY bk_fantasia"
    );
    $select->execute();
    $resultado = $select->fetchAll(PDO::FETCH_ASSOC);
    <?php
    echo "<pre>";
    var_dump($resultado); // Visualizar como é de verdade os dados obtidos (Mesmo que sejam erros)
    echo "</pre>";
    
    foreach ($resultado as $valor) {
      echo "<p>{$valor['bk_fantasia']}</p>";
      echo "<p>{$valor['bk_fc_id']}</p>"; // Acredito que deveria está transcrito em letras minúsculas
    }
    
    /*
    Tudo que estiver abaixo desse loop você deixa como comentário entre as aspas
    while ($user - $stmta->fecth())
    
    
    */

     


  12. Eu dispenso em faze JOIN em outra tabela quando não for necessário.

    Cada JOIN uma nova etapa do processamento, menos desempenho vamos ter.

    Se levar-mos ao pé da letra como devemos executar alguma coisa só vamos perder em desempenho.

    Por isso (DEPENDENDO DO AMBIENTE) é melhor registar numa única tabela e apenas lermos aquele ao invés "de dar banana ao macaco" e fazer voltas para uma coisa que deveria ser única.

    Não que a proposta de uma tabela extra esteja errada,  mas como disse depende do ambiente da aplicação e talvez um único acesso seria o bastante para sanar uma simples questão.

     


  13. Veja se não existe um caractere binário invisível antes da declaração da variável. (caso tenha usando Crtl+C & Ctrl+V aqui do fórum com certeza deve ter).

    Nesse caso escreva o código a mão, ou use um editor capaz de interpretar esses caracteres.

     

    Verifique se você fechou o código anterior com um ponto-e-virgula.

     

    unexpected T_VARIABLE

    Diz que o PHP não espera aquela variável agora pois ainda não terminou de executar uma instrução anterior. Então quando ver isso, normalmente não está relacionado exatamente a instrução atual e sim a alguma coisa anterior.

     


  14. Então seria uma cor distinta quando for P ou M ou G?

    <?php
    function defineCor($valor) {
        switch (strtolower($valor)) {
            case 'p': $cor = 'ff0000'; break;
            case 'm': $cor = '359107'; break;
            case 'g': $cor = '3b7fe7'; break;
            default: $cor = '000000'; break;
        }
        return ('#' . $cor);
    }
    ?>
    
    <div style="color:<?= defineCor('M') ?>">lorem ipsum dolor sit amet</div>

     

    Se for uma cor para cada registro, aí você tem que registrar essa cor junta a própria tabela seja lá qual for o que é para ter cor.


  15. Repassei o que fiz e na lógica tudo funcionaria como previsto, então testei para realmente ver...

    E não é que funcionou como esperado!

     

    O resultado:

    Em caminho de...


  16. Eu não testei mas deve funcionar:

    <?php
    function limitarPalavras($texto, $quantidade) {
        $textoArray = explode(' ', $texto, ($quantidade + 1));
        if (count($textoArray) > $quantidade) {
            unset($textoArray[$quantidade]);
        }
        return (implode(' ', $textoArray) . '...');
    }

    Então você chama a função informando por parâmetro "$texto" o texto que é para limitar a quantidade de palavras e como segundo parâmetro "$quantidade" você informa quantas palavras quer.

    Exemplo:

    $palavra = "Em caminho de paca tatu caminha dentro?";

    echo limitarPalavras($palavra, 3);

     

    O que eu fiz, simplesmente quebrei o texto em um array separando cada palavra pelo espaço entre elas, mas a quantidade de índices desse array deve ser a quantidade que informamos +1 porque sempre o primeiro índice de um array é zero.

    Então se a quantidade de índices gerados pelo explode for maior que a quantidade, remove-se esse  índice sobrando.

    Por fim com a o implode juntamos nosso array quebrado novamente em uma string.


  17. 11 horas atrás, Caio Vargas disse:

    Eu coloquei os tamanhos para serem cadastrados junto com as categorias

    Que tamanhos que categoria? O que você cadastra mesmo?

     

    11 horas atrás, Caio Vargas disse:

    Porém o meu cliente pediu para criar as cores

    Cor do que? Para o que?

     

    11 horas atrás, Caio Vargas disse:

    gostaria de saber se alguém tem algum exemplo

    Ninguém vai ter se você não disser do que se trata

     

    Explica direito e não de forma branda/leviana para que nós possamos ter pelo menos uma mínima ideia do que de fato você está tentando alcançar.

    Porque o que você disse não diz coisa com coisa alguma...


  18. Achei interessante e um desafio, mas antes de fato tentar fazer veio um problema.

    Existe um limite na quantidade de caractere que um número pode chegar?

    Exemplo: Se tivesse-mos 123456789, lógico que a cada numero passado é maior que o anterior, mas na condição que 123456 é maior que 789, por isso achei que não conseguiria inventar alguma coisa para sanar esse problema.

     

    Sem botar a mão na maça primeiro eu quebraria o numero em um array, e através de um while compararia cada índice com o próximo se for maior aumentaria o valor de uma variável ou a re-escreveria com o novo número sempre comparando com o próximo até cessar o loop.

    Se tudo desse certo como na teoria condiz eu estaria com o maior numero em sequencia, o problema seria o limite máximo de caractere que a a varável do resultado pode alcançar.


  19. Rapaz só tem um jeito de você fazer a coisa andar.

    1º - Você tem que salvar a senha do usuário durante seu cadastro usando o password_hash

    2 º - Como o login é e-mail e senha você verifica somente se existe o e-mail, se existir aí você traz os dados desse e-mail, na precisão precisa da senha que está salva lá quando o usuário se cadastrou.

    3º - Com essa senha obtida pelo e-mail aí você compara o valor salvo no banco de dados com a digitada usando o password_verify

     

    E a propósito:

    NUNCA/ JAMAIS/ EM HIPÓTESE ALGUMA!!! Ofusque alguma coisa! E ainda pior você fez cometeu erro gravíssimo em uma super global....

    16 horas atrás, Biel. disse:

    @$senha = $_POST['senha'];

    @$email = $_POST['email'];

     

    Nada deve ser ofuscado e nunca super-globais devem ser acessadas diretamente.


  20. Sim pode ser feito com um banco de dados, basta apenas que saiba registrar e ler dados.

    Porém textos design das páginas e uma porção de coisas pode ser executada por arquivos apenas mudando seus parâmetros.

     

    É muito comum na área de desenvolvimento para terceiros colocar-mos alguma coisa de mudança de configuração, como alterar dados de acesso a banco de dados o já mencionado acima e uma infinidade de coisas de forma a facilitar o manuseio da aplicação pelo cliente, pois normalmente ele não sabe programar por isso ele nos contratou, e apenas com alguns cliques ele possa gerenciar toda a aplicação.

    Mas não acho sensato um amador se entregar nisso, pois requer muita atenção pois um simples erro pode custar muito dinheiro para o cliente que vai com certeza processar-lo pela perda (recentemente um conhecido meu foi preso por causa disso mesmo).

    No entanto é bom que comece a fazer coisas básicas pessoalmente para ir se acostumando.

     

    Vamos então supor que tenha-mos textos para serem exibidos que podem ser editados.

    Irei usar um arquivo XML pois pode guardar muita informação e na teoria funciona como banco de dados (MAS NUNCA USE UM ARQUIVO DESSES PARA GUARDAR DADOS DE ACESSO!!!)

    <?xml version="1.0" encoding="UTF-8"?>
    <textos>
        <texto_a>Algo escrito para ser mostrado</texto_a>
        <texto_b>Outra coisa</texto_b>
    </textos>

    Aí caso queiramos mostrar alguma coisa desse arquivo:

    <?php
    $lerXML = simplexml_load_file('arquivo.xml');
    echo ($lerXML->texto_a);

    Mas de nada adianta se não pudermos editar não é mesmo?

    Então criamos um arquivo que será responsável por re-escrita do arquivo original.

    <?php
    $escrita = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
        . "<textos>"
        . "<texto_a>{$texto_a}</texto_a>"
        . "<texto_b>{$texto_b}</texto_b>"
        . "</textos>";
    return $escrita;

    Nada mais que um arquivo php que tem escrito os padrões do arquivo original que vamos alterar

    Então para alterar-mos o arquivo bastamos criar as variáveis usadas no arquivo acima. Incluir ele e re-escrever outro XML com o que vamos modificar salvando em cima do outro assim substituindo o anterior.

    <?php
    $texto_a = 'Estou mudando o texto A do arquivo XML';
    $texto_b = 'Estou mudando o texto B do arquivo XML';
    
    $saida = include ('escrita.php'); // O arquivo php de re-escrita
    $salvar = 'arquivo.xml'; // O arquivo XML que é para salvar
    $escrever = fopen($salvar, 'w') or die('Não é possível gerar o arquivo.'
                    . '<br />Verifique as permissões de acesso as pastas e arquivos no servidor');
    fwrite($escrever, $saida);
    fclose($escrever);

    Se então acessarmos aquele arquivo que fizemos a leitura do XML vemos que o texto foi alterado.

    Porém se não queira-mos mudar tudo fazemos a leitura do arquivo XML comparamos as informações diferentes e setamos valores iguais ou diferentes nas variáveis conforme o que de fato foi alterado.

     

    No mais é o básico se formulários HTML e receber essas informações e processar-las no back-end para ser usadas.


  21. Estou com a tarefa de elaborar uma leitura no banco de dados e não estou conseguindo achar uma solução para a instrução de leitura.

    Basicamente tenho uma tabela que de produtos, nela tenho uma coluna para registrar o vendedor e outra para registrar o comprador assim associar esses valores com a tabela de usuários.

    Digamos assim:

    SELECT
      produto.id,
      produto.vendedor,
      produto.comprador,
    
      usuarios.id,
      usuarios.nome
    FROM
      produto
    INNER JOIN
      usuarios
    ON
      produto.vendedor = usuarios.id

    Com isso tenho a informação do vendedor na tabela de usuários, mas como faria para obter os dados do comprador também?

     

    Uma forma seria executar dois joins na tabela de usuários porém acho que assim me parece mais gabiarra do que o jeito mais coeso de se fazer  (e na verdade foi gabiarra sim porque não sei como proceder)

    Tipo assim:

    SELECT
      produto.id,
      produto.vendedor,
      produto.comprador,
    
      a.id AS a_id,
      a.nome AS a_nome,
      
      b.id AS b_id,
      b.nome AS b_nome
    FROM
      produto
    INNER JOIN
      usuarios AS a
    ON
      produto.vendedor = a.id
    INNER JOIN
      usuarios AS b
    ON
      produto.comprador = b.id

    Tem outro jeito? Como?


  22. Bem simples de resolver se você tem mesmo acesso aos arquivos hospedados.

    A mensagem é clara e diz que o usuário sql palms não tem permissão de acesso devido a senha incorreta.

     

    • Veja alguma documentação desse prestashop e ver em qual arquivo armazena os dados de acesso ao banco de dados.
    • Acesse os arquivos na hospedagem e faça o download desse arquivo.
    • Modifique os dados manualmente nesse arquivo, conforme os novos dados de acesso ao sql.
    • Envie esse arquivo modificado para a hospedagem substituindo o que lá está com dados inválidos.
×

Informação importante

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