Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

ERROR PHP Uncaught TypeError: must be of type string, null given

Olá **Alura, **

estou trabalhando junto com portal pcd (portadores de necessidades especiais) e estou ajudando eles a fazer o desenvolvimento do site. Estou com erro num formulario . Preciso fazer um insert so que os dados estão dando errado.

PReciso da ajuda de vocÊs porque estou agarrado no site, meu prazo está apertado.

Link do git: git@github.com:tiagobrandao03/pcd_curriculo.git

Erro:

Warning: Undefined array key "nome" in C:\xampp\htdocs\pcd_curriculo\index.php on line 12

Warning: Undefined array key "email" in C:\xampp\htdocs\pcd_curriculo\index.php on line 13

Warning: Undefined array key "contato" in C:\xampp\htdocs\pcd_curriculo\index.php on line 14

Warning: Undefined array key "genero" in C:\xampp\htdocs\pcd_curriculo\index.php on line 15

Warning: Undefined array key "raca" in C:\xampp\htdocs\pcd_curriculo\index.php on line 16

Warning: Undefined array key "estado" in C:\xampp\htdocs\pcd_curriculo\index.php on line 17

Warning: Undefined array key "deficiencia" in C:\xampp\htdocs\pcd_curriculo\index.php on line 18

Warning: Undefined array key "cid" in C:\xampp\htdocs\pcd_curriculo\index.php on line 19

Warning: Undefined array key "limitacao" in C:\xampp\htdocs\pcd_curriculo\index.php on line 20

Warning: Undefined array key "laudo" in C:\xampp\htdocs\pcd_curriculo\index.php on line 21

Warning: Undefined array key "cargo" in C:\xampp\htdocs\pcd_curriculo\index.php on line 22

Warning: Undefined array key "interesse" in C:\xampp\htdocs\pcd_curriculo\index.php on line 23

Warning: Undefined array key "formacao" in C:\xampp\htdocs\pcd_curriculo\index.php on line 24

Warning: Undefined array key "expectativasalarial" in C:\xampp\htdocs\pcd_curriculo\index.php on line 25

Warning: Undefined array key "modelotrabalho" in C:\xampp\htdocs\pcd_curriculo\index.php on line 26

Warning: Undefined array key "regimetrabalho" in C:\xampp\htdocs\pcd_curriculo\index.php on line 27

Warning: Undefined array key "preferenciacontato" in C:\xampp\htdocs\pcd_curriculo\index.php on line 28

Warning: Undefined array key "redessociais" in C:\xampp\htdocs\pcd_curriculo\index.php on line 29

Fatal error: Uncaught TypeError: Modelo\Curriculo::__construct(): Argument #2 ($nome) must be of type string, null given, called in C:\xampp\htdocs\pcd_curriculo\index.php on line 29 and defined in C:\xampp\htdocs\pcd_curriculo\src\Modelo\Curriculo.php:54 Stack trace: #0 C:\xampp\htdocs\pcd_curriculo\index.php(29): Modelo\Curriculo->__construct(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) #1 {main} thrown in C:\xampp\htdocs\pcd_curriculo\src\Modelo\Curriculo.php on line 54
8 respostas

Oi Tiago! Tudo bem?

As mensagens de "Undefined array key" ocorrem porque o PHP está tentando acessar índices inexistentes em $_POST, já que os campos do formulário não possuem o atributo name. Para que o PHP reconheça os valores enviados, adicione name a cada campo de entrada do formulário. Exemplo:

<li>
    <div class="row">
        <div class="col">
            <label for="nome">Nome</label>
            <input type="text" class="form-control" id="nome" name="nome" placeholder="nome">
        </div>
        <div class="col">
            <label for="email">Email</label>
            <input type="email" class="form-control" id="email" name="email" placeholder="email@email.com">
        </div>
    </div>
</li>

Você deve fazer isso para todos os outros campos, utilizando o atributo name. Outro detalhe é que você tem campos de idade e cidade, mas eles não estão sendo utilizados no construtor da classe. Verifique isso também.

Espero ter ajudado. Abraços e bons estudos!

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

Olá Alura,

eu estpu com esse erro aqui agora:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function Modelo\Curriculo::__construct(), 19 passed in C:\xampp\htdocs\pcd_curriculo\index.php on line 29 and exactly 21 expected in C:\xampp\htdocs\pcd_curriculo\src\Modelo\Curriculo.php:54 Stack trace: #0 C:\xampp\htdocs\pcd_curriculo\index.php(29): Modelo\Curriculo->__construct(NULL, 'Akita Akita', 'akita@gmail.com', '31 99994455', 'Masculino', 'branco', 'MG', 'audi\xC3\xA7\xC3\xA3o', 'Audi\xC3\xA7\xC3\xA3o', 'Audi\xC3\xA7\xC3\xA3o', 'Audi\xC3\xA7\xC3\xA3o', 'Administra\xC3\xA7\xC3\xA3o', 'Adsminsitracao', 'Administra\xC3\xA7\xC3\xA3o', '5000', '', 'Integral', '31 99994455', 'facebook.com/jo...') #1 {main} thrown in C:\xampp\htdocs\pcd_curriculo\src\Modelo\Curriculo.php on line 54

O link do git Link do git: git@github.com:tiagobrandao03/pcd_curriculo.git

