-
Total de itens
1325 -
Registro em
-
Última visita
-
Dias vencidos
15
Posts postados por Omar~
-
-
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>
-
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)
-
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.....
-
Você diz uma coluna em sua tabela no banco de dados sql?
Se for execute o comando:
ALTER TABLE nome_da_tabela DROP COLUMN nome_da_coluna
-
$load['parse']['title']
-
-
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)
-
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
- imagesx e imagesy
- 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.
-
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]
-
@finogatto vamos por parte.
Algum arquivo php funciona?
Está rodando a aplicação local ou em uma hospedagem? isso não ficou claro.
Se em uma hospedagem ela tem o apache e o php instalado?
Se em uma hospedagem ela permite protocolos POST?
-
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
-
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
-
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....
-
//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.
-
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>
-
-
<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.
-
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):
SpoilerComo 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.
-
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');
-
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>
-
Também, dê uma googlada usando como pesquisa:
php diff compare github
Você encontrará também diversos projetos no git-hub com arquiteturas de comparação aos quais indicam onde uma string não é igual a outra.
-
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).
-
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' ); }
-
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*
SpoilerPode 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.
abrir imagem e ou pdf no navegador
em PHP
Postado
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.