Ir para conteúdo
Fórum Script Brasil

McBlade

Membros
  • Total de itens

    318
  • Registro em

  • Última visita

Tudo que McBlade postou

  1. Obrigado pela resposta Jhonas... na verdade abri meu pacote package.json e onde haviam versões, coloquei * e depois dei um npm update... resolveu pra mim...
  2. Bom dia, preciso desenvolver uma aplicação https com o Express, porém seguindo todos os tutoriais através da internet, não consigo conexão... dá erro de "Error connecting with SSL". Se eu utilizar apenas o https do Node.js eu consigo conexão. Alguém tem alguma idéia do que fazer? var app = require('express').createServer({ key: './certs/certificate.key', cert: './certs/certificate.crt' });
  3. McBlade

    (Resolvido)Problemas com OO

    Muito obrigado amigo Urso. A questão do global $query tinha resolvido o problema sim. Acontece que eu tive problemas no Order by da função que estava dando erro e só percebi após passar um pente fino depois de ler seu post. Nos parâmetros eu usei $campodescricao e no Order by estava escrevendo $descricao e o erro era do MySQL. Como o mysql_error me trazia apenas que havia um erro perto de '' eu não sabia de onde vinha a assombração :P . Até mais!
  4. Existem várias maneiras. Uma boa seria criar um form com um field invisível que vai postar a operação "apagar" com o código da sigla a ser removida. echo "<tr onclick=\"apagasigla($registro[0])\"><td>Sigla: $registro[0]</td></tr>"; javascript function apagasigla(siglaid) { location.href = "index.php?operacao=apagar&sigla="+siglaid; }
  5. Você quer cada linha de uma cor? Sua página possui estilo CSS?
  6. McBlade

    (Resolvido)Problemas com OO

    Olá, obrigado pela rápida resposta. O global fez não dar erro, mas também não vem dados, tipo, ao dar open() na query o conteúdo de $sql->text está vindo vazio. function open() { $this->fquery = mysql_query($this->sql->text, $this->database) or die("$this->name:<br />$this->sql->text"); if ($this->fquery) $this->resultado = mysql_fetch_array($this->fquery); else $this->resultado = array(); return $this->fquery; }
  7. Tainá eu não conheço via socket, mas se você entende de ajax pode fazer uma função que verifique isto de tanto em tanto tempo dando um Count ou Max no banco de dados. Existe realmente a necessidade de ser imediato o reload?
  8. Dê um id para sua div, por exemplo id="divfotos" e crie uma função em javascript para executar de tantos em tantos segundos a função Ajax que carregará a galeria. Não é complicado amigo, eu procurei por PHP e Ajax no google e encontrei muito material, basta apenas entender como ele trabalha.
  9. Não deixa seu código mais lento. Ele pode ficar grande sim, mas pense na vasta gama de possibilidades onde você tenha uma classe chamada TChassi onde o chassi suporte apenas 4 rodas, logo, todos os objetos derivados de TChassi poderão conter no máximo 4 rodas. Suponha agora que você modifique a classe TChassi para que suporte 8 rodas. Automaticamente, sem esforço, todos que derivam dele passarão a suportar 8 rodas. Em resumo, orientação a objetos lhe permite uma rápida manutenção em códigos desde que classes o objetos derivem dela. Não necessariamente você fará tudo em classes, mas, preferencialmente, coisas que você irá utilizar muito e que exigirão maior manutenção.
  10. Boa tarde amigos, andei sumido por muito tempo pois meu foco sempre foi Delphi. :blush: Estou refatorando alguns relatórios antigos em PHP e resolvi criar uma classe para que fosse mais fácil gerenciar as SQL's de filtros e combos (famoso input-select). Segue o conteúdo das units. unit uclasses.php //------------------ class TStringList { var $text; function clear() { $this->text = ''; } function add($s) { if (trim($this->text) == "") $this->text = $s; else $this->text .= " " . $s; } } unit umysql.php //------------------ include("uclasses.php"); class TMySQLQuery { var $name; var $sql; var $resultado private $database; function __construct($AOwner, $AName) { if (!is_object($AOwner)) { die("Erro ao criar Query, objeto pai inválido."); } if (trim($AName) == '') { die("Erro ao criar Query, o valor de AName nã pode ser ''."); } $this->sql = new TStringList(); // a criação da variavel $sql me parece correta $this->name = $AName; $this->database = $AOwner; } // ... } unit urelatorio.php //------------------ <?php include("umysql.php"); //... conexão com o banco de dados $query = new TMySQLQuery($db,"Query1"); $query->sql->clear(); // aqui curiosamente não dá erro $query->sql->add("select * from teste"); $query->open(); $config = array(); $config = $query->resultado; function daerro() { $query->sql->clear(); // aqui dá erro, mas la no outro clear não deu... por quê? $query->sql->add("select * from erro"); $query->open(); return $query->resultado["campoqualquer"]; } echo daerro(); ?>O que eu acho estranho é justamente que quando eu chamo clear() da variável $query->sql na segunda vez que dá erro de Call a member function on a non-object. Na primeira ele até executa a SQL. :wacko:
  11. McBlade

    Classe X Session

    O serialize($variavel) e unserialize($_SESSION["variavel"]) funcionou perfeitamente. Obrigado amigos.
  12. McBlade

    Classe X Session

    Filé pessoal, agradecido pela ajuda. Vou testar amanhã e retorno depois! :wub:
  13. McBlade

    Classe X Session

    Estou aqui novamente para perguntar mais uma coisa sobre PHPOO. Eu tenho lá minhas lindas classes funcionando perfeitamente. Mas no meu caso, eu tenho um preenchimento de formulários do tipo "step" e não estou conseguindo recuperar os dados já postados. if (!$session) { $dados = new Dados(); $dados = $_SESSION["dados"]; } else { $dados = $_SESSION["dados"]; } O que vem para a instância $dados da sessão é apenas vazio :wacko:
  14. McBlade

    classes

    Ajudou e muito. Eu tentei aqui $this->$contato o o PHP me diz que a variável ainda não foi criada. Quanto ao destruct? Preciso matar as variáveis do tipo de outra classe criadas dentro dela ou o PHP faz pra mim? Não vi suas observações quanto ao destruct :blush: estorna esse post :P
  15. McBlade

    classes

    Obrigado pela resposta [Matrix mode ON]mr. Wanderson[Matrix mode OFF] :P Já trabalho com Delphi e sei conceito de OO mas em PHP é um pouco diferente do meu habitual ^^. Também sei um pouco de Javascript que têm me ajudado muito e estou aprendendo Ajax para desenvolver esta aplicação que é para um cliente (ou seja Preciso fazer se não minha cabeça rola xD). Só duas pequenas dúvidas pois não testei o código ainda 1º Eu ví que você utiliza "$this->contato" não seria "$this->$contato"? Quando eu for referenciar fone1 vai ser $cliente->contato->fone1 ou $cliente->$contato->$fone1? 2º No destrutor eu preciso matar as classes filhas ou o PHP faz automatico pra mim? Se não, como fazer?
  16. McBlade

    classes

    Olá amigos. Comecei a programar PHPOO agora. Tenho 2 classes, mas na hora de executar meu PHP está dando a seguinte mensagem: Segue o código: class Contato { public $fone1; public $fone2; public $email; public $MSN; } class Cliente { public $codigo; public $nome; public $contato; function __construct() { if (!isset($contato)) $contato = new Contato(); } function __destruct() { if (isset($contato)) unset($contato); } } ... <input type="text" value="<?php echo $cliente->$contato->$email; //<---- ERRO DA LINHA 45 ?>">Gostaria de criar na var $contato a classe Contato para ficar um código mais limpo. Como faz isso? Depois, aproveitando, se eu quiser que $contato seja um array da classe Contato?
  17. Saudações Amigos. Estive lendo o tópico http://scriptbrasil.com.br/forum/index.php?showtopic=91047 e estou utilizando o código para fazer alguns testes de compactação com TCompressionStream e TDecompressionStream da ZLib segundo o código postado retirado do "Torry's Delphi Pages" O algoritmo funciona apenas quando se tem mais de 1 arquivo compactado. Digo isso porque eu estou tentando descompactar um único mísero arquivo e a linha "infile.Read(c,SizeOf( c )); { number of files }" me retorna um número gigante e na segunda iteração do FOR dá erro de criação de arquivo referenciando o arquivo desta forma: "C:\TEMP\C:\TEMP\TESTE.EXE". Eu deduzo que na segunda iteração o bendito esteja copiando o caminho do arquivo então eu comentei o "S := Dest+S" e adicionei o "Dest" no "outfile := TFileStream.Create(s,fmCreate);" ficando assim "outfile := TFileStream.Create(Dest+s,fmCreate);". Mas mesmo assim ele me retorna um erro, desta vez diferente "Stream read error". Detalhe Importante: o único arquivo compactado retorna ao seu tamanho original, então porque o algoritmo me retorna erro? Alguém conseguiu fazer esse código funcionar? Seguem meus códigos procedure TForm1.CompressFiles(Files : TStrings; const Filename : String); var InFile, OutFile, TmpFile : TFileStream; Compr : TCompressionStream; I, L : Integer; S : String; begin if Files.Count > 0 then begin OutFile := TFileStream.Create(Filename,fmCreate); try { the number of files } L := Files.Count; OutFile.Write(L,SizeOf(L)); for I := 0 to Files.Count-1 do begin InFile := TFileStream.Create(Files[I],fmOpenRead); try { the original filename } S := ExtractFilename(Files[I]); L := Length(S); OutFile.Write(L,SizeOf(L)); OutFile.Write(S[1],L); { the original filesize } L := InFile.Size; OutFile.Write(L,SizeOf(L)); { compress and store the file temporary} TmpFile := TFileStream.Create('tmp',fmCreate); Compr := TCompressionStream.Create(clMax,TmpFile); try Compr.CopyFrom(InFile,L); finally Compr.Free; TmpFile.Free; end; { append the Compressed file to the destination file } TmpFile := TFileStream.Create('tmp',fmOpenRead); try OutFile.CopyFrom(TmpFile,0); finally TmpFile.Free; end; finally InFile.Free; end; end; finally OutFile.Free; end; DeleteFile('tmp'); end; end; procedure TForm1.DecompressFiles(const Filename, DestDirectory : String); var Dest,S: String; Decompr: TDecompressionStream; InFile, OutFile: TFilestream; I,L,C: Integer; begin Dest := IncludeTrailingPathDelimiter(DestDirectory); InFile := TFileStream.Create(Filename,fmOpenRead); try { number of files } InFile.Read(C,SizeOf(C)); for I := 1 to C do begin { read filename } InFile.Read(L,SizeOf(L)); SetLength(S,L); InFile.Read(S[1],L); { read filesize } InFile.Read(L,SizeOf(L)); { Decompress the files and store it } S := Dest+S; //include the path OutFile := TFileStream.Create(Dest+S,fmCreate); Decompr := TDecompressionStream.Create(InFile); try OutFile.CopyFrom(Decompr,L); finally OutFile.Free; Decompr.Free; end; end; finally InFile.Free; end; end;
  18. Já procurei de todas as formas e em todos os fóruns do mundo e não achei resposta. Eu tenho um ClientDataSet no qual preciso inserir strings, o problema é que eu nunca sei a quantidade de strings a serem inseridas. Preciso de uma rotina abstrata para inserir entendem? Vejam o que eu tenho pronto: var VarRec: array of TVarRec; I, J: Integer; begin for I := 0 to Memo1.Lines.Count - 1 do begin String(VarRec[I].VString) := String(Memo1.Lines[I]); InsertRecord(VarRec); end; end; Mas depois de inserido todas as linhas do memo, se ligo o DataSource num DBGrid ele mostra o mesmo número (Endereço de memória?)... :(
  19. Se eu entendi direito, você quer buscar o nome da cidade pelo código... É isso? Se for, você não usará LIKE e sim =
  20. Não sei se o assunto ficou bem definido mas funciona o seguinte... Tenho uma aplicação que cria 'n' forms MDIChild dentro do Principal, e pra cada Child criada, eu crio um BitBtn num Panel alinhado ao Topo para fazer controlar semelhante ao menu Janela do Word com N documentos abertos sabem? Problema: Quando associo o evento onClick do BitBtn, qualquer um que eu clicar faz um efeito tipo "Next" nos Forms Childs... Como fazer para que ao clicar no Botao, apenas o form correspondente a ele venha a frente? Obs.: Todos eles são criados com WindowState = wsMaximized... Segue código: ... private I: Integer; // controla os MDI Form: TForm2; ... procedure TForm1.Create(Sender: TObject); begin I := 0; end; procedure TForm1.BotaoCriar(Sender: TObject); begin Form := TForm2.Create(Form1); Form.Caption := 'Form'+IntToStr(I+1); BitBtn := TBitBtn.Create(Form2); // faz o botao pertencer ao form2 BitBtn.Parent := Panel1; BitBtn.Align := alLeft; BitBtn.Tag := I; Inc(I); BitBtn.OnClick := Clique; end; procedure TForm1.Clique(Sender: TObject); begin MDIChildren[(Sender as TBitBtn).Tag].Show; end; end. O botao tem como Owner o Form2 por que ao clicar em fechar no Form2, o botao automaticamente se "freea" :lol: .
  21. Hahaha... Na empresa onde eu trabalho nós desenvolvemos um componente baseado no StringGrid... ele tem até Add :D Mas era mesmo curiosidade minha quando eu vi o D2007...
  22. Então Micheus, eu sei desenhar um componente "dentro" de uma StringGrid. Mas é que eu pensei que essa propriedade Objects facilitadia o desenho de um BitBtn, por exemplo, dentro da StringGrid sem ter que fazer... TheRect := StringGrid1.CellRect(1,1); BitBtn1.Left := StringGrid1.Left + TheRect.Left; BitBtn1.Top := StringGrid1.Top + TheRect.Top; BitBtn1.Height := TheRect.Bottom - TheRect.Top; BitBtn1.Width := TheRect.Right - TheRect.Left; Há de convir que isso é chato... se eu passasse StringGrid1.Objects[1,1] := BitBtn1; e a célula assumisse / desenhasse o botão nela seria muito interessante.... ;)
  23. Olá pessoal. Estava eu testando a propriedade Objects do StringGrid do Delphi 2007 (Trial) e atribui da seguinte forma: StringGrid1.Objects[1,1] := BitBtn1; Objects espera um TObject e BitBtn1 é um TObject... Contudo o botão não aparece no Grid. Embora se eu parar o mouse debugando no Objects[1,1] o Delphi me mostra exatamente os dados do BitBtn1. Maaaaaaaaasssssss (Sempre tem um "mas"), quando eu altero o Caption do BitBtn1 (Visual) o Objects[1,1] também muda... então o Objects[1,1] virou um ponteiro do BitBtn1 só pela atribuição que eu fiz? E se eu quisesse fazer aparecer o botão no grid aproveitando o Objects... Sem ter que fazer Rect := StringGrid1.CellRect[1,1]? Obs.: Já tentei passar Parent e não funcionou
  24. Graymalkin eu fiz com o For e funcionou :D ... Agora é pesquisar pra ver se dá pra passar sem ele. Eu estava errando algumas coisas mais por que pedia pro usuário digitar qual linha desejava trocar mas esquecia-me que o índice começava do zero, por isso saia um número absurdo... enfim... valeu pela ajuda... até qualquer dia...
  25. McBlade

    Ajuda Com Ponteiros Em C

    Cara realmente eu errei ao Colar o Código, mas mesmo após as correções ainda dá o mesmo tipo de problema. Meu Professor pediu para usar scanf ao invés de gets... Ainda sim trocando não dá certo... Apenas troquei gets(nome) para scanf("%s", aux->nome); mas não vai... to encalhado cara... =\
×
×
  • Criar Novo...