Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

felini

[Resolvido] foreach e arrays

Recommended Posts

Fala galera!

 

Estou fazendo um sistema para a empresa em que trabalho porém como o pessoal precisa pra "ontem" estou fazendo as pressas e tipo, não tenho banco de dados nem nada, isso eu vou criar depois com a versão 2.0 orientado a objeto e tudo mais.

 

Enfim, o sistema é um cadastro de orçamento. No caso o fornecedor deve acessar este formulário e preencher o valor que ele nos cotaria o produto dele.

 

Porém, existem produtos COM fabricantes e SEM fabricantes, exemplo, só queremos cotar refrigerante Coca-Cola e Pepsi, então vai ter um checkbox para o fornecedor marcar qual ele quer nos vender por aquele valor.

 

Segue abaixo o formulário .html de TESTE

<table id="produtos" width="100%" cellspacing="0" cellpadding="0" align="center">
    <tr>
        <td class='ini'>código</td>
        <td class='ini' width="350">produto</td>
        <td class='ini'>unidade</td>
        <td class='ini'>preço</td>
        <td class='ini'>fabricante</td>
    </tr>
    <tr>
        <td>4323</td>
        <td>AÇUCAR CONFEITEIRO</td>
        <td>KG</td>
        <td><input type="text" size="8" class="precoProduto" name="val[4323][ACUCAR CONFEITEIRO][KG]" /></td>
        <td> </td>
    </tr>
    <tr>
        <td>3233</td>
        <td>AÇUCAR CRISTAL</td>
        <td>KG</td>
        <td><input type="text" size="8" class="precoProduto" name="val[3233][ACUCAR CRISTAL][KG]" /></td>
        <td> </td>
    </tr>
    <tr>
        <td>4411</td>
        <td>AÇUCAR MASCAVO</td>
        <td>KG</td>
        <td><input type="text" size="8" class="precoProduto" name="val[4411][ACUCAR MASCAVO][KG]" /></td>
        <td><input type="checkbox" name="marca[1]" value="Sadia" />Sadia<br />
        <input type="checkbox" name="marca[1]" value="Perdigao" />Perdigao<br />
        </td>
    </tr>
    <tr>
        <td>23421</td>
        <td>AÇUCAR MASCAVOIII</td>
        <td>KG</td>
        <td><input type="text" size="8" class="precoProduto" name="val[23421][AÇUCAR MASCAVO III][KG]" /></td>
        <td><input type="checkbox" name="marca[2]" value="Teste 1" />Teste 1<br />
        <input type="checkbox" name="marca[2]" value="Teste 2" />Teste 2<br />
        </td>
    </tr>
    <tr>
        <td>44876</td>
        <td>AÇUCAR PRETO</td>
        <td>KG</td>
        <td><input type="text" size="8" class="precoProduto" name="val[44876][ACUCAR PRETO][KG]" /></td>
        <td><input type="checkbox" name="marca[3]" value="Teste 3" />Teste 3<br />
        <input type="checkbox" name="marca[3]" value="teste 5" />Teste 5<br />
        </td>
    </tr>
</table>

Enfim, veja que o name é val[iD][DESCRICAO][uNIDADE]. Estou conseguindo pegar e tratar estes dados certinho, inclusive o valor que o fornecedor preencheu. O problema está em resgatar o CHECKBOX para determinado produto. Segue abaixo o PHP que resgata estes dados com o foreach.

 

    foreach ($_REQUEST["val"] AS $id_pro => $nome_pro)
    {
        foreach ($nome_pro AS $produto => $valor_pro)
        {
            foreach ($valor_pro AS $unidade => $preco)
            {
                if (!empty($preco))
                {
                    foreach($_REQUEST["marca"] AS $marca)
                    {
                        echo $id_pro . " - " . $produto . " - " . $unidade . " - " . $preco . " - " . $marca . "<br>";
                        //echo $id_pro . " - " . $produto . " - " . $unidade . " - " . $preco . "<br>";
                    }
                }
            }
        }
    }

Preciso que, quando exista checkbox para determinado produto, ele resgate valor do checkbox marcado.

 

Agradeço a quem me ajudar agora.

 

Como preciso disso pra ontem estamos fazendo em HTML. Assim que o pessoal estiver usando isso, começo o desenvolvimento com banco de dados e relacionamentos para que eu nao passe mais por isso! :P

 

Valeu ae!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala galera, um dos problemas eu matei! Agora está associando certo. Vejam como está:

 

Defini no HTML, um valor no campo de INPUT checkbox:

 

 

<input type="checkbox" name="marca[4411][1]" value="Sadia" />Sadia<br />
<input type="checkbox" name="marca[4411][1]" value="Perdigao" />Perdigao<br />

 

 


    $idFabricante = array ("4411","23421","44876");
    


    foreach ($_REQUEST["val"] AS $id_pro => $nome_pro)
    {
        foreach ($nome_pro AS $produto => $unidadeMedida)
        {
            foreach ($unidadeMedida AS $unidade => $preco)
            {
                if (!empty($preco))
                {
                    if (in_array($id_pro,$idFabricante))
                    {
                        foreach($_REQUEST["marca"] AS $marcaIdProd => $quemarca)
                        {
                            if ($marcaIdProd == $id_pro)
                            {
                                foreach ($quemarca AS $nomeMarca)
                                {
                                    echo $marcaIdProd . " - " . $id_pro . " - " . $produto . " Fabricante " . $nomeMarca ."<br>";
                                }
                            }
                            //echo $marca . " - " . $marca2 . "<br>";
                            //echo $id_pro . " - " . $produto . " - " . $unidade . " - " . $preco . " - " . $marca . "<br>";
                            //echo $id_pro . " - " . $produto . " - " . $unidade . " - " . $preco . "<br>";
                        }
                    }
                    else 
                    {
                        echo  $id_pro . " - " . $produto . " - " . $preco ."<br>";
                    }
                }
            }
        }
    }

 

Sei que está complicado, mas como a pressa é inimiga da perfeição e trabalho de porco se faz duas vezes.

 

O problema agora é que o input é do tipo checkbox, só que ele só traz um dos resultados escolhidos, quando marca-se dois, ele trás sempre o último.

 

Muito obrigado à todos que puderem dar dicas e ajudar! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é por que estão com o mesmo name.

O comportamento do checkbox é um pouco diferente dos outros controles, quando está desmarcado a variável POST do controle sequer é enviada ao servidor, por isso é melhor usar o isset() pra verificar se um checkbox está marcado.

Como você usou um value no seu checkbox, acho que quando só um está marcado, ele envia o valor apenas do checkbox marcado, e quando estão marcados ambos, como têm o mesmo name, apenas um deles é enviado.

Tente mudar isso para que os dois checkbox tenham o name diferente.

 

Se você usasse um framework como o CakePHP, poderia fazer isso mais organizado, mesmo com pouco tempo :-P

Mas como você já começou assim, boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É cara, sem banco de dados é quase impossível.

 

Usando um, você teria uma tabela de marcas e outra de produtos com uma coluna de referência à marca.

 

Daí, quando fosse incluir o produto vindo do checkbox marcado você consultaria a tabela produtos e faria um JOIN para tabela de marcas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala ae!

 

Desisti do check e usei radio.

 

Valeu aí! :)

 

Agora vou me reunir com a equipe pra começar o desenvolvimento de um software que faça isso dinamicamente, com importação de arquivo/usuários/produtos/grupos etc!

 

COM certeza ficará bem mais fácil e organizado!

 

Flwww!

 

Resolvido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.