Valor do indice do array em variável php
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 receitafunction 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 arrayfunction 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. }
}?>Discussão (0)
Carregando comentários...