Ir para conteúdo

POWERED BY:

Arquivado

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

paladino_php

Arrays ainda mais dinâmicos do que já são --'

Recommended Posts

Como eu faço pra dizer ao php que um item pertence a outro. Exemplo:

 

 

<label class="sel-sab4">
    <span class="data_sel_pizza">Sabor4</span>
    <select name="sel_sabor[]" class="select">
        <option value="0">Escolha uma opção</option>
                                            
                                            <?php
                                            $sp = "SELECT * FROM ger_pizzas";
                                            $qp = mysql_query($sp);
                                            $rp = mysql_num_rows($qp);
                                            if($rp > 0)
                                                {
                                                    while($l = mysql_fetch_object($qp))
                                                        {
                                                            $nomes    = array($l->nome);
                                                            $id       = array($l->id);
                                                            $selected = $l->nome;
                                                            $funcoes->Select($nomes, $id, $selected);    
                                                        }
                                                }
                                            ?>  
                                            
        </select>
    </label>

 

Imagine que tem 3 campos iguais a esse. Logo ao armazenar na session fica:

 

 

/* sabores das pizzas */
$_SESSION['venda']['pizza_sabores'] = $sabores_pizza;

 

Agora tem esse outro campo

 

 

<label>
                                        <span id="data_sel_pizza">Nome da pizza</span>
                                        <select name="sel_pizza[]" class="sel_pizza">
                                            <option value="0">Escolha uma opção</option>
                                            
                                            <?php
                                            $sp = "SELECT * FROM ger_pizzas";
                                            $qp = mysql_query($sp);
                                            $rp = mysql_num_rows($qp);
                                            if($rp > 0)
                                                {
                                                    while($l = mysql_fetch_object($qp))
                                                        {
                                                            $nomes    = array($l->nome);
                                                            $id       = array($l->id);
                                                            $selected = $l->nome;
                                                            $funcoes->Select($nomes, $id, $selected);    
                                                        }
                                                }
                                            ?>                                            
                                            
                                        </select>
                                    </label>

 

Que também se repete, digamos 3 vezes.

 

Quero recuperar os valores no foreach. Mas como dizer que o sel_sabor[] pertence ao sel_pizza[] ??

 

Para ilustrar tem uma imagem em anexo. Não estou utilizando tabelas. Atentem-se à linha com os sabores e o número 8 -> significa que cada pizza tem 4 sabores, para o foreach são apenas oito valores. Mas na vdd são quatro para cada. Vê se a imagem ajuda http://programacaocriativa.com.br/tela_sistema.fw.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria um array, certo. Mas como referenciar esses valores, sabe aquele nó que as vezes da na kbca e vc trava de vez... então sou agora. Se puder especificar melhor fico agradecido. ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode montar os arrays no HTML assim como faz no PHP

 

 

<select name="sel_pizza[1]">...
 
 
<select name="sel_sabor[1][1]"><!-- pizza 1, sabor 1 -->...
<select name="sel_sabor[1][2]"><!-- pizza 1, sabor 2 -->...
 
...
 
<select name="sel_sabor[99][99]"><!-- pizza 99, sabor 99 -->...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sempre tive vergonha de perguntar, mas, se não o fizer nunca vou aprender e sempre que me deparar com esse problema vou ficar batendo cabeça. Sempre tive dificuldade com esses malditos arrays multidimensionais e como acessá-los com o foreach.

 

Indo direto ao ponto

 

 

/* vamos brincar com arrays no PHP -> GO */
$_SESSION['id_cliente']  = $nome_cliente;
$_SESSION['tipo_venda']  = $tipo_venda;
$_SESSION['observacoes'] = $observacoes;
 
$_SESSION['vendas'] = array();
 
$_SESSION['vendas'] = array(
'pizzas_selecionadas' => $nome_pizza,
'tamanhos_pizzas' => $tamanho_pizza,
'qtd_sabores_pizzas' => $qtd_sabores,
'sabores_pizzas' => $sabores_pizza,
'bebidas_nomes' => $nome_bebida,
'bebidas_qtd' => $qtd_bebida,
'bebidas_sabores' => $sabor_bebida,
'acc_nome' => $nome_acc,
'acc_tamanho' => $tamanho_acc,
'acc_qtd' => $qtd_acc
);
Está ai o monstrinho, acredito que depois de domá-lo fica fácil mexer então, aos programadores que estiverem com um tempinho livre mesmo que 5 minutinhos, por favor, me ajudem a entender como isso funciona.
Vou postar o código para discutirmos juntos e tentar entender como se faz, blz
Estou acessando os índices e valores com o código abaixo, porém estou meio perdido e sem saber como relacioná-los.

<?php
    foreach($_SESSION['vendas'] as $indice)
        {
            foreach($indice as $indice1)
                {
                    echo $indice1.'<br />';
                }
        }
