1
resposta

ja fiz o codigo ja copiei e so da erro

esta dando erro mesmo copiando o seu codigo e colocando no sistema nao resolve

( ! ) Notice: Undefined offset: 1 in C:\wamp1\www\bismarque\alura\strings-inicial\Usuario.php on line 27 Call Stack

Time Memory Function Location

1 0.0004 405256 {main}( ) ...\cadastro.php:0 2 0.0011 407208 Alura\Usuario->__construct( ) ...\cadastro.php:5 3 0.0011 407208 Alura\Usuario->setNomeSobrenome( ) ...\Usuario.php:13

<?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;
    }
}
<!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>Formulário de cadastro loja virtual</h1>

        <form action="cadastro.php" method="post">
            <div class="form-group">
                <label for="nome">Nome: </label>
                <input type="text" id="nome" name="nome" class="form-control" placeholder="Digite seu nome e sobrenome">
            </div>

            <div class="form-group">
                <label for="genero">Genero:</label>
                <select id="genero" name="genero" class="form-control">
                    <option>M</option>
                    <option>F</option>
                </select>
            </div>

            <div class="form-group">
                <label for="email">Email:</label>
                <input type="text" id="email" name="email" class="form-control" placeholder="Digite o seu email">
            </div>

            <div class="form-group">
                <label for="senha">Senha:</label>
                <input type="text" id="senha" name="senha" class="form-control" placeholder="Digite a sua senha">
            </div>

            <div class="form-group">
                <label for="telefone">Telefone:</label>
                <input type="text" id="telefone" name="telefone" class="form-control" placeholder="Digite a sua senha">
            </div>

            <div class="form-group">
                <label for="endereco">Endereço: </label>
                <input type="text" id="endereco" name="endereco" class="form-control" placeholder="Digite o seu endereço">
            </div>

            <div class="form-group">
                <label for="cep">CEP: </label>
                <input type="text" id="cep" name="cep" class="form-control" placeholder="Digite o seu CEP">
            </div>

            <button type="submit" class="btn btn-primary">Cadastrar</button>
        </form>
    </div>

</body>
</html>
1 resposta

Olá Bismarque, Tudo bem?

Sobre o erro informado o Notice Undefined offset: 1 in C:\wamp1\www\bismarque\alura\strings-inicial\Usuario.php on line 27 está ocorrendo porque o nome passado não contém espaços.

Por exemplo, o código abaixo gera o mesmo erro:

<?php
$nomeCompleto = "Rafael";
$partes = explode(" ", $nomeCompleto, 2);
var_dump($partes[0] === null);
var_dump($partes[1] === null);

O resultado é algo como:

bool(false)
PHP Notice:  Undefined offset: 1 in /home/runner/main.php on line 5
bool(true)

Neste caso o que ocorreu foi que o método explode tenta dividir o texto contido em nomeCompleto onde houver um " "(espaço em branco), mas o nome não tem espaços ("Rafael Sampaio" por exemplo tem um espaço separando Rafael de Sampaio).

O resultado do explode no caso onde não houve a divisão (neste caso pela falta do espaço) é uma array com apenas um elemento, neste caso a string "Rafael".

Quando ele tenta acessar o segundo elemento chamando $partes[1] ele usa um offset(o indice de acesso da array) que não existe, e portanto o interpretador do PHP exibe o Notice que você visualizou.

O erro não deve ocorrer se você enviar um nome com ao menos duas palavras separadas por um espaço.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software