Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ma_gr

Valor do indice do array em variável php

Recommended Posts

Seguindo este tutorial http://www.gigasystems.com.br/artigo/88/consultar-cnpj-pela-receita-federal-com-php consegui retornar valor de índice específico que preciso e atribui à uma variável sem problemas.

 

Quando implemento na minha aplicação, faço do mesmo modo mas simplesmente não funciona. O valor não é repassado pra variável. Pode ser por causa das funções que tenho pra session da minha aplicação?

 

form:

<form action="reg.php" method="post" enctype="multipart/form-data">

<label>Empresa (nome fantasia)</label>

<input type="text" name="casa" required />

<label>CNPJ (somente números)</label>

<input type="text" name="cnpj" maxlength="19" onblur='clearTimeout()' required />
        
<img id="captcha" src="includes/getcaptcha.php" border="0"/><br>
        
<a id="reload" style="color:#06C;">Atualizar imagem</a>
        
<script>
$('#reload').click(function(){
//$('#captcha').attr('src', 'includes/getcaptcha.php'); só funciona no chrome
$("#captcha").attr("src", "includes/getcaptcha.php?"+(new Date()).getTime());
});
					
</script>
        
<input type="text" name="captcha" maxlength="6" required style="width:150px;" placeholder="letras minúsculas" />

<input type="submit" name="Enviar" value="Enviar" class="button" />

</form>

reg.php resumido (pretendo atribuir o nome fantasia da empresa à $nome_fant, mas não está atribuindo, fica vazia)

<?php

include_once 'includes/db_connect.php';

include_once 'includes/functions.php';

sec_session_start();

?>

<body>

<?php if (login_check($mysqli) == true) : ?>

<?php

if(isset($_SESSION['username'])){

$username = $_SESSION['username'];

$members_username = "SELECT username FROM members WHERE username = '$username' ";

$result = $mysqli->query($members_username);

    if($result->num_rows > 0){

        while($row = $result->fetch_assoc()){

        $user = $row['username'];

}}}


$casa = $_POST['casa'];

echo "casa: ".$casa;	

require('includes/funcoes.php');

$cnpj = $_POST['cnpj']; // cnpj do form somente números
$captcha = $_POST['captcha'];


// pega html resposta da receita
$getHtmlCNPJ = getHtmlCNPJ($cnpj, $captcha);

if($getHtmlCNPJ)
{
// coloca os dados em um array
$campos = parseHtmlCNPJ($getHtmlCNPJ);
var_dump($campos);
$nome_fant = $campos[3];
}

echo "fantasia: ".$nome_fant;


if(!$resultado['status'] = 'OK'){
die("status nao funciona");	
}

if(!$situacao == $_POST['ATIVA']){
die("situaçao nao ativa");	
}

if($nome_fant != $casa){
die("nome da casa nao bate");
}


if($resultado['status'] = 'OK' && $situacao == $_POST['ATIVA'] && $nome_fant == $casa){

  if ($insert_stmt = $mysqli->prepare("INSERT INTO profiles (usuario, nome, sobrenome, 
	telefone, cel_wts, rua, numero, bairro, cidade, estado, pais, casa, cnpj, cargo, cpf) 
	VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) {
	
$insert_stmt->bind_param('ssssssssssssiss', $user, $nome, $sobrenome, $telefone, $cel_wts, $rua, $numero, $bairro, $cidade, $estado, $pais, $casa, $cnpj, $cargo, $cpf);
				
	
if (! $insert_stmt->execute()) {
  echo "Algo saiu errado. Tente novamente.";
	
echo "<script>setTimeout(function(){
    window.location.href='profiles.php';
  }, 5000);</script>";
	
}else{

echo '<div class="register_success">';

echo "Dados atualizados...";

echo '<img src="images/equalizer.GIF" width="256" height="70"  alt="equalizer"/>';

echo "<script>setTimeout(function(){
	window.location.href='delay_page.php';
	}, 3000);</script>";   

echo '</div>';    

  }
}
	
}else{
	echo '<div class="register_success">';
	echo "Há algo de errado com a validação do seu CNPJ. Tente novamente.";
	echo "<script>setTimeout(function(){
		window.location.href='profile.php';
		}, 3000);</script>";   
	echo '</div>';    
		
}

?>

<?php else : ?>

	<p>

		<span class="error">Você não tem autorização para acessar esta página.</span> Please <a href="index.php">login</a>.

	</p>

<?php endif; ?>

</body>

</html>


funcoes.php

