Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 07/15/09 in all areas

  1. 8 points
    Seu problema é realmente com o PHP ?! O objetivo deste pequeno artigo é orientar você na hora da criação de um novo tópico para descrever o seu problema, afim de ajudar definir qual área seria adequada para tratativa do mesmo, ajudando assim a organização do Fórum e consequentemente um melhor entendimento. O fórum de PHP é voltado exclusivamente à linguagem de Programação PHP , por este motivo, antes de iniciar um novo tópico com sua dúvida, certifique-se de que seu problema realmente está relacionado com PHP e não com outro tipo de linguagem ou tecnologia. Vários membros criam tópicos relatando estar com problemas, e que não sabe se esta é a área correta, e, com uma frequência muito comum, geralmente o problema não está relacionado com o PHP, e sim com JavaScript/Ajax ou HTML/CSS. Por que isso ocorre ? Geralmente você está desenvolvendo uma aplicação que envolve HTML, CSS, JavaScript, PHP, MySQL quando se depara com alguma falha/bug, e simplesmente por estar envolvendo PHP, e pelo fórum de PHP ter um maior tráfego, acabam generalizando e postando aqui o problema. Vou exemplificar algumas situações que ocorrem: Nos casos acima, é notório que o problema é com MySQL e não com o PHP, principalmente quando recebe na tela um erro de sintaxe SQL. A área correta para tratativa de sua dúvida é MySQL: Banco de Dados MySQL Entendam que PHP é uma linguagem de programação Back-End; Todo e qualquer problema com: Alinhamento de Tabela, Alinhamento de Div's, Alinhamento de Menu, e demais problemas desta ordem, fazem parte do Front-End e são relacionados a HTML/CSS. A área correta para tratativa de sua dúvida é: HTML e CSS É muito comum membros postarem esse tipo de dúvida, achando que o problema ou solução estão no PHP. Requisições sem "carregamento da página" assim por dizer, chamada "requisição assíncrona", na maioria dos casos são efetuadas com AJAX/jQuery e, por estar trabalhando em conjunto com o PHP, você acaba achando que o problema é com PHP. O mesmo ocorre com o MODAL, em que sua ação para abrir, depende de uma função javascript. Um simples erro ou uma biblioteca não inclusa pode ocasionar o problema. A área correta para tratativa de sua dúvida é: Javascript O mesmo ocorre com as demais áreas, procurem identificar o fórum coreto para tratativa do problema, assim nos ajuda a organizar e promover uma gama de conteúdo mais seletivo, específico de cada área. Ainda na oportunidade, recomendamos fortemente a leitura do tópico: ATENÇÃO: Orientações e Regras do Fórum de PHP Atenciosamente, equipe iMasters.
  2. 4 points
    PHP não se aprende do dia pra noite. É preciso muuuuita paciência, é preciso DORMIR, sim, DORMIR, descansar a mente é primordial para o aprendizado. Tudo que você assiste e ler você TEM que por em prática, nada de guardar na mente, só se aprende praticando e criando exemplos próprios. É preciso também estudar o material correto, boas práticas, comece pelo manual do PHP, dê uma olhada também nas PSR's que são definições de boas práticas de programação. http://www.php-fig.org/psr/
  3. 4 points
    Desenvolveu o que? - Mockup? Como você pode ter certeza disso, Twitter até poucos anos atrás não tinha um modelo de faturamento formatado, passava por rounds de investimento, mas não gerava lucros $$$. Facebook a mesma coisa, demorou para encontrar o modelo correto. Na cabeça do Empreendedor tudo é inovador e viral, mas quem dita a regra, se é ou não é, é o mercado, nenhum plano sobrevive ao campo de batalha. Então diante dessa analise, se for com esse papo em uma banca de investimento, será automaticamente descartado. Vejo que não tem noções sobre lançamentos de produtos, programadores não lançam projetos, simplesmente executam a tarefa de desenvolver os requisitos, salve uns 20% e olha lhe la que tem noções de marketing. Monte um projeto OpenSource, mas fácil achar pessoas para contribuir, do que falar que não tem grana e esperar que algum maluco trabalhe de graça pra você. Faça o dever de casa primeiro, aqui é um fórum de PHP, e não uma rede social de investidores anjos. Mas mude este discurso e, quem sabe, apresente outro produto, pois redes sociais tem aos montes, sem falar em scripts já prontos de tudo quanto é tipo para redes sociais. Pois na banca irão lhe falar a mesma, que eu disse! Se já não me convenceu, imagine investidores que querem sangue nos olhos ao invés de papo furado.
  4. 4 points
    Para acrescentar: $numeros = [1,2,3,4,5]; $penultimoEantePenultimo = array_slice($numeros, -3, -1); # Retornara um novo array, com as posições desejadas print_r($penultimoEantePenultimo); /* Array ( [0] => 3 [1] => 4 ) */ A função end() faz o ponteiro interno de um array apontar para o seu último elemento, dependendo do contexto, esse é um comportanto desejável end($numeros); echo prev($numeros); # exibira 4 echo prev($numeros); # exibira 3 http://php.net/manual/pt_BR/function.array-slice.php http://php.net/manual/pt_BR/function.end.php http://php.net/manual/pt_BR/function.prev.php
  5. 4 points
    Primeiro, MD5 foi criado para ser uma criptografia do tipo hash (unidirecional) para criar um fingerprint (impressão digital) de um conjunto de caracteres/bytes (certificados digitais, por exemplo). Entretanto, foram encontradas diversas falhas nele, que, hoje em dia, ele não é mais utilizado para o propósito original. Tem vários materiais sobre a (in)segurança do MD5. https://en.wikipedia.org/wiki/MD5#Security https://security.stackexchange.com/questions/19906/is-md5-considered-insecure https://security.stackexchange.com/questions/52461/how-weak-is-md5-as-a-password-hashing-function Não ser retornável, não quer dizer impossível de ser quebrado. O pensamento "linear" de "quebrar" é possuir um hash e retorná-lo ao estado de origem. Entretanto, não é isso que ocorre. O MD5 é tão rápido de ser gerado, que pode-se gerar biliões de combinações em pouco espaço de tempo. Você não precisa saber o HASH original, só precisa encontrar um que, quando gerado, seja igual ao outro. Lembrando que MD5 gera colisões, ou seja, conjuntos de caracteres diferentes podem gerar hashs iguais. https://en.wikipedia.org/wiki/MD5#Collision_vulnerabilities https://en.wikipedia.org/wiki/Collision_attack A forma mais conhecida de "reverter" um MD5 é através de uma rainbow table. Veja por si só no link abaixo https://crackstation.net/ Ou pesquise no google sobre "MD5 Reverse". No link abaixo você pode ler um pouco sobre como funciona o password_hash: https://pt.stackoverflow.com/questions/194929/password-hash-php/194950#194950 Fale isso para o CERT... http://www.kb.cert.org/vuls/id/836068 Uma das primeiras falhas do MD5 foi encontrada em 1996: ftp://ftp.rsasecurity.com/pub/cryptobytes/crypto2n2.pdf Como pode dizer que é seguro?
  6. 4 points
    No decorrer da minha experiência como dev, eu vi muitas decisões ruins, algumas delas eu mesmo sugeri. Mas, a que mais me impressionava era quanto ao projeto base e suas customizações. Pensando apenas em code (sem entrar em banco de dados), eu utilizaria uma mescla entre o GIT e o composer. Branch's e divisões No GIT: Dividir as branchs em 5 tipos (serão mais branchs): master, cutom-*, homologacao-*, dev-* e hotfix-*; A branch master será única e exclusivamente para o código base não customizado; A branch custom-*, será específica para o código homologado do projeto customizado para uma empresa (custom-empresa01, custom-empresa02, etc..); A branch homologacao-* será específica para homologar a transição do código de dev para prod, aonde testes de alto nível são aplicados. Cada branch de produção (master/custom) terá sua respectiva branch de homologação (homologacao-master, homologacao-custom-empresa01, etc); A branch dev-* é aonde é realizado o desenvolvimento, ela são livres, aonde o "desenvolvedor não conhece as leis" ou "o filho chora e mãe não vê", etc.. Você deve ter quantas forem necessárias, para cada implementação, cada GAP, cada moficação (dev-master-task-2784, dev-custom-empresa01-task-3500, etc...); A branch de hotfix-* é aquela correção rápida, aquele conflito do merge entre uma entre o código base e uma customização ou que está implicando em parada geral do sistema (aquele bug ou erro de português que passou pela homologação/testes), que não necessariamente deve passar por todos os passos de desenvolvimento/homologação/produção. O que nós normalmente chamamos de "codificar em prod"... Sim, isso existe na realidade de todos já fizeram. Essa é a definição da árvore do projeto. Os caminhos a serem seguidos: dev-master-* <--> homologacao-master <--> master --> homologacao-custom-* <--> custom-(todas as empresas); dev-custom-* <--> homologacao-custom-* <--> custom-*; hotfix-* <--> para aonde for necessário. Perceba que no fluxo, uma custom nunca deve levar o seu código para a master. Apenas a master pode levar códigos para a custom. Sempre utilizando a branch de homologação da custom. Fork Uma característica bem interessante dos serviços de controle de versionamento (bitbucket, github, etc...) é a possibilidade de criar um fork de um projeto. O seu projeto CORE será o repositório principal e, para cada cliente, você criará um novo fork. Logo, você terá o projeto master e os forks para cada cliente (master -> cliente-01 -> cliente-02, etc...). A divisão entre branchs, deve ser a mesma exemplificada exclusiva para a master. Ou seja, 4 tipos: master, homologação, dev-* e hotfix-*). A nomenclatura das branchs (mster, homologacao, dev-* e hotfix-*) segue a mesma definição anteriormente explicada. A parte de fluxo será o que está exemplificado abaixo: dev-* <--> homologacao <--> master; hotfix-* <--> para onde for necessário. O cuidado, vem na hora de sincronizar os forks. O BitBucket, por exemplo, lhe sugere um fork automático entre as branchs masters de cada repositório. Entretanto, para um melhor controle e validação do novo código, a sincronização deve ocorrer entre a branch master, do projeto master, para a branch homologacao do projeto customizado. Ou seja: Master:master --> Cliente-01:homologacao; Dessa forma, você pode homologar, corrigir e enviar para a produção (master) da customização de clientes. No BitBucket, para realizar tal feito, você pode ir no menu compare, escolha a branch da qual está o código (parte de baixo) e a branch na qual você quer enviar o novo código (branch de cima). Compare as diferenças e, no canto direito superior, o BitBucket lhe exibirá o botão merge. Feito o merge, o processo é exatamente o mesmo que utilizando branchs. Módulos Aqui é que entra a questão de módulos. Caso você implemente partes do sistema como módulos, você pode usar tanto o git-submodule ou o composer. Com ambos você poderá utilizar repositórios privados para baixar as suas dependências. Para cada módulo, você deverá ter o repositório separado e, caso o repositório separado seja customizado, poderá seguir a estruturação acima mencionada. Entretanto, no caso de módulos personalizados, acredito que com o git submodule não seja possível separar entre versões (branch/tags) específicas para cada projeto/branch. No caso do composer é possível, pois, cada branch/projeto, terá seu próprio composer que pode ser personalizado. Banco de dados Nesse caso, vai depender muito do que você irá utilizar para gerenciar o SGBD. Eu utilizei por muito tempo o MySQL WorkBench. Ele funciona perfeitamente quando o assunto é modelagem e sincronização. Entretanto, o formato de arquivo gerado por ele não é aberto e, em consequência, não pode ser versionado. Logo, quando uma tabela precisar ser diferente em algum projeto, você terá dois arquivos distintos. Há, também, a possibilidade de tratar tudo na forma de SQL scripts. Mas ficaria sem uma ferramenta de apoio. Talvez alguém conheça alguma ferramenta melhor para a situação. A contra-partida Quando você separa pequenas partes de um projeto em módulos e os adiciona como dependências do seu projeto, você pode encontrar uma situação denominada Dependency Hell. Esse termo também pode ser utilizado para a manutenção do código entre as branchs, pois, todas as suas customizações necessitam estarem atualizadas com a branch master. E se você almeja 30 empresas, pense que uma mudança no CORE precisa ser homologada para as 30 empresas. Considerações Sendo dicas como elas são, apenas dicas, você pode considerar demasiada estrutura e simplista ou exagerada demais e partir para uma abordagem meio termo ou mais robusta. Tudo dependerá de onde você está e para onde gostaria de chegar. Existem outras ferramentas e abordagens que pode lhe ajudar. Uma delas seria a integração contínua, o qual incluí N outras ferramentas de auxílio. Update Um sistema que gerencia suas próprias customizações acaba sendo limitado a campos e novas informações. Eu, particularmente, não gosto muito da prática. Entretanto, para evitar o problema com o SGBD, pode-se utilizar tabelas de cadastros par atributo-valor para cruzar informações dinâmicas e reduzir a necessidade de criar novas colunas e tabelas. Mas, é uma questão bem limitada. Update 2 Com a nova parte de forks (que eu não havia me lembrado anteriormente), seria a sugestão mais indicada. Pois, se você possuir uma equipe de desenvolvimento específica para cada cliente, poderá gerenciar muito melhor as permissões e acessos. O controle é bem superior a de um repositório apenas.
  7. 3 points
    Não há uma resposta ou abordagem correta pra isso, nem manual passa à passo. E a solução só vem com a prática. Cada analista pode avaliar de uma forma diferente, uma mais voltada para o negócio e outra para a parte técnica. Por exemplo, aonde eu trabalho, são vários analistas de negócio e de sistemas, e cada um poderá uma abordagem e conclusão diferente para uma mesma situação. A UML, é apenas para documentação antes de iniciar o desenvolvimento de um sistema. Como analista de sistemas, você deve enteder que o oque o cliente possui é um problema e você precisa resolvê-lo através de uma tecnologia. E essa é a parte difícil, as vezes, nem o cliente sabe qual o problema que ele quer resolver, apenas que quer um sistema. Neste ponto, tudo é baseado através de "histórias". É uma definição bem abrangente, mas é o que normalmente ocorre. E, ainda por cima, vai além: Agora que, como analista, deve enteder o problema que ele quer resolver com o sistema. E, resumidamente, ele poderá (ou não) responder: Disso, você pode resumir para o que Seu Gerosvaldo realmente precisa: E, além disso, uma interface amigável, pois, ele possui pouco contato com tecnologias. Quando você tiver a par dessa informação, pode-se utilizar do diagrama de casos de uso para mapear o que o sistema deve fazer e quais são os seus limites. Há, também, a questão de requisitos funcionais e não-funcionais e fluxo de processo (workflow). Mais afundo que isso, fica para uma parte da análise mais técnica. Com essas informações, é preciso propor algo que esteja de acordo com o que o cliente necessita e pode pagar. Pode ser mais vantagem adquirir sistemas distintos (estoque, PDV, financeiro, contábil, etc..) e integrá-los ou desenvolver tudo do zero personalizado para o cliente.
  8. 3 points
    Naquele dia, a página do desenvolvedor do PagSeguro UOL estava desativada, hoje vi que voltou a funcionar. https://dev.pagseguro.uol.com.br/documentacao/pagamentos Guia de Integração = https://dev.pagseguro.uol.com.br/
  9. 3 points
    Sobre SQL injection, o site mais completo que eu conheço é o https://phpdelusions.net/ Sobre criptografia, leia os artigos de Scott Arciszewski e os que ele linkar. Ele tem muito material e adiciona várias ótimas referências. Pesquise, também, sobre: Cross-site request forgery (CSRF); Cross-site scripting (XSS); Error messages; File upload e include/require breach (vulnerabilidades); Session storage (local e criptografia); Database (separado do servidor PHP). Não pense na segurança como uma solução definitiva. Pense como camadas adicionadas ao seu sistema que aumentarão a segurança. Entretanto, a segurança vem de encontro a performance. Ou seja, quanto mais segurança, menos performance seu sistema possuirá.
  10. 3 points
    Para você entender como seus objetos podem se relacionar de forma n..n, pesquise por DIP ou seja Inversão de Dependencia. Amigo @marsolim você tem que parar de floodar posts, senão as pessoas acham que o post já foi respondido e nem chega a ver. Se desconhece o assunto, simplesmente ignore ou estude um pouco mais para saber como ajudar.
  11. 3 points
    Ah, no caso de f(arg); "que não esta sendo declarada em nenhum lugar" O que acontece, é que esta sendo passado Boolean, que é um objeto que recebe um parametro, para a função noisy. Então f(arg) equivale a Boolean(0); Veja esses exemplos: var matricula = 0; console.log(Boolean(matricula)); // retornara false var matricula = 1234; console.log(Boolean(matricula)); // retornara true var nome = false; var sobrenome = new Boolean(false); console.log(typeof nome); // retornara um boolean console.log(typeof sobrenome); // retornara um object
  12. 3 points
    Keven, joia! Vejamos esse exemplo: function apresentacao(forum) { console.log("Estamos em: " + forum); return function(linguagem) { console.log("Falando de: " + linguagem + "!"); } } apresentacao('Imasters')('JavaScript'); A principio, estamos chamando apenas apresentacao('Imasters'); Só que ela nos retorna uma funcão anonima, e em javascript podemos fazer um encadeamento executando essa função na sequencia. Por exemplo: var linguagem = apresentacao('Imasters'); // Agora "linguagem" é uma função, devido o retorno da função anonima linguagem('JavaScript'); /** Exibira: Estamos em: Imasters Falando de: JavaScript! */ Mas como temos o encadeamento, podemos executar as duas funções na sequencia: apresentacao('Imasters')('JavaScript'); /** Exibira: Estamos em: Imasters Falando de: JavaScript! */
  13. 3 points
    Tente assim: document.getElementById("myDiv").style.height = "1500px";
  14. 3 points
    Olá. Fiz uma correção no código, pois o menu não abria quando clicava no marcador animado ("+" ou"-"). Acrescentei mais um efeito tipo elástico na animação. O que eu faço pra aprender é pegar algo e tentar reproduzir. Eu estudo bem o código e procuro reproduzir pra entender cada passo. Eu não conheço sites de aulas gratuitas, mas creio que deve haver sim. http://codepen.io/Eziquiel/pen/WpMKER?editors=1000
  15. 3 points
    Boa tarde! É importante entender como o php converte para booleanos, para evitar pegadinhas var_dump(0 == true); // false var_dump(1 == true); // true var_dump(1 === true); // false var_dump(-1 == true); // true Não deixe de ver: http://us2.php.net/manual/en/language.types.boolean.php No caso do switch, ele faz comparação fraca (==) Sendo o valor de idade, zero: ($idade >= 0) and ($idade < 14) # isso retornara um true, e zero com true é igual a false. # Reiterando: var_dump(0 == true); # retornara um false Veja mais em: Http://www.php.net/manual/en/types.comparisons.php#types.comparisions-loose Por esse motivo que não entrava na primeira condição. @Webr, mudar: case ($idade >= 0) and ($idade < 14): para case ($idade >= 1) and ($idade < 14): Apesar de fazer cair na primeira condição, esta errado, pelo simples fato de zero ser menor do que 1
  16. 3 points
    ou: var tdList = document.querySelectorAll('tr.danger td');
  17. 3 points
    @Williams Duarte esse é um problema endêmico do mundo do desenvolvimento. Trabalhei nas mais variadas empresas, desde empresa com 3 pessoas, até empresa de âmbito nacional com um número expressivo de funcionários. Todas sofreram, sofrem e/ou sofrerão com esse problema. Somente os ERPs globais (SAP, AX, etc...) eu posso considerar uma exceção, pois, você deve desenvolver neles e ponto final. E nem são tão padronizados assim. @Mateus Silva normalmente, quando encontro com pessoas com resistência a frameworks, é por um pequeno sentimento de que se tornarão "menos" programadores por estarem utilizando uma ferramenta. Pergunta, o contador deixa de ser "menos" contador por utilizar uma calculadora ao invés de realizar os cálculos de cabeça? Alguém que usa uma calculadora HP 12C tem menos controle que alguém que utilize uma calculadora sharp elsi mate el-230? Ou até outros exemplos: um pedreiro é "menos pedreiro" por usar uma betoneira em detrimento de uma enchada com uma caixa de cimento? O marceneiro é "menos" marceneiro por utilizar ferramentas elétricas ao invés de manuais? Nenhum deles deixará de ter controle na ação que desenpenharem, eles ainda serão totalmente responsável pelo trabalho que realizaram, e isso tem tudo haver com confiança na ferramenta que estão utilizado. O framework não é nada mais que uma ferramenta e, sua função, não difere em nada do que qualquer outra ferramenta aqui mencionada. O contrário também é verdadeiro, ninguém será melhor que outro apenas por utilizar inúmeras ferramentas. Hoje em dia não importa qual framework você utiliza, seja X, Y ou Z ou se nem utiliza um framework. Apenas que entenda os padrões que eles estão utilizando. Eu, particularmente, aprendi apenas um framework (CodeIgniter), pois ele não segue nenhum padrão. Mas trabalho basicamente com qualquer framework, apenas porque aprendi como deve funcionar o MVC, PSRs, Design Patterns, entre outros muitos estudos ligados ao desenvolvimento de software. Caso eu tenha alguma dúvida, o manual com certeza irá me atender. Se não me atender, existem fóruns para dúvidas rápidas (tal qual iMasters). Se nem isso me ajudar, bem, por que diabos usaram esse FrameWork? Se achas um framework demasiado grande, utilize um micro framework. Todos eles são escalonáveis, se necessitar de algum módulo novo, basta inserí-los. Tenho certeza que sua produtividade se multiplicará, seus sistemas serão mais seguros e confiáveis e reduzirá o custo de manutenção. Acredito, custo de manutenção é intrinsicamente relacionado ao custo de desenvolvimento. Se mesmo com as vantagens do uso de um framework tiver receio em utilizá-lo, não é um problema. Apenas atente-se para seguir os padrões mundiais de desenvolvimento PHP (PSR's) e, também, os padrões de desenvolvimento de software (design principles, design patterns, DDD, TDD, etc..) Para finalizar, deixo a "frase do ano" dos meus colegas desenvolvedores aonde eu trabalho:
  18. 2 points
    [Apache] Um primeiro passo é você evitar que seus diretórios sejam listados, por isso, crie um arquivo chamado .htaccess e coloque na pasta geralmente chamada public_html ou www Dentro do htaccess escreva o seguinte: Options -Indexes IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti* Um arquivo index é o arquivo principal que o servidor envia para os navegadores quando você termina uma URL com barra (/) sem o nome específico do arquivo, index.htm, index.html, index.php, default.html, etc... Você criou uma pasta chamada index.html, vai precisar de um arquivo index.html Na verdade o fato de você não saber o que é um arquivo index.html quer dizer que deve estudar algumas coisas antes de pensar em sites
  19. 2 points
    A questão não é ter ou não talento. Não é tão binário ou determinístico como parece. Algumas pessoas apenas possuem uma maior facilidade p/ desenho, outras p/ música, enfim... Mas na minha opinião acho que isso tem a ver mais com o que a atividade exige e a pessoa já desenvolveu isso de alguma forma que p/ quem olha de fora parece caído do céu (sim, eu detesto essa história de dom). Ainda, quase todos nós desenhamos desde criança. A pergunta que você tem que fazer é "quando e pq paramos?" Sobre criar algo do zero: é prática (assim como desenho realista). E muitas vezes também é deixar de se criticar porque aquilo não está parecendo uma foto. Existem vários tipos de traço. Um desenho que faz sucesso pode não ser o mais realista ou mais proporcional de todos. Veja o Sarah's Scribbles no Facebook, por exemplo... Os personagens não tem nariz, os olhos são gigantes, os braços curtinhos... Faz quase 2 anos que eu tenho aulas de desenho e agora, só depois de ter aula de anatomia, perspectiva, ver alguns detalhes relacionados a luz e sombra e ter explorado mais materiais, é que minha professora está pedindo p/ eu criar as coisas ao invés de copiar como fotorrealismo. Se você der uma olhada no meu pinterest (https://br.pinterest.com/isisbinder3/desenhos-pessoais/) vai ver que, tirando uns estudos de anatomia e aquele urso em Conté, é tudo cópia de uma foto (tem algumas coisas lá que são de antes das aulas).
  20. 2 points
    Boa noite! $esta_no_texto = array("preto", "azul", "arroz", "refrigerante"); $entra_no_texto = array("branco", "verde","feijão", "suco"); $entra_no_texto = array_map(function($palavra) { return sprintf('<strong> %s </strong>', $palavra); }, $entra_no_texto); $frase = "um terno preto e uma calça azul - comendo arroz e tomando refrigerante"; $mudar = str_replace($esta_no_texto, $entra_no_texto, $frase); echo $mudar; Sera exibido: um terno branco e uma calça verde - comendo feijão e tomando suco
  21. 2 points
    Use apenas o composer! Para instalar: composer require phpdocumentor/phpdocumentor Depois crie a documentação de acordo com o manual https://www.phpdoc.org/docs/latest/index.html E para gerar a documentação basta executar: ./vendor/bin/phpdoc run -d diretorioAhDocumentar -t diretorioDaDocumentacao Se não entendi errado, no seu comentário você esta dizendo que não utiliza o composer? Se for isso, então este é problema! Perca umas duas horinhas ou que for necessário e pesquise sobre o composer, vai mudar sua vida, você sera mais feliz! :)
  22. 2 points
    E-mail Ta sendo enviado & Criando O Token: Porem nao encontro nenhum erro na pagina de redefinir e o mesmo nao mostra nem que o token foi expirado ou o formulário :/
  23. 2 points
    Pow não seja por isso haha: Exemplo de busca por Cep sem jQuery/Plugin/CSS https://github.com/gabrieldarezzo/gabrieldarezzo.github.io/blob/master/busca_cep/vanilla.html Live Demo: http://gabrieldarezzo.github.io/busca_cep/vanilla.html
  24. 2 points
    Caros amigos Com ajuda de uma amigo, consegui resolver o problema. Ficou assim: function mostraRespostaItens() { global $conecta; $cliente = '3'; $cotaNum = '3.3'; $sql = "SELECT cotacaoItens.cotaNumero, cotacaoItens.codProdClie, cotacaoItens.clienteId, produto.clienteId, produto.codProdClie, produto.produtoDescr FROM produto INNER JOIN cotacaoItens ON cotacaoItens.codProdClie = produto.codProdClie Where cotacaoItens.clienteId = '$cliente' AND cotacaoItens.clienteId = produto.clienteId "; $stmt = $conecta->prepare($sql); $stmt->execute(); $num = $stmt->rowCount(); $prod = null; if ($num > 0) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { extract($row); if ($prod != $codProdClie) { if (!is_null($prod)) { echo "</table>"; } // Fechando a tabela do último Produto impresso antes de abrir a nova echo " <br/>"; echo "<h2>{$codProdClie} - {$produtoDescr}</h2>"; echo "<table border='0' cellpadding='3' cellspacing='2' >"; mostraRespFornec($codProdClie); } } //Fecha While echo "</table>"; // Fechando a tabela da última categoria do laço } } function mostraRespFornec($codProdClie) { global $conecta; $cliente = '3'; $cotaNum = '3.3'; $sql = "SELECT cotacaoResposta.cotaRespId, cotacaoResposta.cotaNumero, cotacaoResposta.codProdClie, cotacaoResposta.cotaRespMarca, cotacaoResposta.cotaOferta, cotacaoResposta.fornecedorId, cotacaoResposta.cotaRespQtde, cotacaoResposta.cotaRespVlr, cotacaoResposta.cotaRespTotal, cotacaoResposta.cotaItensId, fornecedores.fornecedorId, fornecedores.nome FROM fornecedores INNER JOIN cotacaoResposta ON cotacaoResposta.fornecedorId = fornecedores.fornecedorId Where cotacaoResposta.cotaNumero = '$cotaNum' AND cotacaoResposta.cotaOferta = '2' AND cotacaoResposta.codProdClie = $codProdClie ORDER BY cotacaoResposta.cotaRespVlr ASC"; $result = $conecta->prepare($sql); $result->execute(); $nume = $result->rowCount(); $forn = null; if ($nume > 0) { while ($row = $result->fetch($forn)) { extract($row); if ($forn != $fornecedorId) { if (!is_null($forn)) { echo "</table>"; } echo "<table>"; echo " <tr style='color:#1C1C71; font-variant:small-caps; font:16px Arial, Helvetica, sans-serif; font-weight: bold;'>"; echo " <td><div class='fornec'>{$fornecedorId} - {$nome}</div></td>"; echo " </tr>"; echo " <tr>"; echo " <td><div class='no'>Qtde..: {$cotaRespQtde}</div></td>"; echo " </tr>"; echo " <td>&nbsp;</td>"; } } //Fecha While echo "</table>"; // Fechando a tabela da última categoria do laço } } Grato, Renato
  25. 2 points
    Olá Juninho. A única forma de fazer isso, é fazer a navegação do seu site não atualizar o navegador. Não é dificil, mas há um trabalho maior para desenvolver. Todos os sites que eu já vi, não se preocupam com isso. Ele atualizam tudo... e como a transmissão é ao vivo, o vídeo sempre estará atualizado. Eu utilizo o JWPlayer para fazer essas transmissões... é bem simples e leve. https://www.jwplayer.com/
This leaderboard is set to Sao Paulo/GMT-03:00
×

Important Information

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