Ir ao conteúdo

PHP Array indefinido num formulário PHP


Ir à solução Resolvido por MailingTester,

Posts recomendados

Postado

Olá, estou começando a estudar PHP e criando um formulário simples de cadastro para competições porém aparece o erro: Undefined array key 3 in C:\wamp\www\Exercícios PHP\Script.php on line 27

Porém o erro muda de linha cada vez que a idade muda no formulário, embora ainda mostre a mensagem que deveria aparecer(?), queria saber em parte eu estou errando ;-;

 

<?php

$categorias = [];
$categorias[]= 'infantil';
$categorias[]='adolescente';
$categorias[]='adulto';
//print_r(categorias);

$nome = $_POST['nome'];
$idade = $_POST['idade'];

//var_dump($nome);
//var_dump($idade);

if ($idade >=5 && $idade <=12) {
    for ($i=0; $i <= count($categorias); $i++) { 

		if ($categorias[$i] == 'infantil' ) {
			echo "O(a) nadador(a) ".$nome." compete na categoria infantil";
		}
	}
}

else if ($idade >=13 && $idade <=17) {
	for ($i=0; $i <= count($categorias); $i++) { 

		if ($categorias[$i] == 'adolescente' ) {
			echo "O(a) nadador(a) ".$nome." compete na categoria adolescente";
		}
	}
}

else {
	for ($i=0; $i <= count($categorias); $i++) { 

		if ($categorias[$i] == 'adulto' ) {
			echo "O(a) nadador(a) ".$nome." compete na categoria adulto";
		}
	}
}

 

  • Solução
Postado

Olá!

O array $categorias possui 3 índices:
0 = infantil
1 = adolescente
2 = adulto

Mas foi definido um for que vai de zero até 3, pois count($cagorias) é igual a 3.
Por isso o Undefined array key 3
pois $categorias[3] não existe.

Para solucionar defina o for assim:
 

for ($i=0; $i < count($categorias); $i++) { 

Dessa forma a variável $i só poderá ser incrementada enquanto for menor que 3, e nunca igual ou superior a 3.

PS
Acredito que essa seria uma solução mais inteligente para essa questão:
 

<?php

  $categorias = [
    'infantil'    => [5, 12],
    'adolescente' => [13, 17],
    'adulto'      => [18, 100]
  ];

  $nome  = $_POST['nome'];
  $idade = $_POST['idade'];

  if ($idade < 5 || $idade > 100) {
    die("A idade do(a) atleta " . $nome . " está fora do intervalo aceitável para competir.");
  }

  foreach ($categorias as $category => $range) {
    if ($idade >= $range[0] && $idade <= $range[1]) {
      echo "O(a) nadador(a) " . $nome . " compete na categoria $category";
    }
  }

 

Postado
2 horas atrás, MailingTester disse:

Olá!

O array $categorias possui 3 índices:
0 = infantil
1 = adolescente
2 = adulto

Mas foi definido um for que vai de zero até 3, pois count($cagorias) é igual a 3.
Por isso o Undefined array key 3
pois $categorias[3] não existe.

Para solucionar defina o for assim:
 

for ($i=0; $i < count($categorias); $i++) { 

Dessa forma a variável $i só poderá ser incrementada enquanto for menor que 3, e nunca igual ou superior a 3.

PS
Acredito que essa seria uma solução mais inteligente para essa questão:
 

<?php

  $categorias = [
    'infantil'    => [5, 12],
    'adolescente' => [13, 17],
    'adulto'      => [18, 100]
  ];

  $nome  = $_POST['nome'];
  $idade = $_POST['idade'];

  if ($idade < 5 || $idade > 100) {
    die("A idade do(a) atleta " . $nome . " está fora do intervalo aceitável para competir.");
  }

  foreach ($categorias as $category => $range) {
    if ($idade >= $range[0] && $idade <= $range[1]) {
      echo "O(a) nadador(a) " . $nome . " compete na categoria $category";
    }
  }

 

Muito obrigada, ajudou muito, eu realmente não conseguia entender onde eu estava errando. valeu dmss

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...