Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

No momento de enviar os dados de cadastro do formulário aparece o erro abaixo, já tentei resolver sozinho diversas vezes mas não tive sucesso.

Aviso : Variável indefinida $__POST em C:\php\strings-inicial\cadastro.php na linha 5

Aviso : Tentando acessar o deslocamento do array no valor do tipo null em C:\php\strings-inicial\cadastro.php na linha 5

Aviso : Variável indefinida $__POST em C:\php\strings-inicial\cadastro.php na linha 5

Aviso : Tentando acessar o deslocamento do array no valor do tipo null em C:\php\strings-inicial\cadastro.php na linha 5

Erro fatal: Uncaught TypeError: App\Alura\Usuario::construct(): Argument #1 ($nome) deve ser do tipo string, null dado, chamado em C:\php\strings-inicial\cadastro.php na linha 5 e definido em C:\php\strings-inicial\src\Alura\Usuario.php:11 Stack trace: #0 C:\php\strings-inicial\cadastro.php(5): App\Alura\Usuario->construct(NULL , NULL) #1 {main} lançado em C:\php\strings-inicial\src\Alura\Usuario.php na linha 11

o meu codigo no arquivo Usuario ao meu ver tudo aparenta estar correto não estou conseguindo achar o erro em si:


namespace App\Alura;

class Usuario 
{
    private string $nome;
    private string $sobrenome;
    private string $senha;

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

        $this->validaSenha($senha);
    }

    private function setNomeSobrenome(string $nome) 
    {
        $nomeSobrenome = explode(" ",$nome, 2 );

        if ($nomeSobrenome[0] === "") {
             $this->nome = 'Nome invalido';
        } else {
             $this->nome = $nomeSobrenome[0];
        }

        if ($nomeSobrenome[1] === null) {
             $this->sobrenome = 'Sobrenome invalido';
        } else {
             $this->sobrenome = $nomeSobrenome[1];
        }

    }

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

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

    public function getSenha(): string
    {
        return $this->senha; 
    }

    private function validaSenha(string $senha): void
    {
        $tamanhoSenha = strlen(trim($senha));

        if ($tamanhoSenha > 6) {
            $this->senha = $senha;
        } else {
            $this->senha = "Senha invalida";
        }
    }  
}

a seguir o codigo do arquivo Cadastro.php

<?php

require 'autoload.php';

$usuario = new App\Alura\Usuario($__POST['nome'], $__POST['senha']);
$contato = new App\Alura\Contato($__POST['email'], $__POST['endereco'], $__POST['cep'], $__POST['telefone']);

?>

<!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:<?php echo $contato-> getUsuario(); ?> </li class="list-group-item">
    <li class="list-group-item">Senha:<?php echo $usuario-> getSenha(); ?> </li class="list-group-item">
    <li class="list-group-item">Telefone: <?php echo $contato-> getTelefone(); ?> </li class="list-group-item">
    <li class="list-group-item">Email: <?php echo $contato-> getEmail(); ?> </li class="list-group-item">
    <li class="list-group-item">Endereço: <?php echo $contato-> getEndereco(); ?> </li class="list-group-item">
</ul>
</div>
</body>
</html>
1 resposta
solução!

Voce escreveu a global "$_POST" com dois " _ " (underline). Sobre o erro fatal da linha 11, ele ocorre porque a global POST esta vazia e voce espera dados string para que o codigo funcione. Voce pode simplismente ignorar esse erro nao abrindo o arquivo cadastro.php sem antes ter enviado o formulario ou tratar a falta de dados com um if .

Desculpe os erros de falta de acentuacao, meu teclado esta em ingles e eu tenho preguica de trocar para pt_BR :)