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 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;
}
}
?>Discussão (0)
Carregando comentários...