Jump to content

Omar~

Members
  • Content count

    713
  • Joined

  • Last visited

  • Days Won

    15

Everything posted by Omar~

  1. @Jack Oliveira Hun... 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: 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: Hora que nas estruturas de tabelas que você apresentou não existe a coluna indexar. Logo temos um erro de query.
  2. @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: 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.
  3. Omar~

    Ordenação de letras e números

    Use a Array.prototype.sort() var array_desordenado = ['c', 'a', 'b', 9, 5, 3, 4, 2, 6, 8, 7, 1]; var array_ordenado = array_desordenado.sort(); console.log('Array desordenado: ' + array_desordenado); console.log('Array ordenado: ' + array_ordenado);
  4. Omar~

    seta que movimenta ao clique (accordion)

    Você diz seta inverter? Basicamente é alterar o elemento em questão alterando suas propriedades CSS. Dar uma olhada nisso esse accordion foi eu mesmo quem fiz: https://github.com/Spell-Master/sm-web/tree/master/javascript/Accordion
  5. Omar~

    Transformar uma frase em formato URL

    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
  6. 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.
  7. Omar~

    Cadastrar novos produtos.

    Faça leitura via back-end de um local de armazenamento, se existirem dados exiba eles.. 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.
  8. Omar~

    Gerador de 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>
  9. Omar~

    [Iniciante] Botão de Like

    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. Aí que está o problema pois é necessário back-end para tal ação.
  10. Omar~

    Problema com caracteres especiais - Outlook

    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');
  11. Omar~

    Integração com API SICOOB

    Usar nunca usei, mas acredito que as informações que você procura podem ser obtidas aqui: https://api.boletosimples.com.br/bank_contracts/sicoob/
  12. Omar~

    Logica para um sistema de mensagens em php e mysql

    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.
  13. Omar~

    Logica para um sistema de mensagens em php e mysql

    A lógica é simples cara... Bem, você terá uma tabela para armazenar essa notificação. Enviou mensagem, salva o registro na tabela de notificação. Em sua estrutura HTML você terá um local onde a consulta de notificação será feita, se tem alguma registro você indica da forma que achar melhor. Agora poder notificar em tempo real é um pouco mais complexo, mas simples pois estaremos fazendo a mesma coisa só iremos depender de javascript. De fato nunca mexi com esse lance de notificação em tempo real, mas está em meus planos implementar em meu website e o caminho a segui é só ler isso: https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API https://developer.mozilla.org/pt-BR/docs/Web/API/notificacoes
  14. Omar~

    PDO Exception não trabalha

    O melhor caminho seria corrigir qualquer erro. Mas você pode Ofuscar o erros do servidor (Não aconselho)... Porém só faça isso na aplicação final, pois enquanto estiver em produção os erros são vitais a aparecerem, se não aparecem não há como concerta-los.
  15. @Jack Oliveira Sua solução: https://github.com/Spell-Master/sm-web/tree/master/javascript/AjaxRequest
  16. Omar~

    Erro de cadastro - PDOStatement->execute()

    Está faltando dar bind em token Obs.:: Use password_hash ao invés de md5
  17. Omar~

    Gerador de Senhas

    function gerarSenha() { var i = 0, p = '', t = Date.now(); while (i != 42) { i++; p += Math.floor(Math.random() * 10); } p += t; return(p); } O resultado será um número de 55 dígitos aleatórios onde é impossível se repetir, pois seus últimos 14 dígitos é determinado pelo ano, mês, dia, hora, minuto, segundo, décimo e milésimo. Porém prefiro fazer coisas desse jeito em linguagem de servidor, pois o javascript que faz é a própria máquina do usuário.
  18. Omar~

    Problema com caracteres especiais - Outlook

    Acredito que seja sua codificação ANSI. Tente usar UTF-8. No entanto a questão de codificação abrange muito mais do que isso. E sim usar o PHPMailer é bem melhor.
  19. Omar~

    Máscara e verificação de CPF válido

    Normalmente em aplicações quando precisamos validar CPF, também precisamos além de pessoas físicas validar pessoas jurídicas então preparei esse exemplo tanto para verificação de CPF quando para CNPJ. Note que teremos 2 tipos de filtros... Um usando expressão regular, o que obriga a pessoa ter que digitar o campo de forma correta. Do contrário o formulário não pode ser submetido. Um usando script, que vai limpando qualquer caractere que não se enquadre no que é permitido. Fica a seu critério o que usar ou cominar os dois. Também a validação do lado do servidor, que é extremamente necessária pois tanto HTML como JS podem ser manipulados pelo usuário. <form method="POST"> <p>Usando expressão regular</p> <input type="text" name="expressao" minlength="14" maxlength="18" pattern="([0-9]{2}[\.]?[0-9]{3}[\.]?[0-9]{3}[\/]?[0-9]{4}[-]?[0-9]{2})|([0-9]{3}[\.]?[0-9]{3}[\.]?[0-9]{3}[-]?[0-9]{2})" /> <p>Usando script</p> <input type="text" name="script" minlength="14" maxlength="18" onkeypress="mask(this, cpfCnpj)" onblur="clearTimeout()" /> <hr /> <button>Executar</button> </form> <?php if (isset($_POST) && count($_POST)) { require_once(__DIR__ . DIRECTORY_SEPARATOR . 'StrValid.php'); $valido = new StrValid(); if ($valido->checkCpfCnpj($_POST['expressao'])) { echo("<p>O post expressao é um CPF ou CNPJ válido</p>"); } if ($valido->checkCpfCnpj($_POST['script'])) { echo("<p>O post expressao é um CPF ou CNPJ válido</p>"); } echo("<pre>"); var_dump($_POST); echo("</pre>"); } ?> <script> function mask(o, f) { v_obj = o; v_fun = f; setTimeout('obMask()', 1); } function obMask() { v_obj.value = v_fun(v_obj.value); } function cpfCnpj(v) { v = v.replace(/\D/g, ''); //Remove tudo o que não é dígito if (v.length <= 13) { //CPF v = v.replace(/(\d{3})(\d)/, '$1.$2'); //Coloca um ponto entre o terceiro e o quarto dígitos v = v.replace(/(\d{3})(\d)/, '$1.$2'); //Coloca um ponto entre o terceiro e o quarto dígitos de novo (para o segundo bloco de números) v = v.replace(/(\d{3})(\d{1,2})$/, '$1-$2'); //Coloca um hífen entre o terceiro e o quarto dígitos } else { //CNPJ v = v.replace(/^(\d{2})(\d)/, '$1.$2'); //Coloca ponto entre o segundo e o terceiro dígitos v = v.replace(/^(\d{2})\.(\d{3})(\d)/, '$1.$2.$3'); //Coloca ponto entre o quinto e o sexto dígitos v = v.replace(/\.(\d{3})(\d)/, '.$1/$2'); //Coloca uma barra entre o oitavo e o nono dígitos v = v.replace(/(\d{4})(\d)/, '$1-$2'); //Coloca um hífen depois do bloco de quatro dígitos } return v; } </script> Classe StrValid <?php /** * ******************************************** * * @class StrValid * * @copyright (c) Spell master * * @version 2.1 * * @see Classe para verificação de string * ******************************************** */ class StrValid { /** * **************************************** * Verificar se uma string possui somente * caracteres alfabéticos "Não acentuados * e sem espaços" * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function strCheck($subject) { if (preg_match('/^([a-zA-Z]+)$/i', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string possui somente * caracteres numéricos * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function intCheck($subject) { if (preg_match('/^([0-9]+)$/i', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string possui somente * caracteres alfabéticos "Incluíndo * acentos" * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function strAccent($subject) { if (preg_match('/^([a-zA-ZÀ-ú]+)$/i', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string possui somente * caracteres alfabéticos "Incluíndo * espaços" * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function StrSpace($subject) { if (preg_match('/^([a-zA-Z ]+)$/i', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string possui somente * caracteres numéricos "com ou sem * espaços" * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function intSpace($subject) { if (preg_match('/^([0-9 ]+)$/i', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string possui somente * caracteres alfabéticos ou numéricos * "sem espaços ou acentos" * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function strInt($subject) { if (preg_match('/^([a-zA-Z0-9]+)$/i', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string possui somente * caracteres alfabéticos ou numéricos * "incluíndo espaços ou acentos" * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function strIntSpace($subject) { if (preg_match('/^([a-zA-Z À-ú 0-9]+)$/i', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string possui somente * caracteres alfabéticos "Incluíndo * acentos ou espaços" * - Tipo de verificação padrão para nomes * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function nameCheck($subject) { if (preg_match('/^([a-zA-Z À-ú]+)$/i', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string possui somente * caracteres para uma url válida * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * @example : * - https://url/?entrada_get=algum-valor * Retorna true por ser válido * - /algumacoisa * Retorna true por ser válido * **************************************** */ public function urlCheck($subject) { if (preg_match('/^([a-zA-Z0-9-_:\/?&=%]+)$/i', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string possui somente * caracteres válidos para um endereço de * e-mail. * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function mailCheck($subject) { if (preg_match('/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{3})$/', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string é um tipo de * telefone válido. * @example : * - +55 (99) 99999-9999 * - 99 99999-8888 * - 9999-9999 * - 9999999999999 * Ambos números são válidos. * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function checkPhone($subject) { if (preg_match('/^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)?(?:((?:9\d|[2-9])\d{3})\-?(\d{4}))$/', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string é um tipo de * CPF válido. * @example : * - 000.000000-00 * CPF é válido. * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function checkCpf($subject) { if (preg_match('/^([0-9]{3}[\.][0-9]{3}[\.][0-9]{3}[-][0-9]{2})$/', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string é um tipo de * CNPJ válido. * @example : * - 00.000.000/0000-00 * CNPJ é válido. * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function checkCnpj($subject) { if (preg_match('/^([0-9]{2}[\.][0-9]{3}[\.][0-9]{3}[\/][0-9]{4}[-][0-9]{2})$/', $subject)) { return (true); } } /** * **************************************** * Verificar se uma string é um tipo de * CPF ou CNPJ válido. * @example : * - 000.000000-00 * - 00000000000 * CPF é válido. * * - 00.000.000/0000-00 * - 00000000000000 * CNPJ é válido. * **************************************** * @param {string} $subject * Entrada para verificação * @return {true} (A string é valida) * **************************************** */ public function checkCpfCnpj($subject) { if (preg_match('/^([0-9]{3}[\.]?[0-9]{3}[\.]?[0-9]{3}[-]?[0-9]{2})|([0-9]{2}[\.]?[0-9]{3}[\.]?[0-9]{3}[\/]?[0-9]{4}[-]?[0-9]{2})$/', $subject)) { return (true); } } }
  20. Nesse caso você pode usar ajax, mas é necessário autorização do endereço para seu servidor tenha tal acesso. Mais informação em: https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
  21. Omar~

    Help transferencia

    Qual a linguagem back-end? Em todo caso não vejo anomalia alguma, uma vez que são usuários distintos, logo a soma é o correto a acontecer. É possível prever... Como...? Supondo que seja em um submit, logo eu seja o usuário-A e vejo que usuário-B possui o saldo de 10. Ao submeter o formulário basta que a informação do saldo atual seja enviado junto a quantidade de saldo que vou anexar. Então basta que compare se o saldo atual enviado é do mesmo valor que o saldo que visualizei. Assim sendo vejo que usuário-B tem o saldo de 10 e envio 50 para ele, se o saldo atual dele não for 10 é porque foi alterado. No caso de uso em banco de dados SQL mesmo, existe um delay de micro segundos para registros serem manipulados, sendo impossível que 2 registros aconteça naquela exata fração de segundo.
  22. Omar~

    ajuda com um formulario

    https://forum.imasters.com.br/topic/584635-input-restrito-a-números-com-caracteres-limitados/
  23. <!-- Usando expressão regular --> <input type="text" pattern="([0-9]+)" maxlength="15" /> <!-- Com uso de máscara --> <input type="text" maxlength="15" onkeypress="mascara(this, inteiro)" onblur="clearTimeout()" /> <script> var input, tecla; function mascara(i, t) { window.input = i; window.tecla = t; setTimeout('chave()', 1); } function chave() { window.input.value = window.tecla(window.input.value); } function inteiro(v) { v = v.replace(/\D/g, ''); return v; } </script>
  24. Omar~

    Formulário de acesso vulnerável PHP

    Isso é um porre mesmo.... Fiquei curioso enquanto a isso: O que estaria utilizando para armazenar essas tentativas falhas? Cookie? Se é cookie nem adianta mesmo... A melhor forma que vejo é usar um código de verificação "captcha". Pois como a regra do mesmo é sempre um código aleatório nenhum programa é capaz de prever seu resultado. Enfim já passei por isso, minha alternativa foi utilizar mesmo o código Captcha no login. Mas toda vez que determinado IP erra o login armazenei a tentativa falha em uma tabela quando o mesmo IP chegue a três erros consecutivos a requisição o captcha aparecia sendo necessário. Em X reincidências aquele IP era bloqueado de acesso. Um ponto ruim dessa minha alternativa foi na camuflagem de IP ao qual alguns usuários que não tinham nada haver acabaram tendo seus IP's bloqueados. No entanto foi necessário devido a 1 ou mais pessoas de má fé querendo atrapalhar. Existem diversos captcha na web até aquele famoso do google "Eu não sou um robô" que poderia está implementando. É algo extremamente chato tanto para o administrador da aplicação quanto para os demais usuários, mas vital quando necessário.
  25. Omar~

    Ativar menu conforme for URL

    A melhor formar de fazer isso é: Ao criar o link você o identifica, pode ser com o próprio id da consulta. Então usando o javascript ao abrir a página você remove todos os classificados active dos links. Logo após ao abrir a página você busca o link que contenha aquele id da página e adiciona o classificador active a ele. Exemplo: Criando os links <?php foreach ($array as $v) { ?> <a href="<?= $v['link'] ?>" id="link-de-id-<?= $v['id']?>"><?= $v['texto_a_exibir']? class="exemplo"></a> <?php } Na página que foi aberta consultamos seu id na consulta e usamos jascript <script> var links = document.querySelectorAll('a.exemplo'); for (var i = 0; i < links.length; i++) { links[i].className = 'exemplo'; } document.getElementById('link-de-id-<?= $query['id'] ?>').classList.add('active'); </script> Primeiramente removemos qualquer active que contenha em algum link Então como o id da página tem o mesmo id do link adicionamos o classificador no link
×

Important Information

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