Ir para conteúdo
Fórum Script Brasil

neto.joaobatista

Membros
  • Total de itens

    116
  • Registro em

  • Última visita

Posts postados por neto.joaobatista

  1. Bom, aqui vai uma implementação do hash SHA-1, estou trabalhando na serie SHA-2 (atualmente SHA-256 e futuramente SHA-512).

    O código abaixo é para quem gosta de saber o que acontece debaixo dos panos quando você usa uma função nativa ou quando a função nativa não está disponível no seu servidor...

    <?php
     /**
      * Implementação PHP do Secure Hash Algorithm segundo a Secure Hash Standard (SHS) (FIPS PUB 180-3) de outubro de 2008.
      * <p>
      * Nessa primeira versão está sendo implementado apenas o hash SHA-1, a proxima versão já contará com SHA-256
      * e futuramente SHA-384 e SHA-512
      * </p>
      *
      * @version 0.1
      * @author João Batista Neto <neto.joaobatista@gmail.com>
      * @since 2009-08-06
      * @license LGLP
      * @link http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf
      * @category Computer Security, Cryptography, Hash.
      */
     abstract class SecureHash {
         /**
          * Identifica o hash SHA-1
          */
         const SHA_1        = "sha1";
    
         /**
          * Identifica o hash SHA-256
          */
         const SHA_256    = "sha256";
    
         /**
          * Implementação do algorítimo de via única SHA-1 (Secure Hash Algorithm 1) definido pela especificação FIPS 180-3
          * <p>
          * Message Size: < 2**64
          * Block Size: 512 bits
          * Word Size: 32 bits
          * Message Digest Size: 160 bits
          * </p>
          * @link http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf
          * @param $message
          * @return string
          */
         static public function sha1( $message ){
             /**
              * Pre-processamento
              */
             $M = self::pre_process( $message );
    
             /**
              * Define os valores iniciais [5.3.1]
              */
             $H = array( 0x67452301 , 0xefcdab89 , 0x98badcfe , 0x10325476 , 0xc3d2e1f0 );
    
             /**
              * Calculando o Hash [6.1.2]
              */
             for ( $i = 0 , $N = count( $M ); $i < $N; $i += 16 ){
                 $W = array();
    
                 /**
                  * [6.1.2.1]
                  */
                 for ( $t = 0; $t < 80; $t++ ){
                     $W[ $t ] = ( $t <= 15 ) ? $M[ $i + $t ] : self::ROTL( $W[ $t - 3 ] ^ $W[ $t - 8 ] ^ $W[ $t - 14 ] ^ $W[ $t - 16 ] , 1 );
                 }
    
                 /**
                  *  [6.1.2.2]
                  */
                 $a = $H[ 0 ];
                 $b = $H[ 1 ];
                 $c = $H[ 2 ];
                 $d = $H[ 3 ];
                 $e = $H[ 4 ];
    
                 /**
                  * [6.1.2.3]
                  */
                 for ( $t = 0; $t < 80; $t++  ){
                     $T = self::add( self::add( self::ROTL( $a , 5 ) , self::f( $t , $b , $c , $d ) ) , self::add( self::add( $e , $W[ $t ] ) , self::Kt( $t ) ) );
                     $e = $d;
                     $d = $c;
                     $c = self::ROTL( $b , 30 );
                     $b = $a;
                     $a = $T;
                 }
    
                 /**
                  * [6.1.2.4]
                  */
                 $H[ 0 ] = self::add( $H[ 0 ] , $a );
                 $H[ 1 ] = self::add( $H[ 1 ] , $b );
                 $H[ 2 ] = self::add( $H[ 2 ] , $c );
                 $H[ 3 ] = self::add( $H[ 3 ] , $d );
                 $H[ 4 ] = self::add( $H[ 4 ] , $e );
             }
    
             return ( sprintf( "%08x%08x%08x%08x%08x" , $H[ 0 ] , $H[ 1 ] , $H[ 2 ] , $H[ 3 ] , $H[ 4 ] ) );
         }
    
         /**
          * Pre-processamento [5]
          * @return array
          */
         static private function pre_process( $message ){
             $size = strlen( $message );
             $M = array();
             $N = ( ( $size + 8 ) >> 6 ) + 1;
    
             /**
              * [5.1.1]
              */
             $message .= "x80";
    
             for ( $i = 0; $i < $N * 16; $i++  ) $M[ $i ] = 0;
             for ( $i = 0; $i < $size; $i++  ) $M[ $i >> 2 ] |= ord( $message{ $i } ) << ( 24 - ( $i % 4 ) * 8 );
    
             $M[ $i >> 2 ] |= 0x80 << ( 24 - ( $i % 4 ) * 8 );
             $M[ $N * 16 - 1 ] = $size * 8;
    
             return( $M );
         }
    
         /**
          * Operação AND [3.2.2]
          * Z = (X + Y) mod 2^32
          * @param integer $x
          * @param integer $y
          * @return integer O novo valor
          */
         static private function add( $x , $y ){
             $lsw = ( $x & 0xffff ) + ( $y & 0xffff );
             $msw = ( $x >> 16 ) + ( $y >> 16 ) + ( $lsw >> 16 );
    
             return ( ( $msw << 16 ) | ( $lsw & 0xFFFF ) );
         }
    
         /**
          * Operação Right Shift [3.2.3]
          * @param $x
          * @param $n
          * @return integer
          */
         static private function SHR( $x , $n ){
             $z = hexdec( 80000000 );
    
             if ( $z & $x ){
                 $x = ( $x >> 1 );
                 $x &= ~$z;
                 $x |= 0x40000000;
                 $x = ( $x >> ( $n - 1 ) );
             } else {
                 $x = ( $x >> $n );
             }
    
             return( $x );
         }
    
         /**
          * Operação Circular Right Shift [3.2.4]
          * @param integer $x
          * @param integer $n
          * @return integer
          */
         static private function ROTR( $x , $n ){
             return( ( self::SHR( $x , $n ) | ( $x << ( 32 - $n ) ) & 0xFFFFFFFF ) );
         }
    
         /**
          * Operação Circular Left Shift [3.2.5]
          * @param integer $num
          * @param integer $n
          * @return integer
          */
         static private function ROTL( $x , $n ){
             return ( ( $x << $n ) | self::SHR( $x , 32 - $n ) );
         }
    
         /**
          * Função f [4.1.1]
          * @param $t
          * @param $b
          * @param $c
          * @param $d
          * @return integer
          */
         static private function f( $t , $b , $c , $d ){
             if ( ( $t >=  0 ) && ( $t <= 19 ) ) return ( self::Ch( $b , $c , $d ) );
             if ( ( $t >= 20 ) && ( $t <= 39 ) ) return ( self::Parity( $b , $c , $d ) );
             if ( ( $t >= 40 ) && ( $t <= 59 ) ) return ( self::Maj( $b , $c , $d ) );
             if ( ( $t >= 60 ) && ( $t <= 79 ) ) return ( self::Parity( $b , $c , $d ) );
         }
    
         /**
          * Ch [4.1.1]
          * @param integer $x
          * @param integer $y
          * @param integer $z
          * @return integer
          */
         static private function Ch( $x , $y , $z ){
             return ( ( $x & $y ) ^ ( ~$x & $z ) );
         }
    
         /**
          * Parity [4.1.1]
          * @param integer $x
          * @param integer $y
          * @param integer $z
          * @return integer
          */
         static private function Parity( $x , $y , $z ){
             return ( $x ^ $y ^ $z );
         }
    
         /**
          * Maj [4.1.1]
          * @param integer $x
          * @param integer $y
          * @param integer $z
          * @return integer
          */
         static private function Maj( $x , $y , $z ){
             return ( ( $x & $y ) ^ ( $x & $z ) ^ ( $y & $z ) );
         }
    
         /**
          * Sigma{256} 0 [4.1.2]
          * @param integer $x
          * @return integer
          */
         static private function Sigma_0( $x ){
             return( ( self::ROTR( $x , 2 ) ^ self::ROTR( $x , 13 ) ^ self::ROTR( $x , 22 ) ) );
         }
    
         /**
          * Sigma{256} 1 [4.1.2]
          * @param integer $x
          * @return integer
          */
         static private function Sigma_1( $x ){
             return( ( self::ROTR( $x , 6 ) ^ self::ROTR( $x , 11 ) ^ self::ROTR( $x , 25 ) ) );
         }
    
         /**
          * sigma{256} 0 [4.1.2]
          * @param integer $x
          * @return integer
          */
         static private function sigma0( $x ){
             return( ( self::ROTR( $x , 7 ) ^ self::ROTR( $x , 18 ) ^ ( self::SHR( $x , 3 ) ) ) );
         }
    
         /**
          * sigma{256} 1 [4.1.2]
          * @param integer $x
          * @return integer
          */
         static private function sigma1( $x ){
             return( ( self::ROTR( $x , 17 ) ^ self::ROTR( $x , 19 ) ^ ( self::SHR( $x , 10 ) ) ) );
         }
    
         /**
          * Recupera o valor da constante Kt [4.2.1] e [4.2.2]
          * @param integer $t
          * @param string $type
          * @return integer
          */
         static private function Kt( $t , $type = self::SHA_1 ){
             /**
              * Kt [4.2.1]
              */
             $k_SHA1        = array( 0x5a827999 , 0x6ed9eba1 , 0x8f1bbcdc , 0xca62c1d6 );
    
             /**
              * Kt [4.2.2]
              */
             $k_SHA256    = array(
                 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
                 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
                 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
                 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
                 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
                 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
                 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
                 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
             );
    
             /**
              * Retorna a constante segundo o hash usado
              */
             switch ( $type ){
                 case self::SHA_1 :
                     if ( ( $t >=  0 ) && ( $t <= 19 ) ) return ( $k_SHA1[ 0 ] );
                     if ( ( $t >= 20 ) && ( $t <= 39 ) ) return ( $k_SHA1[ 1 ] );
                     if ( ( $t >= 40 ) && ( $t <= 59 ) ) return ( $k_SHA1[ 2 ] );
                     if ( ( $t >= 60 ) && ( $t <= 79 ) ) return ( $k_SHA1[ 3 ] );
    
                     throw new UnexpectedValueException( sprintf( "O valor %08x não era esperado." , $t ) );
                 case self::SHA_256:
                     return( $k_SHA256[ $t ] );
             }
         }
     }
    Agora fazendo o cálculo:
    $message = "João Batista Neto";
    
    printf( "nativo: %s\nSHA-1: %s\n" , sha1( $message ) , SecureHash::sha1( $message ) );

    A saída será:

    nativo: f0c8faeacb1df5cebc50c63d1d9aef0f0266535d

    SHA-1: f0c8faeacb1df5cebc50c63d1d9aef0f0266535d

  2. queria saber como eu faço pra através data que vai ser cadastrada na agenda atraves de um calendario, que insere no formato "d/m/Y" para pegar o dia da semana que sera no tal dia cadastrado...

    Tenta assim:

    $data = "22/07/2009";
    $part = strptime( $data , "%d/%m/%Y" );
    $wday = explode( "/" , sprintf( "Domingo/%s" , implode( "-feira/" , array( "Segunda" , "Terça" , "Quarta" , "Quinta" , "Sexta" , "Sábado" ) ) ) );
    
    printf( "A data %s vai cair %s" , $data , $wday[ $part[ "tm_wday" ] ] );
    A saída será:
    A data 22/07/2009 vai cair Quarta-feira

  3. Execução interrompida no arquivo ApeGera0003.php

    Na resposta ele diz que foi interrompido no 3º arquivo, mas os anteriores também não foram executados, e a tabela não atualiza!

    Na resposta ele diz que foi interrompido no ApeGera0003.php e não no 3 arquivo, o código que lhe enviei executa conforme a listagem e não seguindo uma ordem pré-estabelecida.

    O primeiro arquivo que ele tentou executar foi o ApeGera0003.php e encontrou um erro, por isso ele parou.

  4. Isso, é algo assim:

    - Nesse diretório com os arquivos, eu tenho que acessar a pasta pelo browser, e ir acessando os arquivos .php um a um para que as informações que cada arquivo contem seja inserida no BD!

    Esses arquivos são diariamente atualizados, e as vezes tem mais de 500 arquivos, e eu queria algo que fizesse tipo um acesso(execução) de cada arquivo, como se fosse um loop para que ele acesse(execute) os arquivos !

    espero ter conseguido explicar, porque eu tenho a idéia na cabeça mas não consigo ter a menor idéia de como fazer e também explicar!

    Kara, se você vai acessar o diretório pelo browser então você precisa de um index.php que irá ler qualquer outro arquivo.php na pasta e executá-lo, é isso ?

    index.php

    <?php
    abstract class Main {
        /**
         * Número de erros encontrados
         * @var integer
         */
        static private $erros = 0;
    
        /**
         * Número de arquivos.php encontrados
         * @var integer
         */
        static private $total = 0;
    
        /**
         * Número de arquivos executados
         * @var integer
         */
        static private $executados = 0;
    
        /**
         * Arquivo que está sendo executado no momento
         * @var string
         */
        static private $current = "";
    
        /**
         * Substitui a saida pelo relatório de execução
         * @param string $buffer O buffer de execução
         * @return string
         */
        static public function handleBuffer( $buffer ){
            $ret = sprintf( "%d arquivos executados de um total de %d<br />%d erros<br /><br />" , self::$executados , self::$total , self::$erros );
    
            if ( self::$total != self::$executados ){
                $ret .= sprintf( "Execução interrompida no arquivo %s." , self::$current );
            }
    
            $ret = sprintf( "<html><head><title>%s executados.</title></head><body>%s</body></html>" , self::$executados ? self::$executados : "nenhum" , $ret );
    
            return( $ret );
        }
    
        /**
         * Trata os erros encontrados
         * @return boolean TRUE
         */
        static public function handleError(){
            ++self::$erros;
    
            return( true );
        }
    
        /**
         * Inicia a busca por todos os arquivos.php do diretório atual
         */
        static public function start(){
            $lista = array();
    
            set_error_handler( array( "Main" , "handleError" ) , E_ALL );
    
            if ( ( $dh = opendir( "." ) ) ){
                while ( ( $file = readdir( $dh ) ) ){
                    if ( $file != "index.php" ){
                        $info = pathinfo( $file );
    
                        if ( $info[ "extension" ] == "php" ){
                            $lista[] = $file;
                        }
                    }
                }
    
                closedir( $dh );
    
                self::exec( $lista );
            } else {
                printf( "Não foi possível abrir o diretório" );
            }
        }
    
        /**
         * Executa a lista de arquivos.php
         * @param array $lista Matriz que contém todos os arquivos.php encontrados no diretório
         */
        static private function exec( $lista ){
            ob_start( array( "Main" , "handleBuffer" ) );
    
            for ( $i = 0 , self::$total = count( $lista ); $i < self::$total; $i++ ){
                self::$current = $lista[ $i ];
    
                try {
                    require( self::$current );
                    ++self::$executados;
                } catch ( Exception $e ){
                    ++self::$erros;
                }
            }
    
            header( "Content-type: text/html; charset=utf-8" , true , 200 );
            ob_end_flush();
        }
    }
    
    Main::start();

  5. bom galera, tenho um codigo que ta assim, aqui em baixo o form...

    <form action="cliente_cadastro.php" method="post" name="cadastrocliente">
    e aqui o código PHP...porem ele não entra na parte ali "if(isset($_FILES["logo"]))" e eu sempre carrego, já testei em todos navegadores mudar nome mudar a condição e nada... oque pode ser??
    Tenta mudar sua tag form para:
    <form enctype="multipart/form-data" method="post"  action="cliente_cadastro.php">

  6. Ola Pessoal Firmesa??? :D

    Seguinte, alguém sabe como converter uma imagem blob e gravar em arquivo físico?

    Tenta assim:

    if ( ( $res = mysql_query( sprintf( "SELECT * FROM documento_anexo WHERE id_documento = %d LIMIT 1;" , $idDocumento ) ) ) ){
        if ( ( $row = mysql_fetch_array( $res ) ) ){
            $img = imagecreatefromstring( $row[ "imagem" ] );
            imagejpeg( $img , sprintf( "imagens/%s.jpg" , $row[ "id" ] ) );
            
            header( "Content-type: image/jpeg" );
            header( sprintf( "Content-length: %d" , strlen( $row[ "imagem" ] ) ) );
            print( $row[ "imagem" ] );
        }
        
        mysql_free_result( $res );
    }

    Coloquei um LIMIT 1 porque você está enviando cabeçalhos HTTP e por isso você pode enviar apenas uma vez, tornando também o loop while desnecessário

  7. só q meu problema

    é que não estou conseguindo acessar o mysql do locaweb

    eu tenho o vertrigo, só consigo acessar o mysql do meu PC entende?

    como eu tinha te dito, eu tava fazendo tudo pelo mysql, só que não consegui executar os comandos

    # Nas versões 5.1.x você terá permissões para fazer os processos abaixo;

    # No MySQL 5.0.x, apesar de suportada, seu usuário não tem permissão para realizar o procedimento abaixo, neste caso terá que solicitar a criação das triggers através do Help Desk informando a query ou as queries para a criação dela(s), ou então, solicitar a instalação de uma nova base de dados e migrar os dados da base atual (SSH ou phpMyAdmin) para a base nova (SSH ou phpMyAdmin);

    Bom, a não ser que sua base seja uma base antiga, você conseguirá criar o trigger normalmente, utilize as ferramentas GUI do MySQL, pelo MySQL Query Browser você conseguirá fazer isso normalmente.

  8. Olá pessoal !

    Me deparei com um problema. Na tabela onde guardo os lançamentos do caixa, preciso a cada registro gravar o saldo e para isso, antes de gravar, pegar o saldo do ultimo registro.

    Colocando a clausula DESC no SELECT resolve. Porém ......

    Como definir o WHILE para ler só o primeiro registro, carregar o valor do saldo e sair do WHILE ?

    Agradeço que puder dar uma dica.

    Bom amigo, não sei se entendi direito o que você quer fazer mas se for o que eu entendi então você nem precisa do php para fazer isso.

    Imagina que a tabela `caixa` seja assim:

    mysql> desc `caixa`;
    +-------+-----------------------+------+-----+-------------------+-----------------------------+
    | Field | Type                  | Null | Key | Default           | Extra                       |
    +-------+-----------------------+------+-----+-------------------+-----------------------------+
    | id    | mediumint(8) unsigned | NO   | PRI | NULL              | auto_increment              |
    | saldo | decimal(10,3)         | NO   |     | 0.000             |                             |
    | data  | timestamp             | NO   | PRI | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
    +-------+-----------------------+------+-----+-------------------+-----------------------------+
    3 rows in set (0.00 sec)
    Para pegarmos o último saldo é só selecionarmos o último registro inserido:
    select c.`saldo` from `caixa` c where date( `data` ) = date( now() ) order by c.`id` DESC LIMIT 1 ;
    Isso fará com que o último saldo da data atual seja retornado, com isso basta garantirmos que se não houver nenhum registro na data (ex. a tabela está vazia) nós tenhamos o valor 0 e não null:
    select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC LIMIT 1 ),0);
    Pronto, agora que conseguimos recuperar o último saldo da data atual então podemos utilizar isso como subquery e utilizar o resultado para gravar no banco:
    insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC LIMIT 1 ),0) + 10;
    Preste atenção no + 10 no final do insert, esse é o valor do caixa atual, a cada fechamento de caixa você irá somar ao saldo anterior. Testando:
    mysql> create table `caixa` ( `id` mediumint(8) unsigned not null auto_increment, `saldo` decimal(10,3) not null default 0, `data` timestamp not null default current_timestamp on update current_timestamp, primary key(`id`,`data`) ) engine=MyISAM;                                                                  
    Query OK, 0 rows affected (0.00 sec)                                                                                                                        
    
    mysql> insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC limit 1),0) + 10;
    Query OK, 1 row affected (0.01 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC limit 1),0) + 10;
    Query OK, 1 row affected (0.00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC limit 1),0) + 10;
    Query OK, 1 row affected (0.00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC limit 1),0) + 10;
    Query OK, 1 row affected (0.00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> select * from caixa;
    +----+--------+---------------------+
    | id | saldo  | data                |
    +----+--------+---------------------+
    |  1 | 10.000 | 2009-07-17 07:13:11 |
    |  2 | 20.000 | 2009-07-17 07:13:13 |
    |  3 | 30.000 | 2009-07-17 07:13:14 |
    |  4 | 40.000 | 2009-07-17 07:13:15 |
    +----+--------+---------------------+
    4 rows in set (0.00 sec)
    Ai no PHP você só precisará substituir o 10 pelo seu valor:
    $saldo = 12.33;
    $sql = sprintf( "insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC limit 1),0) + %f" , $saldo );
    
    if ( mysql_query( $sql ) ){
        printf( "Saldo gravado com sucesso.\n" );
    }

  9. Problema de integração PHP e MySql

    Estou usando o PHP 5.2.9

    Mysql 5.1

    Apache 2.2

    Meu código que não funciona:

    <?php
                $usuario = "daniel";
                $senha = "daniel";
                $endereco = "localhost";
                $banco = "sistema";
    
    
                    if (  !($conexao = mysqli_connect ( $localhost , $usuario , $senha , $banco ) )   )
                        
                        {
                            echo "Falha na conexão com o banco de dados";
                            exit();
                        }
                    else
    Bom, se você vai usar o mysqli então a conexão é diferente:
    $usuario    = "daniel";
    $senha        = "daniel";
    $endereco    = "localhost";
    $banco        = "sistema";
    $conn        = mysqli_init();
    
    @$conn->real_connect( $endereco , $usuario , $senha , $banco );
    
    if ( $conn->errno ){
        printf( "Erro ao conectar: %s" , $conn->error );
    } else {
        printf( "ok, conectamos..." );
    }
    
    $conn->close();

  10. Bom dia pessoal da ScriptBrasil.

    Breve descrição: Pagina Index eu verifico a Sessão se ela existe ou não, e se o post já foi enviado ou não.

    Ao final disso, depois que ele validar usuario e senha ele retorna para /admin/ então ele vai mostrar a página de administração.. ou pelo menos era para fazer isso né. o que ta acontecendo é seguinte. Se eu colocar usuario errado, ele mostra mensagem de erro, se eu colocar usuario certo e a senha errada ele mostra mensagem de q a senha esta errada, se eu colocar ususario e senha corretos ele não vai para pagina "logado.php" ele fica na pagina de "login.php" que é a página do formulario sempre.

    O erro de fato está na definição da sua sessão, você está verificando se a sessão login existe, mas está definindo com outro nome:

    Você verifica assim:

    if(isset($_SESSION['login'])) #Verifico se existe a Sessão Login
    E cria a sessão assim:
    else // se a senha for bater com nome de usuario então inicio a sessão
                {
                    $_SESSION['login_usuario'] = $usuario;
                    $_SESSION['senha_usuario'] = $senha;
                    
                    header('Location: /admin/');
                }
    Tenta criar sua sessão assim:
    $_SESSION[ "login" ][ "usuario" ] = $usuario;
    $_SESSION[ "login" ][ "senha" ] = $senha;

  11. mas ai, qual é a variavel que representa o nome da imagem, transformado em md5?

    Quando você cria um input do tipo file no seu html, o nome desse campo é enviado para o PHP e o conteúdo dele é o nome da imagem que a pessoa enviou.

    No código que você postou não incluiu a parte que recebe de fato o arquivo, nem a parte que define a variável $imagem_name. Por isso eu apenas peguei a parte que copia sua imagem de um lugar e manda para outro, renomeei o arquivo de destino mantendo a pasta e pronto. O nome que foi gerado pelo hash é exatamente o md5 do contaúdo de $imagem_name

    porem, o nome que ta cadastrando no banco de dados, é o nome original e não o codificado

    como resolver?

    Bom, você tem a opção de, quando resgatar a imagem do banco de dados você usar o md5 no nome real dela, isso irá fazer com que você saiba qual é a imagem.

    No seu banco está assim:

    mysql> select logomarca from c_clicalista where `clica_id`=44;
    +---------------+
    | logomarca     |
    +---------------+
    | logomarca.jpg |
    +---------------+
    1 row in set (0.00 sec)
    Ai você recupera assim no PHP:
    if ( ( $resp = mysql_query( "select logomarca from c_clicalista where `clica_id`=44" , $conn ) ) ){
        if ( ( $row = mysql_fetch_array( $resp , MYSQL_ASSOC ) ) ){
            $arquivo = sprintf( "%s" , preg_replace_callback( "/(\\w+)\\.(\\w{3})/" , create_function( '$mtc',
                'return( sprintf( "%s.%s" , md5( $mtc[ 1 ] ) , $mtc[ 2 ] ) );'
            ) , $row[ "logomarca" ]  ) );
            
            printf( "O arquivo que está no banco é: %s e depois do md5 ficou %s\n" , $row[ "logomarca" ] , $arquivo );        
        }
        
        mysql_free_result( $resp );
    }

    Isso vai exibir:

    O arquivo que está no banco é: logomarca.jpg e depois do md5 ficou c3735b888c69db8a2b34bd772e4b5bb0.jpg

  12. eu queria que o campo CONTRATO fosse gerado baseado no AUTO_INCREMENT `CLICA_ID`

    por exemplo, `clica_id`= 80

    daí contrato = 00080

    dái gerando automatico, para cada cadastro feito no bd tem um numero de contrato

    entendem?

    Bom amigo, aquele trigger que eu lhe mostrei no fórum de MySQL resolve seu problema com apenas uma modificação, em vez de pegar o último `contrato` cadastrado e somar 1 (é o que está fazendo) você vai fazer ele pegar o último `clica_id` e somar 1, na verdade você nem precisa fazer isso porque com o trigger é possível fazer isso automático também:

    Primeiro você precisa apagar o primeiro trigger:

    drop trigger contratos_autoincrement;
    Agora criando um novo que vai se basear na coluna `clica_id`
    create trigger contratos_autoincrement before insert on c_clicalista for each row set NEW.contrato=(select ifnull( NEW.clica_id , ifnull( max( `clica_id` ) , 0 ) + 1 ) from c_clicalista);
    Esse trigger ai, antes de inserir o novo registro, vai verificar se o seu insert está definindo um `clica_id` se estiver ele vai usar o `clica_id` definido no insert, senão vai pegar o último `clica_id` da tabela, somar 1 e gravar na tabela. Testando:
    mysql> drop trigger contratos_autoincrement;
    Query OK, 0 rows affected (0.00 sec)
    mysql> create trigger contratos_autoincrement before insert on c_clicalista for each row set NEW.contrato=(select ifnull( NEW.clica_id , ifnull( max( `clica_id` ) , 0 ) + 1 ) from c_clicalista);
    Query OK, 0 rows affected (0.00 sec)
    Ai você insere seus registros normalmente:
    INSERT INTO c_clicalista VALUES('45' , null , '87' , '' , '' , '' , 'mauricio' , '123456' , 'Casa de Ração Ponto Final' , '' , '' , 'maursantos@hotmail.com' , '3228 3150' , 'Av. Alpheu Ribeiro, 1291 Carapina Grande - Serra - ES' , '' , 'Ativado' , '');
    INSERT INTO c_clicalista VALUES('44' , null , '45' , '' , '' , '' , 'Salão da Selma' , '123456' , 'Salão da Selma' , '' , '' , '' , '8811 - 1176' , 'Av. Alpheu Ribeiro, 1110 Carapina Grande - Serra - ES' , '' , 'Ativado' , '');
    Depois é só testar para ver o resultado:
    mysql> select * from c_clicalista;
    +----------+----------+--------+--------+-----+--------------+-----------------+--------+-----------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+
    | clica_id | contrato | cat_id | nome_1 | cpf | nome_contato | login           | senha  | nome                        | site | breve_desc | email                  | telefones   | como_chegar                                           | desc | status  | logomarca |
    +----------+----------+--------+--------+-----+--------------+-----------------+--------+-----------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+
    |       44 |     0044 | 45     |        |     |              | Salão da Selma | 123456 | Salão da Selma             |      |            |                        | 8811 - 1176 | Av. Alpheu Ribeiro, 1110 Carapina Grande - Serra - ES |      | Ativado |           |
    |       45 |     0045 | 87     |        |     |              | mauricio        | 123456 | Casa de Ração Ponto Final |      |            | maursantos@hotmail.com | 3228 3150   | Av. Alpheu Ribeiro, 1291 Carapina Grande - Serra - ES |      | Ativado |           |
    +----------+----------+--------+--------+-----+--------------+-----------------+--------+-----------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+
    2 rows in set (0.00 sec)

  13. Estou fazendo um projeto de uma Urna Online [...]

    O problema é que na validação, se digitar tudo correto, ou tudo incorreto, ele da erro. Mas se não digita nada, ele valida e redireciona pra página correta! :wacko:

    Putz, para que esse tanto de quebra de linha, hahahahah

    Vamos condensar um pouco, tenta assim:

    <html>
        <head>
            <meta http-equiv="content-type" content="text/html" charset="UTF-8">
            <link rel="stylesheet" type="text/css" href="../css/estilo.css" />
            <title>Urna Online</title>
        </head>
        <body>
            <?php
                #variaveis
                $login            = $_SESSION["login"];
                $senha            = $_SESSION["senha"];
                $conexao_tabela    = ("SELECT * FROM eleitores WHERE login='$login' AND senha='$senha'");
                $RS             = mysql_query($conexao_tabela) or die ("$erro3");
                $passou         = true;
                $erro             = null;
    
                foreach ( $_POST as $name => $value ){
                    $name = preg_replace( "/\\bval_(.*)\\b/" , "$1" , $name );
    
                    if ( empty( $value ) || ( $RS[ $name ] != $value ) ){
                        $passou = false;
                        $erro = $name;
                        break;
                    }
                }
    
                if ( !$passou )
                    printf( "O campo %s está incorreto." , $erro );
                else
                    printf( "<meta http-equiv='Refresh' content='0;URL=escolha_estado.php>" );
            ?>
        </body>
    </html>

  14. preciso de um sistema tipo aqueles de topsites

    q verificam o ip da pessoa antes de direcionar para uma pagina

    se o ip tiver visitado a pagina em menos de 24h nada aconteça,

    se o ip não for reconhecido uma nova pagina é aberta.

    Primeiro você vai precisar criar uma tabela para armazenar os ips:

    create table`ips` (
    	`id` mediumint(8) unsigned not null auto_increment,
    	`ip` varchar(15) not null,
    	`date` timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    	primary key (`id`),
    	key `ipdata` (`ip`,`date`)
    ) engine=MyISAM;
    Depois você faz no PHP assim:
    $ip        = isset( $_SERVER[ 'HTTP_X_FORWARD_FOR' ] ) && $_SERVER[ 'HTTP_X_FORWARD_FOR' ] ? $_SERVER[ 'HTTP_X_FORWARD_FOR' ] : isset( $_SERVER[ 'REMOTE_ADDR' ] ) && $_SERVER[ 'REMOTE_ADDR' ] ? $_SERVER[ 'REMOTE_ADDR' ] : null;
    $sql    = sprintf( "select count(*) 'total' from `ips` where ( `ips`.`ip` = '%s' ) AND ( ( to_days( now() ) - to_days( `date` ) ) = 0 ) AND ( hour( timediff( now() , `date` ) ) < 24 );" , $ip );
    $conn    = mysql_connect( "seuservidor" , "usuario" , "suasenha" );
    
    if ( $conn ){
        mysql_select_db( "seubancodedados" , $conn );
    
        if ( ( $res = mysql_query( $sql , $conn ) ) ){
            if ( ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) ){
                if ( ( (int) $row[ "total" ] ) ){
                    printf( "Você já viu esse conteúdo hoje..." );
                } else {
                    mysql_free_result( $res );
    
                    if ( mysql_query( sprintf( "insert into ips( `ip` ) values( '%s' );" , $ip ) ) ){
                        printf( "Ok, você pode ver o conteúdo" );
                    }
                }
            }
        }
    
        mysql_close( $conn );
    }

    Agora abre seu navegador, aponta para o lugar que você salvou o arquivo.php e abre uma vez, depois da um refresh e vê se é isso que você precisa

  15. bom galera

    eu uso o seguinte codigo para fazer o cadastro do usuario no meu site

    bom, queria saber aonde modifico para que o nome da imagem seje renomeado como um nome de 32 caracteres usando o algorítimo md5.

    Tenta mudar a linha:

    copy($imagem, "clicalista/c_banners/$imagem_name"); /*envia a imagem para a pasta*/
    para
    copy( $imagem , sprintf( "clicalista/c_banners/%s" , preg_replace_callback( "/(\\w+)\\.(\\w{3})/" , create_function( '$mtc',
        'return( sprintf( "%s.%s" , md5( $mtc[ 1 ] ) , $mtc[ 2 ] ) );'
    ) , $imagem_name  ) ) );

  16. 'contrato' vai começar no proximo cadastro que fizer, certo?

    então,

    os cadastros passados estao como NULL

    hehehehe

    Antes:

    mysql> select * from c_clicalista;
    +----------+----------+--------+--------+-----+--------------+----------------+--------+---------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+
    | clica_id | contrato | cat_id | nome_1 | cpf | nome_contato | login          | senha  | nome                      | site | breve_desc | email                  | telefones   | como_chegar                                           | desc | status  | logomarca |
    +----------+----------+--------+--------+-----+--------------+----------------+--------+---------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+
    |       45 |     NULL | 87     |        |     |              | mauricio       | 123456 | Casa de Ração Ponto Final |      |            | maursantos@hotmail.com | 3228 3150   | Av. Alpheu Ribeiro, 1291 Carapina Grande - Serra - ES |      | Ativado |           |
    |       44 |     NULL | 45     |        |     |              | Salão da Selma | 123456 | Salão da Selma            |      |            |                        | 8811 - 1176 | Av. Alpheu Ribeiro, 1110 Carapina Grande - Serra - ES |      | Ativado |           |
    +----------+----------+--------+--------+-----+--------------+----------------+--------+---------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+
    2 rows in set (0.00 sec)
    Criamos um procedimento para fazer o trabalho:
    delimiter $$
    create procedure `atualiza_contratos`() begin set @i := 0;
    	update c_clicalista set contrato=(select @i:=@i + 1);
    end$$
    delimiter;
    Atualizando todo mundo:
    mysql> call atualiza_contratos();
    Query OK, 2 rows affected (0.00 sec)
    Testando:
    mysql> select * from c_clicalista;
    +----------+----------+--------+--------+-----+--------------+----------------+--------+---------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+
    | clica_id | contrato | cat_id | nome_1 | cpf | nome_contato | login          | senha  | nome                      | site | breve_desc | email                  | telefones   | como_chegar                                           | desc | status  | logomarca |
    +----------+----------+--------+--------+-----+--------------+----------------+--------+---------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+
    |       45 |     0001 | 87     |        |     |              | mauricio       | 123456 | Casa de Ração Ponto Final |      |            | maursantos@hotmail.com | 3228 3150   | Av. Alpheu Ribeiro, 1291 Carapina Grande - Serra - ES |      | Ativado |           |
    |       44 |     0002 | 45     |        |     |              | Salão da Selma | 123456 | Salão da Selma            |      |            |                        | 8811 - 1176 | Av. Alpheu Ribeiro, 1110 Carapina Grande - Serra - ES |      | Ativado |           |
    +----------+----------+--------+--------+-----+--------------+----------------+--------+---------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+
    2 rows in set (0.00 sec)

  17. um campo chamado CONTRATO logo após o CLICA_ID

    Ok, modificando sua tabela:

    alter table `c_clicalista`
    	add column `contrato` smallint(4) unsigned zerofill default null after `clica_id`,
    	add index `contratos`(`contrato`);
    Criando o trigger:
    create trigger contratos_autoincrement before insert on c_clicalista for each row
    set NEW.contrato=(select ifnull( max(contrato) , 0 ) + 1 from c_clicalista);
    Adicionando dois registros:
    INSERT INTO c_clicalista VALUES('45' , null , '87' , '' , '' , '' , 'mauricio' , '123456' , 'Casa de Ração Ponto Final' , '' , '' , 'maursantos@hotmail.com' , '3228 3150' , 'Av. Alpheu Ribeiro, 1291 Carapina Grande - Serra - ES' , '' , 'Ativado' , '');
    INSERT INTO c_clicalista VALUES('44' , null , '45' , '' , '' , '' , 'Salão da Selma' , '123456' , 'Salão da Selma' , '' , '' , '' , '8811 - 1176' , 'Av. Alpheu Ribeiro, 1110 Carapina Grande - Serra - ES' , '' , 'Ativado' , '');
    Preste atenção no null logo após o id Resultado:
    mysql> select * from c_clicalista;
    +----------+----------+--------+--------+-----+--------------+----------------+--------+---------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+                                                    
    | clica_id | contrato | cat_id | nome_1 | cpf | nome_contato | login          | senha  | nome                      | site | breve_desc | email                  | telefones   | como_chegar                                           | desc | status  | logomarca |                                                    
    +----------+----------+--------+--------+-----+--------------+----------------+--------+---------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+                                                    
    |       45 |     0001 | 87     |        |     |              | mauricio       | 123456 | Casa de Ração Ponto Final |      |            | maursantos@hotmail.com | 3228 3150   | Av. Alpheu Ribeiro, 1291 Carapina Grande - Serra - ES |      | Ativado |           |
    |       44 |     0002 | 45     |        |     |              | Salão da Selma | 123456 | Salão da Selma            |      |            |                        | 8811 - 1176 | Av. Alpheu Ribeiro, 1110 Carapina Grande - Serra - ES |      | Ativado |           |
    +----------+----------+--------+--------+-----+--------------+----------------+--------+---------------------------+------+------------+------------------------+-------------+-------------------------------------------------------+------+---------+-----------+
    2 rows in set (0.00 sec)

  18. td certo até agora, fui la

    só q no caso, seria o numero do contrato que ia gerando 0001,0002..........

    como já tem o campo ID com um auto_increment

    não tem como eu criar mais um campo (numero_contrato) auto_increment

    o que posso fazer pessoal? vlw

    Sua tabela ficaria assim:

    create table `teste`(
            `id` mediumint(8) unsigned not null auto_increment,
            `contrato` smallint(4) unsigned zerofill default null,
            `teste` varchar(20) not null,
            primary key(`id`),
            key `contrato`(`contrato`)
    ) engine=MyISAM;
    
    create trigger
            contratos_autoincrement
    before insert on teste
            for each row 
                    set NEW.contrato=(select ifnull( max(contrato) , 0 ) + 1 from teste);
    Testando:
    mysql> insert into teste(`id`,`contrato`,`teste`) values(null,null,"primeiro"),(null,null,"segundo"),(null,null,"terceiro");
    Query OK, 3 rows affected (0.00 sec)                                                                                        
    Records: 3  Duplicates: 0  Warnings: 0 
    
    mysql> select * from teste;
    +----+----------+----------+
    | id | contrato | teste    |
    +----+----------+----------+
    |  1 |     0001 | primeiro |
    |  2 |     0002 | segundo  |
    |  3 |     0003 | terceiro |
    +----+----------+----------+
    3 rows in set (0.00 sec)

  19. boa tarde pessoal,

    eu não sei se devo postar aqui ou em mysql, me desculpem ai, qualquer coisa move ai

    mas ae

    queria saber se tinha como a id auto_increment ser criada no formato

    0001 , 0002 , 0010 , 0020 , 0100 ....

    entendem?

    vlw pessoal

    Hey amigão, é só definir sua coluna com zerofill:

    create table teste(
    	`id`	smallint(4) unsigned zerofill not null auto_increment,
    	`nome`	varchar(10) default null,
    	primary key(`id`)
    ) engine=MyISAM;
    Inserindo alguns registros:
    insert into teste(`id`,`nome`) values(null,"João"),(null,"Batista"),(null,"Neto" );
    Conferindo:
    mysql> select * from teste;
    +------+---------+
    | id   | nome    |
    +------+---------+
    | 0001 | João    |
    | 0002 | Batista |
    | 0003 | Neto    |
    +------+---------+
    3 rows in set (0.00 sec)

  20. Tenho esta select abaixo:

    $sql = mysql_query("SELECT Count(*) qtd_produto, nome FROM saida_backup WHERE m1 = '$mes1' OR m2 = '$mes2' OR m3 = '$mes3' OR m4 = '$mes4' OR m5 = '$mes5' GROUP BY nome ORDER BY qtd_produto DESC");

    ele conta o numero de vendas, ok esta funcionando, mas gostaria de alem de numero de venda, e tambem, fizesse o calculo total da quantidae

    EX: produto x teve 2 vendas sendo que a primeira venda foi 2 unidade e a segunda venda 3, gostaria que o select fizesse o calculo tipo 5 unidade vendida

    e assim para o valor total.

    SELECT
    	count(*) "vendas",
    	sum(`quantidade`) "total",
    	`nome`
    FROM saida_backup s
    WHERE s.`m1` = 1 OR s.`m2` = 2 OR s.`m3` = 3 OR s.`m4` = 4 OR s.`m5` = 5
    GROUP BY `nome`
    ORDER BY total DESC

  21. Boas pessoal.

    tenho aqui uma duvida, que talvez e boba, mas n sei como se faz.. e não sei como pesquisar por isso, logo peço desculpa se esse topio for repetido..

    e o seguinte, estava a navegar pelo baixaki e notei o seguinte:

    http://www.baixaki.com.br/download/windows...senger-2009.htm

    http://www.baixaki.com.br/download/vdownloader.htm

    o baixaki, com certeza tem uma bd, porem as paginas do baixaki estao todas em htm.. alguém sabe como e que isso acontece?

    e logico que eles não criam uma pagina pra cada programa que entra no site :D

    mas como isso e gerado automaticamente??

    thanks pela ajuda desde já..

    abraço

    É que na verdade esses não são os nomes das páginas, isso é feito utilizando o modRewrite do Apache, pesquise por:

    mod rewrite

    rewrite engine

    url amigável

    Você encontrará o que está procurando

  22. Prezados,

    eu tenho o seguinte código:

    $calculo = mysql_query("SELECT ('1.50' * quantidade) AS total FROM tabela");

    o que ele me traz é:

    ....

    $c = $mt->total;

    //traz 3 e 5 são o que constam no banco

    ...

    ...até aqui tudo bem... mas tem como eu somar esses dois resultados, ex: 3 + 5?

    abraços

    mysql> select (1.5 * quantidade) "total" from soma;
    +---------+
    | total   |
    +---------+
    | 18.4950 |
    | 15.0000 |
    +---------+
    2 rows in set (0.00 sec)
    
    mysql> select sum(1.5 * quantidade) "total" from soma;
    +---------+
    | total   |
    +---------+
    | 33.4950 |
    +---------+
    1 row in set (0.00 sec)

×
×
  • Criar Novo...