?>
Pode ser bobagem pra quem sabe exatamente o que está fazendo, mas como fui preguiçoso e não estudei bem esse assunto agora estou sendo punido --'.
Todo conteúdo dentro de $_SESSION['vendas'] = array() é multidimensional. Quero saber como relacioná-los.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, amigo. [inline]$_SESSION[/inline] é multidimensional (tem itens que são arrays).

 

[inline]$_SESSION['vendas'][/inline] não é multidimensional porque nenhum item dentro de [inline]$_SESSION['vendas'][/inline] é um array

 

 

print_r($_SESSION['vendas']);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade todos são um array... Look this print_r na sessão vendas

 

 

Array ( [pizzas_selecionadas] => Array ( [0] => 1 [1] => 6 ) [tamanhos_pizzas] => Array ( [0] => 3 [1] => 4 ) [qtd_sabores_pizzas] => Array ( [0] => 4 [1] => 4 ) [sabores_pizzas] => Array ( [0] => 1 [1] => 2 [2] => 2 [3] => 3 [4] => 6 [5] => 7 [6] => 9 [7] => 10 ) [bebidas_nomes] => Array ( [0] => Refri lata [1] => Refri 600 ml ) [bebidas_qtd] => Array ( [0] => 1 [1] => 1 ) [bebidas_sabores] => Array ( [0] => Coca Cola [1] => Fanta Laranja ) [acc_nome] => Array ( [0] => 0 [1] => Catupiry ) [acc_tamanho] => Array ( [0] => Médio [1] => Maracanã ) [acc_qtd] => Array ( [0] => 1 [1] => 1 ) )

 

