Jump to content

Gabriel Heming

Moderadores
  • Content count

    4179
  • Joined

  • Last visited

  • Days Won

    90

Everything posted by Gabriel Heming

  1. Gabriel Heming

    Condição apresentando erro buscando dados no bd

    Você não está concatenando corretamente. Para concatenar, você deve "fechar" a string e usar ponto. Além do mais, não é necessário usar a tag PHP: echo 'string '.$variavel.' mais string';
  2. Gabriel Heming

    Evitar posts duplicados

    o reCaptcha utiliza análise de comportamento para identificar se o usuário é um bot ou não. O "Google" em si, já sabe se é um usuário"humano" acessando um site apenas pelo modo que você movimenta o mouse. O "esquema" de selecionar imagens é muito mais para ajudar o deep learning do que garantir que não é um bot. De qualquer forma, é indicado que o reCaptcha seja adicionado em todo o site para que o script possa avaliar o comportamento do usuário em todo o website. Após, você recebe uma análise de risco, e cabe a você aceitar ou não. Em geral, é seguro. Além do mais, é mais garantido que um bot consiga se passar por um humano do que um humano por um bot.
  3. Gabriel Heming

    Check box com php e msqli

    Parece que o problema está no filtro, remova os colchetes e informe que é um array. $problema = filter_input(INPUT_POST, 'checkArr', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY); ou, dependendo da forma que você quiser tratar, pode forçar que o resultado seja um array. $problema = filter_input(INPUT_POST, 'checkArr', FILTER_SANITIZE_STRING, FILTER_FORCE_ARRAY);
  4. Gabriel Heming

    PHP Contagem regressiva com base na data do banco de dados

    Apesar de você estar imprimindo a data no javascript, não está tratando-a corretamente: var valueDate = '<?=$DateGET?>'; Adicione os apóstrofos, para que o javascript entenda o resultado como uma string. O que está ocorrendo, é que o código javascript está sendo interpretado da seguinte maneira: var valueData = 07/10/2020 11:57 am; Quando o correto é: var valueData = '07/10/2020 11:57 am'; Outro ponto é o formato de data, eu escrevi este artigo abaixo há um tempo atrás: https://gabrielheming.github.io/development/javascript/2018/10/04/php-send-datetime-to-javascript.html Ou até mais compacto: https://stackoverflow.com/a/40919161/1628790
  5. Gabriel Heming

    Exemplo de CIOT da e-frete em c#

    Um web service SOAP é sempre apenas uma interface. A melhor forma de entender como ele funciona, é utilizar o software SoapUI antes de qualquer desenvolvimento. Se você estiver utilizando o Visual Studio IDE (não o visual studio code), o que você deve fazer é adicionar o endereço do Web Service, como uma referência ao projeto. Assim, o Visual Studio irá gerar todas as classes necessárias para trabalhar com o serviço. Entretanto, esse serviço parecem possuir apenas login e logout. É bem provável que após a autenticação você poderá acessar outros métodos e/ou outros serviços. No link abaixo há um bom passa-a-passo de como adicionar como referência: https://stackoverflow.com/a/41496861/1628790
  6. Gabriel Heming

    Erro ao conectar no banco de dados após publicar no IIS

    Você está utilizando o Entity Framework Core, ou alguma outro framework? No Startup.cs, você precisa utilizar a configuração do appsettings.json. A connection string deve ser adicionada explicitamente na conexão. Seu Startup.cs vai ficar mais ou menos assim: using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Mvc.ApplicationModels; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; public class Startup { private readonly IConfiguration configuration; public Startup(IConfiguration configuration) { this.configuration = configuration; } public void ConfigureServices(IServiceCollection services) { services.AddDbContextPool<AppDbContext>(options => { options.UseSqlServer(configuration.GetConnectionString("DefaultConnection")); }); } } Alguns detalhes: O código acima é para .NET Core usando EF Core; AppDbContext é a classe de contexto (especialização de Microsoft.EntityFrameworkCore.DbContext); É necessária a dependência do package Microsoft.EntityFrameworkCore.SqlServer. O ponto central das configurations strings, é que você poderá recuperar elas utilizando o diretamente o código abaixo: configuration.GetConnectionString("DefaultConnection") Aonde DefaultConnection é a chave que você definiu, no seu caso, pode ser uma das duas chaves que você definiu: configuration.GetConnectionString("HoleriteContext") ou configuration.GetConnectionString("prjHoleriteContextConnection")
  7. Gabriel Heming

    Substituir array por array com preg_replace

    Nenhuma pergunta é burra. Indiferente com a escolha, você terá resultados bem similares... é um problema de escopo. A palavra que você procura pode estar em diferentes locais. Início/meio/fim de frase; Antes de pontuação (. , ! ? : ;); Entre apóstrofos. etc... O mais fácil para resolver isso, seria utilizar uma marcação simples, tal qual Back in [a]Black[/a] E utilizar as marcações como delimitadores. De outra forma, seria pegar todas as situações que podem ocorrer, e tratar cada uma independentemente. Você pode começar com essa expressão regular e ir ampliando ela: ((?!\w)|[\t\n\r ])(?<word>black)(?!\w) Ela não está completa, não cobre todas as possibilidade, mas cobre a maioria delas...
  8. Gabriel Heming

    Select dentro de outro Select

    Você não precisa das duas consultas. A primeira consulta é o suficiente. // código exatamente igual até essa parte aqui $resultado->execute(); //se a consulta não localizar nada, o retorno será FALSE if ($result = $resultado->fetch(PDO::FETCH_ASSOC)) { //aqui você tomará as ações caso o usuário for localizado //agora basta usar o resultado e testar if ($result['nivel'] == 'staff') { // caso for staff } elseif ($result['nivel'] == 'operacao') { // caso for operacao } } else { //aqui será executado caso o usuário não exista então } Eu imagino que seus códigos sejam para estudos, o que é muito bom por sinal. Segue um link para você fazer um login seguro para o seu site: https://forum.imasters.com.br/topic/557686-trabalhando-com-criptografia-de-login-com-md5/?do=findComment&amp;comment=2225560
  9. É bom conhecer o funcionamento do método fetch para enteder o que ele está fazendo: https://www.php.net/manual/en/pdostatement.fetch.php O método fetch tem vários parâmetros, mas o mais importante é nesse caso é o primeiro. Que pode ser um dos seguinte: PDO::FETCH_ASSOC; PDO::FETCH_BOTH; PDO::FETCH_BOUND; PDO::FETCH_CLASS; PDO::FETCH_INTO; PDO::FETCH_LAZY; PDO::FETCH_NAMED; PDO::FETCH_NUM; PDO::FETCH_OBJ; PDO::FETCH_PROPS_LATE. Não precisa se preocupar com todos, apenas com 3: PDO::FETCH_ASSOC; PDO::FETCH_BOTH; PDO::FETCH_NUM. PDO::FETCH_ASSOC retornará um array associativo, então, com a sua consulta: $sql="SELECT nome, password, nivel FROM login WHERE nome= :nome AND password= :password"; Eu posso acessar os valores de forma associativa: $result = $resultado->fetch(PDO::FETCH_ASSOC); echo $result['nome']; echo $result['password']; echo $result['nivel']; Se você quiser salvar em uma variável, basta fazer o seguinte: $nome = $result['nome']; $password = $result['password']; $nivel = $result['nivel']; Já PDO::FETCH_NUM retornará um array indexado (numérico) na ordem que são retornados pela consulta, então, com a sua consulta, o resultado seria o seguinte: $result = $resultado->fetch(PDO::FETCH_NUM); echo $result[0]; //nome echo $result[1]; //password echo $result[2]; //nivel Já o PDO::FETCH_BOTH é uma combinação das duas formas, ou seja, você pode acessar os dados da maneira que quiser (conforme os exemplos acima).
  10. Gabriel Heming

    Servidor processa 1 requisição de cada vez

    Seu problema é a sessão de usuário. O PHP só permite uma requisição por sessão. Enquanto uma sessão não for finalizada a outra fica em espera. Se o seu processo não faz uso de objetos da sessão, utilize session_write_close o "mais cedo" possível, para que outros processos possam ser iniciados em paralelo.
  11. Gabriel Heming

    Como inserir vários registros usando prepare PDO

    $query = "INSERT INTO cicero(nome, sobrenome, email , telefone, cpf) VALUES (? , ? , ? , ? , ?)"; $insert = $conn->prepare($query); foreach ($_POST as $key => $row) { $insert->bindValue(1 , $row['nome']); $insert->bindValue(2 , $row['sobrenome']); $insert->bindValue(3 , $row['email']); $insert->bindValue(4 , $row['telefone']); $insert->bindValue(5 , $row['cpf']); $insert->execute(); } Você não precisa validar o retorno do método execute se estiver utilizando exceções. Pra isso, basta adicionar o atributo abaixo: $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); O resto você faz via tratamento de exceções.
  12. Gabriel Heming

    Cadastrar data Mysql

    Isso deve calcular corretamente as 36 parcelas. <?php //dia 15 do mês corrente $start = DateTime::createFromFormat('d' , '15'); //intervalo de 1 mês $interval = new DateInterval('P1M'); //Valida se o dia 15 do mês corrente já não passou if ($start < (new DateTime())) { //adiciona 1 mês caso seja pro dia 15 do mês que vem $start->add($interval); } //Calcula os períodos, data inicial + 35 ocorrências foreach(new DatePeriod($start , $interval , 35) as $key => $date) { $i = $key +1; echo "{$i} -> {$date->format('d/m/Y')}\n"; } Pra entender um pouco mais: https://forum.imasters.com.br/topic/550659-resolvido-erro-em-dateperiod-php-encontra-2-meses-ao-invés-de-3/ https://forum.imasters.com.br/topic/535853-como-pegar-a-diferença-entre-datas/?do=findComment&amp;comment=2139989
  13. Gabriel Heming

    Trocar tabela por variável

    Eu imagino que você irá fazer uma função para isso. Em primeiro lugar, mysql_* functions não devem ser usadas há um bom tempo. Utilize no lugar mysqli. Uma função assim resolveria seu problema: function query($table) { $table = "`".str_replace("`" , "``" , $table)."`"; $query = "SELECT * FROM {$table}"; /** restante do código **/ } O trecho de código abaixo, é o suficiente para previnir problemas de SQL injection, quando o valor a ser atribuído é o nome da tabela. $table = "`".str_replace("`" , "``" , $table)."`";
  14. Gabriel Heming

    Problemas ao Acessar webservice cadsus atraves do php

    Qual o erro que ocorre? Poderia fazer usando cURL, mas ai já é reinventar a roda. Vamos resolver o erro para que você possa usar a biblioteca recomendada.
  15. Gabriel Heming

    Comparando Strings em PHP!

    Qual é o código do arquivo abaixo? bd/autenticacao.php O que é possível de verificar, é que você está tentando passar um usuário de uma página para outra e recuperá-lo. Entretanto, não está fazendo da forma correta. O redirecionamento abaixo não faz sentido nenhum: header("location:../index.php?erro=3"); Uma vez que você salva o usuário na sessão, deveria usar os dados da sessão: <?php if ($_SESSION['logado'] == 'sim') { echo 'usuário está logado'; } Você pode salvar o ID do usuário na sessão também e usuar quando necessário: //exemplo $_SESSION['user']['id'] = $row->id;
  16. Gabriel Heming

    Função fopen() fica rindo de mim e não funciona!

    O primeiro warning é o que gera os demais problemas. Basicamente o script não localiza o arquivo. Valide o path que está sendo utilizado. Lembrando que Linux é case sensitive.
  17. Gabriel Heming

    Função fopen() fica rindo de mim e não funciona!

    Você deve dar permissão ao usuário apache de leitura e escrita na pasta do seu projeto. Quando você executa vai terminal, o usuário que está executando é o seu. Via browser, é o servidor, que é apache.
  18. Gabriel Heming

    Problemas ao Acessar webservice cadsus atraves do php

    Já testou consumir o WS via SoapUI? Utilize a biblioteca SOAP do PHP e não nusoap.
  19. Gabriel Heming

    Comparando Strings em PHP!

    Qual é o valor que está usando como entrada? A variável $_GET['erro'] está correta? Não deveria ser algo como $_GET['id']?. Faça o seguinte, adicione o seguinte código no início do seu script, e nos mostre o resultado: var_dump($_GET); Além disso, nos informe os dados da tabela do banco de dados, para podermos avaliar o seu código.
  20. Gabriel Heming

    Problema ao passar valor da api dos correios para api do pagseguro

    Parece que você está usando uma forma bem antiga de checkout. Eu recomendo utilizar esta: https://dev.pagseguro.uol.com.br/docs/bibliotecas-php-checkout-redirecionamento
  21. Gabriel Heming

    PHP buscar dados em outra aba do navegador

    Não é possível. Em primeiro lugar, o PHP roda no servidor. O que você recebe no navegador é tudo o que o PHP já processou e enviou como resultado. A linguagem que roda no browser é JavaScript. Em segundo lugar, mesmo com JavaScript, não é possível acessar o conteúdo de outras abas, isso é uma questão de segurança. Se for o mesmo sistema, faça um script para utilizar um cadastro pré-existente e criar o novo cadastro. Se forem sistemas diferentes, bom, faça um arquivo de exportação, para ser importado no outro sistema. No segundo cenário, também é possível usar uma API e a funcionalidade seria semelhante a primeira.
  22. Gabriel Heming

    Como inserir dados e uma tabela com Foreign Key no PHP/MYSQL

    Veja se o post abaixo lhe ajuda; https://forum.imasters.com.br/topic/523524-multiplos-insertsrollback-com-pdo/?do=findComment&amp;comment=2083720
  23. Gabriel Heming

    Como Ler / "Layoutizar" um retorno de Json no PHP

    O que você quer dizer com "layoutizar"? Nos de um exemplo.
  24. Gabriel Heming

    Design Pattern Builder - Qual utilidade real?!

    A implementação até está correta, mas não tem sentido nenhum. O primeiro ponto a entender, é o que realmente é um Design Pattern. A definição mais utiliza é a seguinte: os patterns são soluções reutilizáveis para problemas recorrentes. Pense no pattern como um molde para resolver um problema em específico, mas, mesmo sendo um molde, ele por si só não se utiliza apenas na base do copy 'n paste. Existe toda uma modelagem/abordagem que deve ser realizada. No caso do builder, ele serve para separar a criação de um objeto complexo da sua representação. Além disso, poder alterar a representação sem alterar a sua construção. O uso mais comum que eu vejo do padrão builder é quando você tem uma estrutura de dados e precisa ser representada em diferentes tipos de meios de impressão. Imagine um site de currículos. Um currículo é uma estrutura complexa de informação sobre a vida profissional de uma pessoa. Dentro deste site, você faz o cadastro do seu currículo e todas as informações são armazenadas no banco de dados. Até aqui, nada de anormal. Após o currículo preenchido, existem 4 opções de output (representação) do seu currículo: PDF; .DOC/.DOCX; HTML; Texto puro. Todos sabemos que cada tipo de output (representação) exige uma implementação específica. Entretanto, os dados a serem utilizados (construção) para a representação, são os mesmos. Esse cenário permite a implementação do padrão Builder. Neste cenário, você implementará um único Director que será responsável pela construção do objeto complexo e, para cada tipo de output/representação, um Builder específico (PDFBuilder, MSWordBuilder, HTMLBuilder, TextBuilder, etc...). Dessa forma, você apenas alterará o builder sem alteração a construção do objeto.
  25. Gabriel Heming

    [Resolvido] Array em PHP 7

    Sim, a sintaxe está correta.
×

Important Information

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