-
Total de itens
1865 -
Registro em
-
Última visita
-
Dias vencidos
32
Tudo que Matheus Tavares postou
-
PHP+Codeigniter - Teclas para Salvar (atalho)
Matheus Tavares respondeu ao tópico de violin101 em PHP
Olá Cesar. A forma mais simples seria criar uma função salvar() e chamá-la quando você precisar. Assim: function salvar() { // Aqui você faz a rotina para salvar. Fetch API pode ser útil } Um usuário já implementou um ótimo exemplo da função salvar nesse tópico: https://forum.imasters.com.br/topic/589169-php-tecla-de-atalhos-para-salvar/ Agora você cria dois observadores (por exemplo) que irão chamar o salvar(). Um para o Enter e outro para o Ctrl+S: Observador 1 (Enter): document.addEventListener( 'keydown', function( evt ) { if ( evt.key !== 'Enter' ) return;// Não é Enter, portanto paramos aqui evt.preventDefault(); salvar();// Pressionado Enter. Vamos salvar... } ); Observador 2 (Ctrl+S): document.addEventListener( 'keydown', evt => { if ( !evt.ctrlKey || evt.key !== 's' ) return;// Não é Ctrl+S, portanto interrompemos o script evt.preventDefault(); salvar();// Pressionado Ctrl+S. Vamos salvar... } ); Quanto Enter ou Ctrl+S forem pressionados, ambos irão chamar a função salvar. Você poderia escrever tudo em um único observador, mas isso não seria uma boa prática. É melhor dividirmos as responsabilidades e cada observador executar uma tarefa. -
PHP+Codeigniter - Teclas para Salvar (atalho)
Matheus Tavares respondeu ao tópico de violin101 em PHP
Olá. Tudo joia? Você tem duas opções: 1 - Escutar o evento do keydown, como você já fez anteriormente, mas dessa vez para a tecla Enter. Caso seja pressionada, você impede o comportamento padrão do navegador de enviar o formulário. Dessa forma o usuário ainda conseguiria enviar o form através do botão. document.addEventListener( 'keydown', function( evt ) { if ( evt.key !== 'Enter' ) return;// Não é Enter, portanto paramos aqui evt.preventDefault(); // O navegador já foi interrompido. Aqui você pode fazer alguma coisa se quiser (por ex salvar) } ); 2 - Caso você não queira enviar o form de jeito nenhum, nem através do botão submit, ao invés de observar a tecla Enter, você deve observar a submissão do form para impedir o navegador. Assim: // Observe que você precisa adicionar id="MeuForm" ao seu <form> document.getElementById( 'MeuForm' ).addEventListener( 'submit', function( evt ) { evt.preventDefault(); // O navegador já foi interrompido. Aqui você pode fazer alguma coisa se quiser (por ex salvar) } ); Apenas mais uma dica. Seu código possui essa linha: if (e.keyCode == 83){ //Teclas= CTRL+S keyCode é uma propriedade obsoleta e não deveria ser utilizada. Veja: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode Além disso você está verificando apenas se o keyCode bate com "83". Isso significa que ao pressionar "S" sem o ctrl, o if permite o prosseguimento do seu script. Você poderia mudar para esse padrão: document.addEventListener( 'keydown', evt => { if ( !evt.ctrlKey || evt.key !== 's' ) return;// Não é Ctrl+S, portanto interrompemos o script evt.preventDefault(); console.log( 'O usuário pressionou CTRL+S. Agora faço o que preciso fazer...' ); } ); Observe que ao invés de verificar se "É UM S", eu verifico se NÃO É UM CTRL+S, e caso NÃO SEJA eu interrompo o script. Isso se chama early return e melhora a legibilidade do código, pois agora você pode retirar um nível de indentação de todo esse bloco e retirar essa linha também: }//Fim keyCode Espero ter ajudado :) -
Tem como JS executar/chamar um programa externo?
Matheus Tavares respondeu ao tópico de jvilar em Javascript
Olá. Se você estiver no Node.js (executando JS no desktop) sim, é possível. Pra isso você utilizaria Child process. Exemplo: import { spawn } from 'node:child_process'; spawn( 'C:\\windows\\notepad.exe', [ 'C:/Users/SEU_USUARIO/Documents/seu_arquivo_txt.txt' ] ); Não estou no Windows pra testar, mas acho que seria isso. A documentação cita mais exemplos e tem detalhes sobre o funcionamento do spawn: https://nodejs.org/api/child_process.html#child_processspawncommand-args-options Caso você esteja falando de JS no navegador, então não é possível executar um exe via JS por questões de segurança. -
[Resolvido] Alterar rota php com JQuey ou javaScript
Matheus Tavares respondeu ao tópico de Carcleo em Javascript
Show. Essa é a ideia :)- 5 respostas
-
[Resolvido] Alterar rota php com JQuey ou javaScript
Matheus Tavares respondeu ao tópico de Carcleo em Javascript
Exatamente. Não tem como apenas alterar o parâmetro utilizando o JS, pois o href foi definido no servidor, pelo PHP, com a sua função route(). São momentos de execução diferentes.- 5 respostas
-
[Resolvido] Alterar rota php com JQuey ou javaScript
Matheus Tavares respondeu ao tópico de Carcleo em Javascript
Olá. O índice "[ 1 ]" que você está informando na função route pertence ao PHP e não ao JS, e portanto não pode ser influenciado pelo clique do usuário, ao menos que você utilize outro meio para alterar o atributo href (via JS). Veja: https://forum.imasters.com.br/topic/588408-como-pegar-conteudo-de-uma-variavel-javascript-e-passar-pra-uma-variavel-php/- 5 respostas
-
como pegar conteudo de uma variavel javascript e passar pra uma variavel php
Matheus Tavares respondeu ao tópico de joao b silva em Javascript
Apenas complementando o que o Omar já explicou: Existe um processo de execução dos serviços: 1 - O usuário faz a requisição. 2 - Seu servidor a recebe e chama o programa (PHP) responsável pelo processamento dela. 2 - O PHP faz o que precisa ser feito e responde com o conteúdo (HTML/JS/CSS crús) que servirá para que o navegador renderize o que você instruiu. Você pode nessa etapa inserir uma variável do PHP, assim por exemplo: var id = parseInt( <?php echo $id ?> ); Pois após o PHP processar e responder, o que chega ao navegador é isso: var id = parseInt( 5 );// se $id fosse 5... Por isso código PHP é inacessível ao usuário, pois ele é executado dentro da máquina que está servindo a aplicação (servidor). Entenda que não tem como eu executar PHP novamente após a interação do usuário, ao menos que eu mande OUTRA (uma segunda) requisição em background (sem que o usuário perceba) utilizando JS. A esse tipo de requisição em background damos o nome de AJAX: https://developer.mozilla.org/pt-BR/docs/Web/Guide/AJAX Resumindo: PHP roda no servidor, HTML/CSS/JS roda no navegador. São camadas e momentos totalmente diferentes. Sacou? -
como pegar conteudo de uma variavel javascript e passar pra uma variavel php
Matheus Tavares respondeu ao tópico de joao b silva em Javascript
O que você está tentando fazer exige AJAX, pois o ID do produto será definido pelo usuário utilizando o select, mas os produtos estão na sua aplicação/banco. Para isso você pode usar: 1 - Fetch, nativo do navegador: https://developer.mozilla.org/pt-BR/docs/Web/API/Fetch_API/Using_Fetch 2 - ou, se estiver usando jQuery, $.get: https://api.jquery.com/jquery.get/ Você apenas precisa criar um endereço na sua aplicação que receba um ID e retorne o valor. (Exemplo: example.com/valor-produto.php?id=32). Daí com AJAX (JS) você busca o valor informando o ID em resposta ao evento change do seu select. -
[Resolvido] quebra de linha do php para o javascript
Matheus Tavares respondeu ao tópico de joao b silva em PHP
@joao b silva, \n é o caractere que representa a quebra de linha. Basta inseri-lo dentro de sua string, assim: <?php for ($iFor = 0; $iFor <= count($Estrutura)-1; $iFor++): echo "var ".$Estrutura[$iFor]['VAR1']." = button.getAttribute('data-bs-".$Estrutura[$iFor]['CAMPO']."'); \n"; endfor; ?> E dá pra simplificar um pouquinho o código, dessa forma: <?php foreach ( $Estrutura as $campo ) printf( "var %s = button.getAttribute( 'data-bs-%s' );\n", $campo[ 'VAR1' ], $campo[ 'CAMPO' ], ); Daí se $Estrutura tiver esse conteúdo, por exemplo: <?php $Estrutura = [ [ 'VAR1' => 'teste', 'CAMPO' => 'meu-campo' ], [ 'VAR1' => 'minhaVar', 'CAMPO' => 'meu-outro-campo' ], ]; Teremos a seguinte saída: var teste = button.getAttribute( 'data-bs-meu-campo' ); var minhaVar = button.getAttribute( 'data-bs-meu-outro-campo' ); ==>> https://3v4l.org/EObSi#v8.2.1 -
Olá. Você não deveria poder reverter o hash da senha. Se você puder, isso significa que os dados não estão seguros o suficiente. 1 - Faça o backup de tudo para não perder dados (e de preferência criptografe o arquivo de backup com GPG ou similar). 2 - Substitua a senha de todos os usuários no banco pelo hash baseado no algoritmo que você vá usar. Sugiro bcrypt (não use md5, sha128, sha512 e variantes deles): https://www.php.net/manual/pt_BR/function.password-hash.php 3 - Passe a utilizar o algoritmo para gerar o hash no cadastro e o algoritmo de comparação na hora de fazer o login: https://www.php.net/manual/pt_BR/function.password-verify.php 4 - Como passo adicional de segurança, seria interessante invalidar as senhas dos usuários antigos e enviar um e-mail para redefinir a senha e impedindo o cadastro da mesma senha utilizada anteriormente. Opcional, mas interessante. Você literalmente só precisa das duas funções que citei acima e todos os usuários passarão a ter a senha armazenada de forma segura no seu sistema (isso ainda não significa que todo o sistema está seguro, estamos falando apenas de uma minúscula fração das preocupações).
-
[Resolvido] quebra de linha do php para o javascript
Matheus Tavares respondeu ao tópico de joao b silva em PHP
Hehe, vamos acalmar os ânimos, pessoal. @Frank K Hosaka, não acho que o @Omar~ tenha sido hostil com você, meu amigo, ele apenas explicou que você pode utilizar as aspas duplas no atributo se escapá-las. Acredito que seja construtivo, mas por vezes as palavras podem não soar amistosas, uma vez que é o nosso único recurso nesse recinto. Já aconteceu muito comigo por aqui também :) Eu particularmente faria a sugestão da concatenação, pois não gosto de escapar as aspas (na minha opinião fica um pouco bagunçado), mas isso é totalmente de gosto. <?php echo '<input type="' . $type . '" />'; Outra possibilidade seria utilizar Heredoc: https://www.php.net/manual/pt_BR/language.types.string.php#language.types.string.syntax.heredoc O bom do Heredoc é que potencialmente poderia resolver também a questão do autor do tópico, @joao b silva, pois ela preserva as quebras de linha. Veja esse exemplo do manual: <?php // Sem indentação echo <<<END a b c \n END; // 4 espaços de indentação echo <<<END a b c END; Saída: a b c a b c (embora eu ainda faria como o Omar fez: aspas duplas e \n para representar o caractere de quebra de linha) E Frank, sua forma de escrever o atributo sem aspas na verdade está correta. Antigamente (HTML 4 pra trás) a única forma correta era com aspas duplas (até onde eu me lembre pelo menos), mas no HTML moderno (a.k.a HTML 5), você pode: 1 - Escrever valores de atributos sem aspas, desde que não contenham espaços. 2 - Escrever valores de atributos com aspas duplas ou aspas simples. Fonte: https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 Por convenção, no entanto, geralmente adotamos as aspas duplas, mas isso é meramente uma questão de convenção e costumes. Um feliz 2023 pra todos vocês! =] -
Dois arquivos com a mesma sintaxe mas só um funciona - Erro 500
Matheus Tavares respondeu ao tópico de chinesedg em PHP
Erro 500 é um erro genérico respondido pelo servidor web. Como você instalou seu ambiente de desenvolvimento? Para não exibir os erros do PHP de forma apropriada, me parece estar mal configurado. Coloque isso na primeira linha do seu arquivo e veja se após executá-lo um arquivo de log é criado na pasta do seu projeto: error_reporting(E_ALL); ini_set('ignore_repeated_errors', TRUE); ini_set('display_errors', TRUE); ini_set('log_errors', TRUE); ini_set('error_log', 'errors.log'); Se puder alterar essas diretivas diretamente no PHP.INI, seria melhor. Se o trecho acima fizer efeito no seu servidor, você deverá ter um arquivo errors.log criado após executar seu código. Minha sugestão: 1 - Para o futuro, coloque na sua lista de estudos o Docker. Vai lhe permitir um melhor gerenciamento do seu ambiente. Para o momento, supondo que você esteja no Windows, sugiro que utilize o PHP/Mysql/Apache através de instaladores práticos como o xampp ou WampServer. Eles costumam trazer uma configuração mais pronta e de fácil manuseio. 2 - Não relacionado com o tópico, mas da forma como sua consulta está escrita no momento, está vulnerável a SQL injection. Recomendo que pesquise sobre prepared statements. É a forma correta de enviar instruções ao banco. Veja: https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection -
Implementação reCaptcha verificar PHP
Matheus Tavares respondeu ao tópico de Artur Bazzanella em PHP
Olá Artur, tudo bem? Seja bem-vindo! A aprovação dos posts só é necessária enquanto você possuir menos de 5 posts aprovados. Nesse momento você já possui 3. Essa foi uma medida que a administração do fórum aplicou após uma série de ataques de spam que o fórum sofreu alguns anos atrás. Infelizmente a aprovação é manual e às vezes pode demorar algumas horas, mas logo você já entra para a whitelist e não precisa mais passar por isso. Sobre a sua dúvida, encontrei esse conteúdo que deve lhe ajudar: https://www.youtube.com/watch?v=kG_3LZ2OgBI Abraço! -
Função genérica para atualizar chave em JSON duplicada usando o PHP
Matheus Tavares respondeu ao tópico de kania em PHP
Certo, acho que agora entendi melhor, mas infelizmente acredito que essa necessidade seja oriunda de um modelo de dados que poderia ser otimizado no futuro. Dito isso, elaborei uma pequena solução que espero que lhe ajude. Veja: 1 - Primeiro pegamos o caminho até o subarray desejado: function getSubArrayPath( $array, $wantedKey ) { $mode = RecursiveIteratorIterator::SELF_FIRST; $iterator = new RecursiveIteratorIterator( new RecursiveArrayIterator( $array ), $mode ); foreach ( $iterator as $key => $value ) if ( $wantedKey === $key ) { $keys[] = $key; for ( $i = $iterator->getDepth()-1; $i >= 0 ; --$i ) { $keys[] = $iterator->getSubIterator( $i )->key(); } return $keys; } return []; } Essa função, que faz uso das classes nativas RecursiveIteratorIterator e RecursiveArrayIterator tem a simples tarefa de receber um array (como o que o json_decode nos entregou) e dizer qual o caminho deve ser feito para chegarmos até a chave desejada (no caso PRODUCTION). Ela deve se comportar da seguinte maneira: $path = getSubArrayPath( $array, $key ); Retorna isso: Array ( [0] => PRODUCTION [1] => CREDITOR ) 2 - Agora que temos o caminho dinâmico que estava enraizado na nossa árvore de dados, podemos encontrar a referência do subarray que queremos manipular. Para isso criamos a seguinte função: function &getSubArrayRef( &$array, $key ) { $path = getSubArrayPath( $array, $key ); $ref =& $array; while ( $node = array_pop( $path ) ) $ref =& $ref[ $node ]; return $ref; } Essa função é simples: enviamos os dados e dizemos a chave que ela deve encontrar recursivamente. Ela vai internamente chamar a "getSubArrayPath()" para determinar o caminho e então retornar a referência do subarray que desejamos. Se reunirmos tudo teríamos esse código: <?php $json = '{"CREDITOR":{"TAX":{"TAC":0.7},"ENABLE":"true","PRODUCTION":{"email":"email@dominio.com","senha":"12457895","BASE_URL":"https://domino.com"},"HOMOLOGATION":{"email":"email@dominio.com","senha":"12457895","BASE_URL":"https://domino.com"},"TARGET_VALUES":5000000}}'; $data = json_decode( $json, true ); function getSubArrayPath( $array, $wantedKey ) { $mode = RecursiveIteratorIterator::SELF_FIRST; $iterator = new RecursiveIteratorIterator( new RecursiveArrayIterator( $array ), $mode ); foreach ( $iterator as $key => $value ) if ( $wantedKey === $key ) { $keys[] = $key; for ( $i = $iterator->getDepth()-1; $i >= 0 ; --$i ) { $keys[] = $iterator->getSubIterator( $i )->key(); } return $keys; } return []; } function &getSubArrayRef( &$array, $key ) { $path = getSubArrayPath( $array, $key ); $ref =& $array; while ( $node = array_pop( $path ) ) $ref =& $ref[ $node ]; return $ref; } $ref = &getSubArrayRef( $data, 'PRODUCTION' ); $ref[ 'email' ] = 'novo e-mail'; $ref[ 'senha' ] = 'nova senha'; $ref[ 'atributo_novo' ] = 'AAAAAAAAAA'; print_r( $data ); E o retorno disso seria esse: Array ( [CREDITOR] => Array ( [TAX] => Array ( [TAC] => 0.7 ) [ENABLE] => true [PRODUCTION] => Array ( [email] => novo e-mail [senha] => nova senha [BASE_URL] => https://domino.com [atributo_novo] => AAAAAAAAAA ) [HOMOLOGATION] => Array ( [email] => email@dominio.com [senha] => 12457895 [BASE_URL] => https://domino.com ) [TARGET_VALUES] => 5000000 ) ) Achei melhor dividir as responsabilidades e trazer as manipulações para fora da função, mas se você preferir fazer tudo numa chamada só, basta modificar o valor de $ref após o while da nossa função "getSubArrayRef()". Dessa forma você poderia enviar o valor desejado e já sair com o array modificado de dentro da função (como você estava fazendo antes). -
Função genérica para atualizar chave em JSON duplicada usando o PHP
Matheus Tavares respondeu ao tópico de kania em PHP
Olá amigo, tudo bem? Vou tentar ajudar você, mas não entendi alguns pontos: No seu exemplo houve alteração no e-mail apenas de PRODUCTION, mas não em HOMOLOGATION. É esse o comportamento esperado? Desculpe, mas não entendi muito bem seu objetivo: seria varrer todo o array pela chave 'email' (por exemplo) e substituir todas as ocorrências ou apenas a primeira encontrada (ou ainda outra coisa)? Apenas para ilustrar melhor, como você fez a chamada da sua função para que ela gerasse o resultado que você colou no seu post? Digo, quais parâmetros você passou pra dentro dela? Apenas uma observação: if ($keyUpdate == null) { return $result; } else { return $result; } É o mesmo que simplesmente: return $result; (Provavelmente foi apenas falta de atenção, mas não custa mencionar...) -
Olá @Caio Vargas, existem diversas formas para isso. A mais simples (e amadora) seria simplesmente oferecer o link automático do Google Translate. Exemplo iMasters original: https://imasters.com.br/ iMasters em inglês: https://imasters-com-br.translate.goog/?_x_tr_sl=pt&_x_tr_tl=en&_x_tr_hl=pt-BR&_x_tr_pto=wapp Para fazer isso, siga esse guia: https://www.dummies.com/article/technology/notable-websites/google/how-to-translate-a-website-with-google-translate-145071/ Minha sugestão é que você utilize a metodologia mais comum em todas as frameworks PHP por aí, que é essa: 1 - Crie uma função responsável pelas traduções (lang.php): <?php require_once 'lang/en.php'; function __( $string ) { if ( !array_key_exists( 'en', $_GET ) ) return $string; return $GLOBALS[ 'lang' ][ 'en' ][ $string ]; } 2 - Crie uma pasta chamada lang e coloque dentro um arquivo en.php com todas as traduções: <?php $GLOBALS[ 'lang' ][ 'en' ] = [ 'A' => 'THE', 'SEGUNDA' => 'SECOND', 'EDIÇÃO DO'=> 'EDITION OF', 'FORNECEDORES DE FUNDIÇÃO' => 'CASTING SUPPLIERS', 'Todos os direitos reservados' => 'All rights reserved', ]; 3 - Agora você simplesmente encapsula todas as frases, atributos e termos do seu site com a nossa função tradutora, enviando como argumento a frase original. Exemplo: <p><?= __( 'A' ) ?> <span class="word-contrast"><?= __( 'SEGUNDA' ) ?></span> <?= __( 'EDIÇÃO DO' ) ?></p> Ao acessar a página pelo link principal a função não vai tentar traduzir e vai simplesmente imprimir o que foi enviado para a função. Caso o acesso tenha sido em http://seusite.com/?en, a função vai tentar encontrar no dicionário do en.php a tradução apropriada para o que foi informado na chamada de cada função. Sacou? :)
-
Olá @Jack Oliveira, tudo bem? Pelo que vi, você está usando a API do ViaCep. O problema é que essa API não fornece a informação de latitude e longitude. Você pode: 1 - Trocar a API do ViaCep pelo CEPAberto (que fornece essa informação): https://cepaberto.com No entanto ela possui os seguintes limites: 2 - Ou consultar diretamente a API do Google Maps (que também vai impor limites de consulta). Se não me engano basta você criar uma conta no Google Dev Console, que vai te liberar uma API_KEY, e com isso você pode consultar dessa forma: https://maps.googleapis.com/maps/api/geocode/json?address=CEP&key=API_KEY
-
API express.js e MySQL x API express.js e MongoDB
Matheus Tavares respondeu ao tópico de Ferdz-Agencia-Digital em Javascript
Olá @Ferdz-Agencia-Digital. Seu tópico original era esse: https://forum.imasters.com.br/topic/588113-api-expressjs-e-mysql-x-api-expressjs-e-mongodb/ Infelizmente parece que deu algum problema com a sua conta anterior que estava impedindo você de fazer novos posts no fórum. Como não se trata apenas de performance, talvez seja interessante você prosseguir com a sua ideia, mas tudo depende do modelo de negócios da sua aplicação. Existe um ditado que diz: "Quando você possui apenas um martelo, tudo irá lhe parecer pregos". Quero dizer: você já possui uma aplicação em funcionamento e quer refazer ela para torná-la melhor, mais bem escrita, mais eficiente. Todo programador passa por isso, é natural. Um software nunca é finalizado, ele sempre estará em um processo constante de refatoração e reescrita. A questão é que você pode manter as linguagens que você já possui mais familiaridade, entende? Toda linguagem possui seus respectivos trade-offs e nenhuma é uma bala de prata. Todas terão benefícios e malefícios. O mesmo se aplica a bancos de dados e quaisquer outras ferramentas. Como não conheço seu modelo de negócios, não consigo opinar mais do que isso, mas espero ter ajudado. Se sobrar alguma dúvida, é só postar. -
API express.js e MySQL x API express.js e MongoDB
Matheus Tavares respondeu ao tópico de FerdzFernando em Javascript
Olá @FerdzFernando, agora vi sua atualização no post. Por intuição, acredito que provavelmente a sua iniciativa de fazer uma mudança tão grande decorre de problemas de performance, mas a pergunta que fica é: existe mesmo essa necessidade? Eu iria sugerir antes fazer uma boa análise para ver se não faz mais sentido tentar consertar os gargalos ao invés de recriar a sua aplicação. Caso não seja apenas performance e o código seja muito antigo e você quer modernizar ele, tudo bem, faz parte, mas respondendo a sua pergunta: sim, haverá muito retrabalho, pois você não está apenas trocando o banco, mas toda a stack, linguagens, plataformas. Não há como contornar isso. -
API express.js e MySQL x API express.js e MongoDB
Matheus Tavares respondeu ao tópico de FerdzFernando em Javascript
Olá @FerdzFernando. Se houvesse boas ferramentas para abstrair o MongoDB e o MySQL simultaneamente e alternar entre eles com Adapters você provavelmente não teria tanto trabalho, mas até onde vi nem o Objection.js ou o Sequelize, que são ORMs muito populares no Node.js oferecem essa opção. Na minha opinião essa migração não faz sentido: ou você começa com o MySQL ou vai para o MongoDB, mas já no início do desenvolvimento. Qual seu modelo de negócio? Que tipo de dados você pretende abrigar no banco? -
A coluna nome deve possuir, lá no seu banco de dados, um índice UNIQUE, exigindo assim que os dados da coluna sejam únicos. Você pode criar o índice na hora de criar a tabela (CREATE TABLE) ou adicionar ele depois com ALTER TABLE. Veja exemplos: https://www.w3schools.com/sql/sql_unique.asp A correta modelagem do banco é essencial (como dito acima), mas se quiser prover uma camada adicional de verificação e exibição de erros a lógica seria essa: 1 - Faça um SELECT com WHERE nome = $nome_desejado. 2 - Se encontrar o registro no banco, exiba um erro e interrompa, pois já existe. 3 - Se não encontrou, prossiga normalmente com o INSERT.
-
Olá @Biel.. Basta você filtrar sua consulta. Seria algo nesse sentido: ... WHERE LENGTH( roupas ) >= 6
-
Erro ao migrar código de php 5.6 para pdo
Matheus Tavares respondeu ao tópico de Marcones Borges em PHP
Show de bola, fico feliz que tenha dado certo. =D -
css Colocar botão flutuante no lado direito.
Matheus Tavares respondeu ao tópico de 4Unknow em Desenvolvimento frontend
Olá! Teste assim: #BtnWrapper { position: fixed; /* Posicionamento absoluto da div na viewport */ right: 15px; /* Coloca à direita, e então dá 15px de margem */ width: 70px; /* Não precisamos de um Wrapper maior do que 70px */ height: 100%; /* Altura total para centralizarmos verticalmente */ display: flex; /* Ativamos o display flex para alinhamento */ align-items: center; /* Centro na vertical */ justify-content: right; /* Direita na horizontal */ } #Btn { border-radius: 10%; /* Arredondamos as bordas */ transform: rotate(90deg); /* Rotacionamos 90 graus */ height: 2rem; /* Altura */ border: 2px solid #999; /* Borda */ background: #ccc; /* Bg */ } <div id="BtnWrapper"> <button id="Btn">Suporte</button> </div>- 2 respostas
-
- botão
- botãoflutuante
- (e mais 3 )
-
Erro ao migrar código de php 5.6 para pdo
Matheus Tavares respondeu ao tópico de Marcones Borges em PHP
Então @Marcones Borges, o primeiro ponto é que você esqueceu dos parâmetros da função nessa nova versão: $retorna = function ( $igreja_nome=null, $id=null ) use ( $conexao ) O segundo ponto é que nesse exemplo você teria a possibilidade de fazer um loop OU retornar um único registro se informar o $id na função, e por conta dessa flexibilidade o uso do conceito de $qtd fica um pouco mais complicado. Diante do modelo de função que você postou, eu iria sugerir usar o fetchAll no lugar, como expliquei no meu post anterior. O fetchAll não lida bem quando você precisa recuperar MUITOS registros (pois ele armazena todos em memória ao invés de utilizar ponteiros para nevegar de um para o outro como nos outros casos), mas de todos os métodos ele é o mais prático. E por fim, não há necessidade de você formatar a string para JSON na mão, pois o PHP faz isso para você. Não pretendia fazer a função completa novamente, pois acredito que isso atrapalha o processo de aprendizado, mas são poucas linhas de código, então vamos lá: $retorna = function ( $igreja_nome = NULL, $id = NULL ) use ( $conexao ) { $id = (int)$id; // Como é só o celular que você precisa, limitamos a consulta // Para exibir o "Não encontrado", fiz um pequeno IF no select // Esse IF poderia ser feito via PHP, mas aqui parece ser mais fácil $sql = 'SELECT IF( `celular`, `celular`, "Nao encontrado" ) `celular` FROM membros'; // Não precisa do != null. $id é um inteiro e quando aplicado em um IF, 0=false, resto=true if ( $id ) $sql .= " WHERE `id` = {$id};"; $result = $conexao->query($sql); return json_encode( $result->fetchAll( PDO::FETCH_ASSOC ) ); }; // Não esqueça: Ao contrário de uma function normal, // nessa aqui você PRECISA colocar o ponto-e-vírgula // Isso pq essa está associada a uma variável, // e no final de todas as vars vem o ponto-e-vírgula. Outro detalhe é que $igreja_nome não está sendo utilizada na função. Alguns ajustes ainda podem ser feitos, mas a base da função seria essa aí.