mas bom isso porque já tinha feito tudo menos o print_r(isso que dá ficar o dia todo programando --')

 

O que dá pra tirar disso ai:

 

 

Array ( [pizzas_selecionadas] => Array ( [0] => 1 [1] => 6 )
 
São dua pizzas distintas com respectivos id: 1,6
 
[tamanhos_pizzas] => Array ( [0] => 3 [1] => 4 )
 
A pizza de id = 1 tem tamanho = 3 (que no caso seria grande, mas não vem ao caso)
A pizza de id = 6 tem tamanho = 4
 
...
 

 

ai caio no dilema, como acessar esses itens individualmente para tratá-los, ta entendendo. Porque estou trabalhando com id, mas pro cliente é interessante que eu exiba o nome do produto, não os identificadores... preciso executar queries diferentes, por exemplo uma para o nome das pizzas e outra para bebidas, que são tabelas diferentes. array é o que não falta isso que ta pegando rs

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?php

foreach($_SESSION['vendas'] as $key => $val)

{

$indices = array_values($val);

$associativo = array_intersect_assoc($indices, $_SESSION['vendas']['sabores_pizzas']);

 

echo '<ul>';

 

foreach($associativo as $i => $v)

{

$sp = "SELECT * FROM ger_pizzas WHERE id = $i;";

$qr = mysql_query($sp);

$rw = @mysql_num_rows($qr);

if($rw > 0)

{

$line = mysql_fetch_object($qr);

//echo '<li>'.$line->nome.'</li>';

}

}

 

echo '</ul>';

}

 

Saída:

 

Array ( [0] => 1 [1] => 6 ) -> Nomes dos produtos

Array ( [0] => 5 [1] => 4 ) -> Tamanho dos produtos

Array ( [0] => 4 [1] => 3 ) -> Quantidade de sabores

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 6 [5] => 9 [6] => 13 [7] => 0 ) -> Sabores

 

/* Comentários */

Como reordenar os índices dos sabores de forma que eu possa associá-los aos nomes dos produtos ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom que você está caminhando bastante sozinho. Isso é ótimo.

 

Voltando lá no HTML, se você continuar nomeando como [inline]<select name="sel_sabor[]"[/inline] você perde a referência de a qual pizza aquele sabor pertence. É importante informar isso, fica mais fácil pra você trabalhar e localizar depois:

 

[inline]<select name="sel_sabor[1][1][/inline]... primeiro sabor da primeira pizza.

Como reordenar os índices dos sabores de forma que eu possa associá-los aos nomes dos produtos ?

http://www.php.net/manual/en/function.ksort.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voltamos ao HTML rsrsrs.... tem alguma forma de fazer isso dentro do método clone() ? Porque senão teria que mudar tudo novamente... não que isso seja um problema, desde que não entre na POG tudo bem!

 

Uma coisa que não entendi Evandro, no caso somente os sabores teriam dois índices, certo!? Eu não teria que criar um loop dentro do HTML para montar essa estrutura toda ? Aliás estou cogitando essa ideia, fazer tudo no PHP mesmo. A ideia é ter um sistema simples e fácil pro cliente utilizar. Mas isso tá sendo tão complicado... agradeço sua ajuda nesse e no outro tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia me explicar extamente o quer fazer, acho q não entendi '-'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voltamos ao HTML rsrsrs.... tem alguma forma de fazer isso dentro do método clone() ? Porque senão teria que mudar tudo novamente... não que isso seja um problema, desde que não entre na POG tudo bem!

Tem que trocar na unha mesmo. Não é POG, é a necessidade. Se der uma aliviada aqui eu posto um exemplo funcionando pra você dar uma olhada

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<!DOCTYPE html>
<html lang="pt_BR">
    <head>
        <meta charset="utf-8" />
        <title>Exemplo</title>
    </head>

    <body>
        <p>Último pedido:</p>
        <pre>
        <?php

        if (sizeof($_POST)) {
            echo print_r($_POST, true);
        }?>
        </pre>
        <form action="" method="post" id="pedido">
            <p><button type="button">Adicionar pizza</button></p>
            <p><button type="submit">Finalizar pedido</button></p>
        </form>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script type="text/javascript">
(function ($){
    "use strict";
    var template_pizza, template_sabor, $frm_pedido;
    template_pizza = "<fieldset>" +
        "<legend>Pizza #_number_</legend>" +
        "<ol></ol>" +
        "<button type=\"button\">Adicionar sabor</button>" +
        "</fieldset>";
    template_sabor = "<li>" +
        "<select name=\"sabor[#_number_][]\">" +
        "<option value=\"\">Selecionar sabor</option>" +
        "<option value=\"1\">Muzzarela</option>" +
        "<option value=\"2\">Calabresa</option>" +
        "</select>" +
        "</li>";
    function nova_pizza() {
        var elemento = $(template_pizza.replace(
            "#_number_", $("fieldset", $frm_pedido).length + 1 + ""
        ));
        $(this.parentNode).before(elemento);
        elemento.find("button").on("click", novo_sabor);
    }
    function novo_sabor() {
        var $lista_sabores, index;
        $lista_sabores = $("ol", this.parentNode);
        index = $lista_sabores.parent().find("legend").html();
        $lista_sabores.append(template_sabor.replace(
            "#_number_", "" + index.replace(/\D/g, "")
        ));
    }
    $(function (){
        var $btn_pedido;
        $frm_pedido = $("#pedido");
        $btn_pedido = $frm_pedido.find("button[type=\"button\"]");
        $btn_pedido.click("on", nova_pizza).click();
    });
}(window.jQuery));
        </script>
    </body>
</html>

 

 

 

sel_sabor[o que vai aqui dentro ?][e aqui ?]

 

 

 

você pode montar os arrays no HTML assim como faz no PHP

 

 

 

<select name="sel_pizza[1]">...
 
 
<select name="sel_sabor[1][1]"><!-- pizza 1, sabor 1 -->...
<select name="sel_sabor[1][2]"><!-- pizza 1, sabor 2 -->...
 
...
 
<select name="sel_sabor[99][99]"><!-- pizza 99, sabor 99 -->...

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sensacional cara. Pra que eu possa adaptar as minhas necessidades, como eu faço pra trabalhar com PHP dentro desse plugin ?Acredite, já tentei inúmeras formas e nenhuma deu certo --'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade não é um plugin. É uma implementação até que simples.

 

Experimente este código, veja se ele elucida como você deve trabalhar:

function processa()
{

    printf("Recebido um pedido de %s pizzas:<br />", sizeof($_POST['sabor']));
    printf("<p>Detalhamento de cada pizza segue abaixo:</p>");
    $numero_pizza = 1;
    foreach ($_POST['sabor'] as $pizza) {
        printf("<p>número #%s:</p>", $numero_pizza);
        printf("<p>ID do(s) sabor(es):</p><ol>");
        foreach ($pizza as $sabor) {
            printf("<li>%s</li>", $sabor);
        }
        printf("</ol>");
        $numero_pizza += 1;
   }

}

sizeof($_POST) and processa();

Compartilhar este post


Link para o post
Compartilhar em outros sites

A consulta é de pesquisa ou inclusão?? Não sei como está sua modelagem. Eu trabalharia com uma tabela para pedidos que armazenaria os itens. Outra tabela para tipos de itens (pizza, refrigerante, sobremesa). Uma tabela para os sabores de pizzas e uma tabela para as pizzas montadas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostei do seu código e como programador me vi na obrigação de adaptá-lo para minha necessidade ao invés de postar todo o código e pedir pra vc fazer. Ai seria fácil! =p

 

Não que esteja sendo fácil fazer isso mas quero fazer eu mesmo. É uma consulta sql para popular os selects, porque senão tenho que colocar tudo na mão, tendeu?.

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.