GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Foreach erro: Invalid argument supplied for foreach()

php
array
Tags: #<Tag:0x00007f0093d19990> #<Tag:0x00007f0093d19800>

#1

Devo criar 20 inputs e no final imprimir todos os números das inputs logo abaixo do formulário em php,eis o código:

<?php

function repeteInput(){
    for($i = 1; $i <= 20; $i++){
        echo '<form method="post" action="repeteInput.php">Digite um número aqui<input type="text" name="produto[]"><br>';
    }echo '<input type = "submit" value="Enviar"></form>';
    $produtos = $_POST['produto'];
    foreach($produtos as $produto){
        echo $produto."<br>";
    }
}
echo repeteInput();

?>

Quando ponho o código para rodar no navegador aparece:

Invalid argument supplied for foreach() in C:\xampp\htdocs\24.04.2017\repeteInput.php on line 7 , e também aparece : Undefined index: produto in C:\xampp\htdocs\24.04.2017\repeteInput.php on line

  • O formulário aparece, já verifiquei o código e ele está exatamente igual ao que eu copiei no meu caderno, e ele havia funcionado no mesmo navegador em outro PC.

#2

Bom pelo erro, geralmente é porque o que está sendo passado no foreach() não é um array, então:
produtos não é um array
faz um print em $produtos para ver


#3

Coloquei :

foreach($produtos as $produto)
{
    print $produtos;
}

e continua aparecendo os mesmo erros


#4

No caso comenta o foreach e faz isso aqui:

$produtos = $_POST['produto'];
echo "<pre>"; print_r($produtos);
//coloca isso se caso nao comentou o foreach
die();

e me diz o que aparece


#5

É, após preencher os inputs apareceu isso:

Array
(
    [0] => 8
    [1] => 797
    [2] => 9
    [3] => 97
    [4] => 968
    [5] => 764
    [6] => 94
    [7] => 54
    [8] => 7
    [9] => 87624
    [10] => 4453
    [11] => 774
    [12] => 41
    [13] => 687
    [14] => 1
    [15] => 2
    [16] => 1
    [17] => 31
    [18] => 31
    [19] => 222
)

Sendo que ele deveria mostrar apenas os números, usando o foreach


#6

No trecho do foreach coloque um if antes…

...
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
     $produtos = $_POST['produto'];
     foreach($produtos as $produto){
         echo $produto."<br>";
     }
}
...

Assim ele só vai exibir o que o usuário marcou depois do submit…


#7

No caso que estamos fazendo é debugando o código na mão para ver o retorno.
Agora fiquei sem entender, pois $produtos realmente é um array


#8

Outra coisa, retire a linha do echo ‘<form…’ de dentro do for e coloque-a antes, assim você não cria um form por input…


#9

Grande LostSoldier o cara manja kkkk


#10

Manjo nada, só conheço a linguagem a uns 8 anos… :joy:


#11

kkkkkkkkk pouco tempo em