1
resposta

Erro: Warning: Undefined array key 1 in C:\Users\kiran\OneDrive\Documentos\Programação\ALURA\PHP\strings-inicial\usuario.php on line 26

Ao realizar as aulas do conteúdo 1 "PHP Strings: Operações e expressões regulares" estou fazendo o passo a passo do professor, mas no meu está aparecendo a mensagem do título Warning: Undefined array key 1 in C:\Users\kiran\OneDrive\Documentos\Programação\ALURA\PHP\strings-inicial\usuario.php on line 26 ao abrir no Chrome, apesar de funcionar. Alguém poderia me ajudar a resolver? Segue o código da classe.

<?php

namespace Alura;

class Usuario
{

    private $nome;
    private $sobrenome;

    public function __construct(string $nome)
    {
        $this->setNomeSobrenome($nome);
    }

    private function setNomeSobrenome(string $nome)
    {

        $nomeSobrenome = explode(" ", $nome, 2);

        if ($nomeSobrenome[0] === "") {
            $this->nome = "Nome inválido";
        } else {
            $this->nome = $nomeSobrenome[0];
        }

        if ($nomeSobrenome[1] === null) {
            $this->sobrenome = "Sobrenome Inválido";
        } else {
            $this->sobrenome = $nomeSobrenome[1];
        }
    }

    public function getNome(): string
    {
        return $this->nome;
    }

    public function getSobrenome(): string
    {
        return $this->sobrenome;
    }
}

E segue o código da aba de cadastro:

<?php

require 'Usuario.php';

$usuario = new \Alura\Usuario($_POST['nome']);

?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="bootstrap.min.css">
    <title>Curso Strings</title>
</head>
<body>

<div class="mx-5 my-5">
<h1>Cadastro feito com sucesso.</h1>
<p>Seguem os dados de sua conta:</p>
<ul class="list-group">
    <li class="list-group-item">Primeiro nome: <?php echo $usuario->getNome(); ?></li class="list-group-item">
    <li class="list-group-item">Sobrenome: <?php echo $usuario->getSobrenome(); ?></li class="list-group-item">
    <li class="list-group-item">Usuário: </li class="list-group-item">
    <li class="list-group-item">Senha: </li class="list-group-item">
    <li class="list-group-item">Telefone: </li class="list-group-item">
    <li class="list-group-item">Email: </li class="list-group-item">
    <li class="list-group-item">Endereço: </li class="list-group-item">
</ul>
</div>
</body>
</html>
1 resposta

Olá Gabriel, tudo bem?

Gostaria de pedir desculpas pela demora em responder o seu tópico.

O erro que está aparecendo é uma mensagem de aviso (warning) que indica que uma chave de array está indefinida.

Isso pode ocorrer quando você tenta acessar uma posição de um array que não existe.

Repare neste trecho do seu código:

 $nomeSobrenome = explode(" ", $nome, 2);

E se o usuário digitar apenas o primeiro nome? Este array haverá apenas 1 posição com este primeiro nome, ou seja no código abaixo ele vai tentar localizar a posição 1 e não irá encontrar:

         if ($nomeSobrenome[1] === null) {
            $this->sobrenome = "Sobrenome Inválido";
        } else {
            $this->sobrenome = $nomeSobrenome[1];
        }

Uma solução para implementar seria da seguinte maneira:

        if (array_key_exists(1,$nomeSobrenome)) {
            $this->sobrenome = $nomeSobrenome[1];
        } else {
             $this->sobrenome = "Sobrenome Inválido";
        }

Veja que usando a função array_key_exists para verificar se a posição existe dentro do array.

Dessa forma, o código só irá acessar as posições do array se elas existirem.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