<?php
// define caminho absoluto e relativo para arquivo cookie
$pasta_cookies = 'cookies_cnpj/';
define('COOKIELOCAL', str_replace('\\', '/', realpath('./')).'/'.$pasta_cookies);
define('HTTPCOOKIELOCAL', 'http://'.$_SERVER['SERVER_NAME'].str_replace(pathinfo($_SERVER['SCRIPT_FILENAME'],PATHINFO_BASENAME),'',$_SERVER['SCRIPT_NAME']).$pasta_cookies);

// inicia sessão
@session_start();

// função para pegar o que interessa
function pega_o_que_interessa($inicio,$fim,$total)
{
	$interesse = str_replace($inicio,'',str_replace(strstr(strstr($total,$inicio),$fim),'',strstr($total,$inicio)));
	return($interesse);
}

// função para pegar a resposta html da consulta pelo CPF na página da receita
function getHtmlCNPJ($cnpj, $captcha)
{
    $cookieFile = COOKIELOCAL.session_id();
	$cookieFile_fopen = HTTPCOOKIELOCAL.session_id();
    if(!file_exists($cookieFile))
    {
        return false;      
    }
	else
	{
		// pega os dados de sessão gerados na visualização do captcha dentro do cookie
		$file = fopen($cookieFile_fopen, 'r');
		while (!feof($file))
		{$conteudo = fread($file, 1024);}
		fclose ($file);

		$explodir = explode(chr(9),$conteudo);
		
		$sessionName = trim($explodir[count($explodir)-2]);
		$sessionId = trim($explodir[count($explodir)-1]);
		
		// constroe o parâmetro de sessão que será passado no próximo curl
		$cookie = $sessionName.'='.$sessionId.';flag=1';	
	}
	
	// dados que serão submetidos a consulta por post
    $post = array
    (
		'submit1'						=> 'Consultar',
		'origem'						=> 'comprovante',
		'cnpj' 							=> $cnpj, 
		'txtTexto_captcha_serpro_gov_br'=> $captcha,
		'search_type'					=> 'cnpj'
		
    );
    
	$post = http_build_query($post, NULL, '&');

    $ch = curl_init('http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);		// aqui estão os campos de formulário
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);	// dados do arquivo de cookie
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);	// dados do arquivo de cookie
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0');
    curl_setopt($ch, CURLOPT_COOKIE, $cookie);	    // dados de sessão e flag=1
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
    curl_setopt($ch, CURLOPT_REFERER, 'http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/Cnpjreva_Solicitacao2.asp');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $html = curl_exec($ch);
    curl_close($ch);
    return $html;
}

// Função para extrair o que interessa da HTML e colocar em array
function parseHtmlCNPJ($html)
{
	// respostas que interessam
	$campos = array(
	'NÚMERO DE INSCRIÇÃO', // 0
	'DATA DE ABERTURA', // 1
	'NOME EMPRESARIAL', // 2
	'TÍTULO DO ESTABELECIMENTO (NOME DE FANTASIA)', // 3
	'CÓDIGO E DESCRIÇÃO DA ATIVIDADE ECONÔMICA PRINCIPAL', // 4
	'CÓDIGO E DESCRIÇÃO DAS ATIVIDADES ECONÔMICAS SECUNDÁRIAS', // 5
	'CÓDIGO E DESCRIÇÃO DA NATUREZA JURÍDICA', // 6
	'LOGRADOURO', // 7
	'NÚMERO', // 8
	'COMPLEMENTO', // 9
	'CEP', // 10
	'BAIRRO/DISTRITO', // 11
	'MUNICÍPIO', // 12
	'UF', // 13
	'ENDEREÇO ELETRÔNICO', // 14
	'TELEFONE', // 15
	'ENTE FEDERATIVO RESPONSÁVEL (EFR)', // 16
	'SITUAÇÃO CADASTRAL', // 17
	'DATA DA SITUAÇÃO CADASTRAL', // 18
	'MOTIVO DE SITUAÇÃO CADASTRAL', // 19
	'SITUAÇÃO ESPECIAL', // 20
	'DATA DA SITUAÇÃO ESPECIAL'); // 21

	// caracteres que devem ser eliminados da resposta
	$caract_especiais = array(
	chr(9),
	chr(10),
	chr(13),
	' ',
	'</b>',
	'  ',
	'<b>MATRIZ<br>',
	'<b>FILIAL<br>'
	 );

	// prepara a resposta para extrair os dados
	$html = str_replace('<br><b>','<b>',str_replace($caract_especiais,'',strip_tags($html,'<b><br>')));
	
	$html3 = $html;

	// faz a extração
	for($i=0;$i<count($campos);$i++)
	{		
		$html2 = strstr($html,utf8_decode($campos[$i]));
		$resultado[] = trim(pega_o_que_interessa(utf8_decode($campos[$i]).'<b>','<br>',$html2));
		$html=$html2;
	}

	// extrai os CNAEs secundarios , quando forem mais de um
	if(strstr($resultado[5],'<b>'))
	{
		$cnae_secundarios = explode('<b>',$resultado[5]);
		$resultado[5] = $cnae_secundarios;
		unset($cnae_secundarios);
	}

	// devolve STATUS da consulta correto
	if(!$resultado[0])
	{
		if(strstr($html3,utf8_decode('O número do CNPJ não é válido')))
		{$resultado['status'] = 'CNPJ incorreto ou não existe';}
		else
		{$resultado['status'] = 'Imagem digitada incorretamente';}
	}
	else
	{$resultado['status'] = 'OK';}
	
	return $resultado;
}
?>

