Ir para conteúdo
Fórum Script Brasil
  • 0

[Erro] - Uninitialized string offset 0


joaoazl

Pergunta

Olá pessoal!
Estou tentando fazer uma validação de CPF usando o método Post, porém esta dando esse erro!


Warning: Uninitialized string offset 0 in C:\xampp\htdocs\curso_php\index.php on line 14

Fatal error: Uncaught TypeError: Unsupported operand types: string * int in C:\xampp\htdocs\curso_php\index.php:14 Stack trace: #0 C:\xampp\htdocs\curso_php\index.php(24): validaPrimeiroDigito('') #1 {main} thrown in C:\xampp\htdocs\curso_php\index.php on line 14

Como resolver?

segue abaixo meu codigo:

<?php
// $erro = "";
 
    if($_SERVER['REQUEST_METHOD'] == 'POST'){
 
        $cpf = limpaPost($_POST['cpf']);
 
        function validaPrimeiroDigito($cpf){
 
            $cpf = preg_replace( '/[^0-9]/is', '', $cpf);
 
            $sum = 0;
            for($index = 0; $index < 9; $index++){
                $sum += $cpf[$index] * (10 - $index);
            }
            $resto = ($sum * 10) % 11;
 
            if($resto < 10){
               return $cpf[9] == $resto;
            }
            return $cpf[9] == 0;
        }
 
        validaPrimeiroDigito($cpf);
       
        // function validaCpf($cpf, $erro){
        //     if(empty($cpf)){
        //         $erro = "[Erro] Campo não pode ser vazio!";
        //     }
        //     if(strlen($cpf) != 11){
        //         return false;
        //     }
 
        //     return true;
        // }
    }
 
    if(isset($_POST['reset']) == 'Reset'){
        $erro = '';
    }
 
    function limpaPost($valor){
 
        $valor = trim($valor);
        $valor = stripslashes($valor);
        $valor = htmlspecialchars($valor);
 
        return $valor;
    }
 
?>
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Esse tipo de erro, significa que a string não possuí offset 0. Ou seja, a string está vazia.

Há uma forma de corrigir o erro, que é utilizando a função isset(). https://www.php.net/manual/pt_BR/function.isset

Essa função vai verificar a existência da 'variável'.
Outra solução que você pode fazer, e essa talvez seja a melhor no seu caso...

É confirmar o que está chegando no seu POST.

TALVEZ trocar essa linha:
$cpf = limpaPost($_POST['cpf']);

Por:

$cpf = limpaPost($_POST['CPF']);

resolva o seu problema.

Mas é bom confirmar com var_dump ou print_r do POST pra saber o que está chegando na página.

Link para o comentário
Compartilhar em outros sites

  • 0

Eu gostei da função preg_replace, mas eu acredito que ela já substitui a função trim, strislashes e htmlspecialchars.

No seu código, tem dois $_POST, um com o índice 'cpf' e outro 'reset', mas não dá para saber quem manda essas informações.

Não vejo a necessidade de usar o recurso do function no php, dá para fazer tudo na rotina principal.

A seguir eu alterei o seu código, acrescentei um formulário que cria a solicitação POST, e ficou assim:

 

<?php
echo "<form method=post>cpf <input name=cpf></form>";
if(isset($_POST['cpf'])){ 
	$cpf = $_POST['cpf'];
	$cpf = preg_replace( '/[^0-9]/is', '', $cpf); 
	if (strlen($cpf)!=11){echo "cpf $cpf inválido!";exit;}
	$sum1=0; $sum2=0;
	for($index=0;$index<=8;$index++){$sum1+=$cpf[$index]*(10-$index);}
	for($index=0;$index<=9;$index++){$sum2+=$cpf[$index]*(11-$index);}
	$resto1=($sum1*10)%11; if ($resto1==10){$resto1=0;}
	$resto2=($sum2*10)%11; if ($resto2==10){$resto2=0;}
	if (($resto1==$cpf[9])and($resto2==$cpf[10])){
		echo "cpf $cpf válido!";} else {echo "cpf $cpf inválido!";}}

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...