Tiago, esse novo erro é referente ao que comentei de você ter campos de idade e cidade, mas eles não estão sendo utilizados no construtor da classe. Para resolver, você precisa incluir esses campos de idade e cidade no construtor do arquivo index.php ou retirar esses atributos do seu modelo.

Fico à disposição.

Eu consegui incluir os dados e agora está com esse erro.

Uncaught TypeError: Repositorio\CurriculoRepositorio::__construct(): Argument #1 ($pdo) must be of type Repositorio\PDO, PDO given, called in C:\xampp\htdocs\pcd_curriculo\index.php on line 36 and defined in C:\xampp\htdocs\pcd_curriculo\src\Repositorio\CurriculoRepositorio.php:14 Stack trace: #0 C:\xampp\htdocs\pcd_curriculo\index.php(36): Repositorio\CurriculoRepositorio->__construct(Object(PDO)) #1 {main} thrown in C:\xampp\htdocs\pcd_curriculo\src\Repositorio\CurriculoRepositorio.php on line 14

O link do git Link do git: git@github.com:tiagobrandao03/pcd_curriculo.git

Oi Tiago!

A classe CurriculoRepositorio está esperando um parâmetro do tipo Repositorio\PDO, mas você está passando uma instância da classe global PDO do PHP. Para corrigir,em CurriculoRepositorio.php deixe da seguinte forma:

private \PDO $pdo;

  /**
   * @param PDO $pdo
   */
  public function __construct(\PDO $pdo)
  {
      $this->pdo = $pdo;
  }

Além disso, em CurriculoRepositorio.php você está vinculando 21 parâmetros com bindValue, mas sua consulta INSERT INTO só define 20 colunas e estava pulando um número. Modifique para:

$statement->bindValue(1,$curriculo->getNome());
$statement->bindValue(2,$curriculo->getEmail());
$statement->bindValue(3,$curriculo->getContato());
$statement->bindValue(4,$curriculo->getIdade());
$statement->bindValue(5,$curriculo->getGenero());
$statement->bindValue(6,$curriculo->getRaca());
$statement->bindValue(7,$curriculo->getEstado());
$statement->bindValue(8,$curriculo->getCidade());
$statement->bindValue(9,$curriculo->getDeficiencia());
$statement->bindValue(10,$curriculo->getCid());
$statement->bindValue(11,$curriculo->getLimitacao());
$statement->bindValue(12,$curriculo->getLaudo());
$statement->bindValue(13,$curriculo->getCargo());
$statement->bindValue(14,$curriculo->getInteresse());
$statement->bindValue(15,$curriculo->getFormacao());
$statement->bindValue(16,$curriculo->getExpectativa_Salarial());
$statement->bindValue(17,$curriculo->getModelo_Trabalho());
$statement->bindValue(18,$curriculo->getRegime_Trabalho());
$statement->bindValue(19,$curriculo->getPreferencia_Contato());
$statement->bindValue(20,$curriculo->getRedes_Sociais());
$statement->execute();

Por fim, no arquivo index.php, você está usando cidade no lugar de idade. Modifique para:

$curriculo = new Curriculo(
null,
$_POST['nome'],
$_POST['email'],
$_POST['contato'],
$_POST['idade'],
$_POST['genero'],
$_POST['raca'],
$_POST['estado'],
$_POST['cidade'],
$_POST['deficiencia'],
$_POST['cid'],
$_POST['limitacao'],
$_POST['laudo'],
$_POST['cargo'],
$_POST['interesse'],
$_POST['formacao'],
$_POST['expectativa_salarial'],
$_POST['modelo_trabalho'],
$_POST['regime_trabalho'],
$_POST['preferencia_contato'],
$_POST['redes_sociais']

);

Com isso, os dados serão salvos no banco de dados, como mostro na imagem a seguir:

Abraços e bons estudos!

solução!

Consegui! Tava cheio de erros e eu estava preocupado por causa do meu prazo. Muito obrigado!

Olá Alura,

eu preciso passar um campo de datetime e tive um erro aqui:

link do github: git@github.com:tiagobrandao03/pcd_curriculo.git

erro.

Fatal error: Uncaught TypeError: Modelo\Curriculo::__construct(): Argument #22 ($criado_em) must be of type DateTime, string given, called in C:\xampp\htdocs\pcd_curriculo\index.php on line 33 and defined in C:\xampp\htdocs\pcd_curriculo\src\Modelo\Curriculo.php:55 Stack trace: #0 C:\xampp\htdocs\pcd_curriculo\index.php(33): Modelo\Curriculo->__construct(NULL, 'Fabio Souza', 'fabiosouza@gmai...', '31 99994455', '21', 'masculino', 'branco', 'MG', 'Belo Horizonte', 'audicao', 'audicao', 'audicao', 'audicao', 'audicao', 'Administracao', 'Administracao', '5000', 'Integral', 'Integral', '31 99994455', 'facebook.com/jo...', '2024-11-04T07:4...') #1 {main} thrown in C:\xampp\htdocs\pcd_curriculo\src\Modelo\Curriculo.php on line 55

Oi Tiago!

Vi que você postou uma dúvida separada sobre o problema da data e já foi resolvido. Conte com a Alura na sua jornada.

Abraços e bons estudos!