arquivo functions.php que faz a session da minha aplicação:

<?php
include_once 'psl-config.php';
 
function sec_session_start() {
    $session_name = 'sec_session_id';   // Estabeleça um nome personalizado para a sessão
    $secure = SECURE;
    // Isso impede que o JavaScript possa acessar a identificação da sessão.
    $httponly = true;
    // Assim você força a sessão a usar apenas cookies. 
   if (ini_set('session.use_only_cookies', 1) === FALSE) {
        header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
        exit();
    }
    // Obtém params de cookies atualizados.
    $cookieParams = session_get_cookie_params();
    session_set_cookie_params($cookieParams["lifetime"],
        $cookieParams["path"], 
        $cookieParams["domain"], 
        $secure,
        $httponly);
    // Estabelece o nome fornecido acima como o nome da sessão.
    session_name($session_name);
    session_start();            // Inicia a sessão PHP 
    session_regenerate_id();    // Recupera a sessão e deleta a anterior. 
}

function login($email, $password, $mysqli) {
    // Usando definições pré-estabelecidas significa que a injeção de SQL (um tipo de ataque) não é possível. 
    if ($stmt = $mysqli->prepare("SELECT id, username, password, salt 
        FROM members
       WHERE email = ?
        LIMIT 1")) {
        $stmt->bind_param('s', $email);  // Relaciona  "$email" ao parâmetro.
        $stmt->execute();    // Executa a tarefa estabelecida.
        $stmt->store_result();
 
        // obtém variáveis a partir dos resultados. 
        $stmt->bind_result($user_id, $username, $db_password, $salt);
        $stmt->fetch();
 
        // faz o hash da senha com um salt excusivo.
        $password = hash('sha512', $password . $salt);
        if ($stmt->num_rows == 1) {
            // Caso o usuário exista, conferimos se a conta está bloqueada
            // devido ao limite de tentativas de login ter sido ultrapassado 
 
            if (checkbrute($user_id, $mysqli) == true) {
                // A conta está bloqueada 
                // Envia um email ao usuário informando que a conta está bloqueada 
                return false;
            } else {
                // Verifica se a senha confere com o que consta no banco de dados
                // a senha do usuário é enviada.
                if ($db_password == $password) {
                    // A senha está correta!
                    // Obtém o string usuário-agente do usuário. 
                    $user_browser = $_SERVER['HTTP_USER_AGENT'];
                    // proteção XSS conforme imprimimos este valor
                    $user_id = preg_replace("/[^0-9]+/", "", $user_id);
                    $_SESSION['user_id'] = $user_id;
                    // proteção XSS conforme imprimimos este valor 
                    $username = preg_replace("/[^a-zA-Z0-9_\-]+/", 
                                                                "", 
                                                                $username);
                    $_SESSION['username'] = $username;
                    $_SESSION['login_string'] = hash('sha512', 
                              $password . $user_browser);
                    // Login concluído com sucesso.
                    return true;
                } else {
                    // A senha não está correta
                    // Registramos essa tentativa no banco de dados
                    $now = date('Y-m-d H:m:s');
                    $mysqli->query("INSERT INTO login_attempts(user_id, time)
                                    VALUES ('$user_id', '$now')");
                    return false;
                }
            }
        } else {
            // Tal usuário não existe.
            return false;
        }
    }
}

function checkbrute($user_id, $mysqli) {
    // Registra a hora atual 
    $now = time();
 
    // Todas as tentativas de login são contadas dentro do intervalo das últimas 2 horas. 
    $valid_attempts = $now - (2 * 60 * 60);
 
    if ($stmt = $mysqli->prepare("SELECT time 
                             FROM login_attempts <code><pre>
                             WHERE user_id = ? 
                            AND time > '$valid_attempts'")) {
        $stmt->bind_param('i', $user_id);
 
        // Executa a tarefa pré-estabelecida. 
        $stmt->execute();
        $stmt->store_result();
 
        // Se houve mais do que 5 tentativas fracassadas de login 
        if ($stmt->num_rows > 5) {
            return true;
        } else {
            return false;
        }
    }
}

function login_check($mysqli) {
    // Verifica se todas as variáveis das sessões foram definidas 
    if (isset($_SESSION['user_id'], 
                        $_SESSION['username'], 
                        $_SESSION['login_string'])) {
 
        $user_id = $_SESSION['user_id'];
        $login_string = $_SESSION['login_string'];
        $username = $_SESSION['username'];
 
        // Pega a string do usuário.
        $user_browser = $_SERVER['HTTP_USER_AGENT'];
 
        if ($stmt = $mysqli->prepare("SELECT password 
                                      FROM members 
                                      WHERE id = ? LIMIT 1")) {
            // Atribui "$user_id" ao parâmetro. 
            $stmt->bind_param('i', $user_id);
            $stmt->execute();   // Execute the prepared query.
            $stmt->store_result();
 
            if ($stmt->num_rows == 1) {
                // Caso o usuário exista, pega variáveis a partir do resultado.                 
				$stmt->bind_result($password);
                $stmt->fetch();
                $login_check = hash('sha512', $password . $user_browser);
 
                if ($login_check == $login_string) {
                    // Logado!!!
                    return true;
                } else {
                    // Não foi logado 
                    return false;
                }
            } else {
                // Não foi logado 
                return false;
            }
        } else {
            // Não foi logado 
            return false;
        }
    } else {
        // Não foi logado 
        return false;
    }
}

function esc_url($url) {
 
    if ('' == $url) {
        return $url;
    }
 
    $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url);
 
    $strip = array('%0d', '%0a', '%0D', '%0A');
    $url = (string) $url;
 
    $count = 1;
    while ($count) {
        $url = str_replace($strip, '', $url, $count);
    }
 
    $url = str_replace(';//', '://', $url);
 
    $url = htmlentities($url);
 
    $url = str_replace('&', '&', $url);
    $url = str_replace("'", ''', $url);
 
    if ($url[0] !== '/') {
        // Estamos interessados somente em links relacionados provenientes de $_SERVER['PHP_SELF']
        return '';
    } else {
        return $url;
    }
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      No código abaixo, funciona perfeitamente quando chamo: dominio.com.br/noticia/todas
       
      <?php
          $url = (isset($_GET['url'])) ? $_GET['url'] : 'principal';
          $url = array_filter(explode('/', $url));
          //var_dump($url);
          $file = $url[0] . '.php';
          if (is_file($file)) {
              include $file;
          } else {
              include '404.php';
          }
          ?>
       
      Porém, quero usar variáveis com ? e &, tipo: dominio.com.br/busca/?campo=assunto
       
      Como faço pra conseguir isso?
       
      Valeu!!!
    • Por ILR master
      Fala pessoal, tudo na boa?
      Eu uso o wamp para desenvolver e testas meu site antes de jogar no servidor.
      A dúvida é o seguinte:
       
      No servidor, eu consigo ler as variáveis numa boa, mas no localhost não. Meu código no index está assim:
       
      $atual = (isset($_GET['pg'])) ? $_GET['pg'] : 'principal';
      $permissao = array('principal','contribua','quem-somos','politica-de-privacidade','termos-de-uso','evento','busca','galeria','galerias','clickbanner','noticia','noticias','contato','video');
      if(substr_count($atual, '/') > 0){
          $atual = explode('/', $atual);
          $pagina = (file_exists($atual[0]. '.php') && in_array($atual[0], $permissao)) ? $atual[0] : 'erro';
          $pg1 = $atual[1];
          $pg2 = $atual[2];
          $pg3 = $atual[3];
          $urltitulo = $atual[3];
      }else{
          $pagina = (file_exists($atual. '.php') && in_array($atual, $permissao)) ? $atual : 'erro';
          $codigo =0;
      };
       
      No servidor, quando chamo: dominio.com.br/pagina/variavel
      ele já identifica as variáveis  $pg1 = $atual[1]; e $pg2 = $atual[2];
      print $pg1 = pagina
      print $pg2 = variavel
      Ele me tras os resultados 

      No localhost não. Ele não reconhece as variáveis

      Alguém sabe como arrumo isso no wamp?
       
      At,
    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.