Carcleo 4 Denunciar post Postado Agosto 3, 2012 Pessoal. Bom dia! Dei um print_r num array print_r($cores_array); E me retornou em tela assim: Array ( [0] => 1 [1] => 01_BRANCO [2] => 1 [3] => 01_BRANCO [4] => 1 [5] => 01_BRANCO [6] => 2 [7] => Preta [8] => 2 [9] => Preta ) Porem, preciso retirar os valores duplicados e use a função array_unique para eliminar as repetições $cores_unique = array_unique($cores_array); print_r($cores_unique); Deu um print_r no resultado e resultou assim Array ( [0] => 1 [1] => 01_BRANCO [6] => 2 [7] => Preta ) Acontece, que ele pegou os números dos índices também 0,1..6,7......... E eu gostaria que, alem de retirar os índices repetidos, ele tamabem arranjasse os índices tipo 0,1,2,3.... Assim: Array ( [0] => 1 [1] => 01_BRANCO [2] => 2 [3] => Preta ............. ) Há uma função que faça isso? Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Agosto 3, 2012 :seta: array_values :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 3, 2012 assim? $cores_unique = array_values(array_unique($cores_array)); Deu certo. Pode me ajudar nessa situação que não consigo sair dela? http://forum.imasters.com.br/topic/471634-busca-no-array-como-fazer/ Valeu Aproveitando. Deixa eu fazer duas perguntas? 1) o mysqli_fetch_all, para funcionar no servidor, tem que habiltar alguma coisa? 2) Porque esse script não funciona nem no ff nem no chrome. só no ie? function valida_carrinho(form, itens) { with (form) { j=0; for (var i=0; i < (itens-1)*2; i++) { if (elements(j).value > elements(j+1).value) { alert('Observe um dos produtos do carrinho\nVocê adicionou '+elements(j).value+' \nPorem, só tem '+ elements(j+1).value); elements(j).focus(); exit; } j=j+2; } form.submit(); } } Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Agosto 3, 2012 Aproveitando. Deixa eu fazer duas perguntas? 1) o mysqli_fetch_all, para funcionar no servidor, tem que habiltar alguma coisa? http://br2.php.net/manual/pt_BR/mysqli.requirements.php 2) Porque esse script não funciona nem no ff nem no chrome. só no ie? function valida_carrinho(form, itens) { with (form) { j=0; for (var i=0; i < (itens-1)*2; i++) { if (elements(j).value > elements(j+1).value) { alert('Observe um dos produtos do carrinho\nVocê adicionou '+elements(j).value+' \nPorem, só tem '+ elements(j+1).value); elements(j).focus(); exit; } j=j+2; } form.submit(); } } Provavelmente porque a função elements() só existe/funciona no IE. Porque só o IE possui o atributo form.itens, porque o IE enumera os elementos de forma diferente dos outros navegadores, enfim. Tem como postar a markup desse formulário aí?? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 3, 2012 Tem sim. Segue: <form method="post" action="altera_carrinho.php?op=atualizar" id="form_carrinho" name="form_carrinho"> <table BORDER=0 WIDTH="95%" align="center"> <tr BGCOLOR="#0080C0"><td align="center" colspan="9">Pedido: <?php echo $_SESSION["numped"]; ?></td></tr> <tr BGCOLOR="#004080"> <td align="center" width="30%">Produto</td> <td align="center" width="10%">Estoque</td> <td align="center" width="15%">PREÇO UNITÁRIO</td> <td align="center" width="15%">Quant.</td> <td align="center" width="15%">TOTAL</td> <td align="center" width="15%">EXCLUIR</td> </tr> <?php $QuerySQL_produtos = " select id_produtos_varejo, nome_produtos_varejo, preco_produtos_varejo, estoque_produtos_varejo from produtos_varejo " . $_SESSION["MeuCarrinhoAltera"]->QuerySQL_ObtemListaDeItens(). ") order by nome_produtos_varejo "; $Resultado = $MySQL->query($QuerySQL_produtos); $preco_total = 0.00; while(list($id, $nome, $preco, $estoque) = $MySQL->fetch_row($Resultado)) { //Computando preco total $preco_total = $preco_total + $_SESSION["MeuCarrinhoAltera"]->ObtemSubTotalDeUmItem($id,$preco); $_SESSION["valor_total_da_nota"] = $preco_total; ?> <tr> <td align='left'><font size=-1><?php echo $nome;?></font></td> <td align='center'><font size=-1><?php echo $estoque;?></font></td> <td align='center'>R$ <?php echo number_format($preco, 2, '.', '');?> </td> <td align='center'> <input style="text-align:right" type="text" id="<?php echo $id;?>" name="<?php echo $id;?>" size="2" value="<?php echo $_SESSION["MeuCarrinhoAltera"]->ObtemQuantidadeItem($id);?>" onkeypress="BloqueiaLetras();" /> <input type="hidden" id="<?php echo "hd".$id;?>" name="<?php echo "hd".$id;?>" value="<?php echo $estoque;?>" /> </td> <td align='center'>R$ <?php echo number_format($_SESSION["MeuCarrinhoAltera"]->ObtemSubTotalDeUmItem($id,$preco), 2, '.', '');?></td> <td align='center'><b> <a href="altera_carrinho.php?op=excluir&id_prod=<?php echo $id;?>">Excluir</a> </b></td> </tr> <?php } ?> <tr> <td align="center" bgcolor="#66FF99" colspan="7"> Valor Total da Nota: R$ <?php echo number_format($_SESSION["valor_total_da_nota"], 2, '.', '');?> </td> </tr> <tr> <td align="center" colspan="7"> <input type="button" onclick="return valida_carrinho(this.form, <?php echo $_SESSION["MeuCarrinhoAltera"]->QuantosItens();?>)" value="Atualizar" name="Atualizar" WIDTH="78" HEIGHT="20" /><br> </td> </tr> </table> </form> Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Agosto 3, 2012 Posta o markup gerado. Eu não tenho essas tabelas para chegar ao mesmo resultado que você :) Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 3, 2012 Ok. Se markup gerado for isso. O html esta aí. <form method="post" action="altera_carrinho.php?op=atualizar" id="form_carrinho" name="form_carrinho"> <table BORDER=0 WIDTH="95%" align="center"> <tr BGCOLOR="#0080C0"><td align="center" colspan="9">Pedido: 37</td></tr> <tr BGCOLOR="#004080"> <td align="center" width="30%">Produto</td> <td align="center" width="10%">Estoque</td> <td align="center" width="15%">PREÇO UNITÁRIO</td> <td align="center" width="15%">Quant.</td> <td align="center" width="15%">TOTAL</td> <td align="center" width="15%">EXCLUIR</td> </tr> <tr> <td align='left'><font size=-1>Doce de Menta</font></td> <td align='center'><font size=-1>20</font></td> <td align='center'>R$ 3.24 </td> <td align='center'> <input style="text-align:right" type="text" id="8" name="8" size="2" value="20" onkeypress="BloqueiaLetras();" /> <input type="hidden" id="hd8" name="hd8" value="20" /> </td> <td align='center'>R$ 64.80</td> <td align='center'><b> <a href="altera_carrinho.php?op=excluir&id_prod=8">Excluir</a> </b></td> </tr> <tr> <td align='left'><font size=-1>Pós de Mico Boa Sorte</font></td> <td align='center'><font size=-1>35</font></td> <td align='center'>R$ 2.33 </td> <td align='center'> <input style="text-align:right" type="text" id="7" name="7" size="2" value="20" onkeypress="BloqueiaLetras();" /> <input type="hidden" id="hd7" name="hd7" value="35" /> </td> <td align='center'>R$ 46.60</td> <td align='center'><b> <a href="altera_carrinho.php?op=excluir&id_prod=7">Excluir</a> </b></td> </tr> <tr> <td align="center" bgcolor="#66FF99" colspan="7"> Valor Total da Nota: R$ 111.40 </td> </tr> <tr> <td align="center" colspan="7"> <input type="button" onclick="return valida_carrinho(this.form, 2)" value="Atualizar" name="Atualizar" WIDTH="78" HEIGHT="20" /><br> </td> </tr> </table> </form> Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Agosto 4, 2012 Deixa eu ver se entendi. Os campos com nome NÚMERO são os itens do carrinho. E os campos com o nome HDNÚMERO é tipo o que você tem em estoque, certo?? function valida_carrinho(form) { "use strict"; var i, ln, elementos, buffer; buffer = {}; elementos = form.getElementsByTagName('input'); function check(el) { if (el.type === 'hidden') { if (!buffer[el.name]) { return buffer[el.name] = el.value; } if (buffer[el.name] < el.value) { return null; } } if (!buffer[el.name]) { return buffer['hd' + el.name] = el.value; } if (buffer['hd' + el.name] > el.value) { return null; } alert ('erro'); } for (i = 0, ln = elements.length; i < ln; i += 1) { check(elements.item(i)); } } Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 4, 2012 Sim. Para cada campo text que carrega a quantidade de itens no carrinho com id e name com números, eu crio um campo hidden que carrega a quantidade em estoque para aquele produto adicionado ao carrinho. Daí eu comparo o estoque com a quantidade que o cliente preencheu. Se a quantidade for maior que o estoque eu barro ele, exibo o alert, coloco o foco no campo e paro a execução do código. Detalhe: Essa numeração que forma o nome e a id do campo text, é a id do produto na base de dados{tabela mysql} Então. Diante desse quadro, O código seria esse mesmo? Teria como adicionar alguns comentários nele? Eu entendo pouco ainda e estou tendo um pouco de dificuldades de entender teu raciocínio. Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Agosto 5, 2012 Sim. Para cada campo text que carrega a quantidade de itens no carrinho com id e name com números, eu crio um campo hidden que carrega a quantidade em estoque para aquele produto adicionado ao carrinho. Daí eu comparo o estoque com a quantidade que o cliente preencheu. Se a quantidade for maior que o estoque eu barro ele, exibo o alert, coloco o foco no campo e paro a execução do código. Detalhe: Essa numeração que forma o nome e a id do campo text, é a id do produto na base de dados{tabela mysql} Tinha percebido, só precisava da confirmação. Então. Diante desse quadro, O código seria esse mesmo? A lógica é a mesma, haviam apenas alguns erros de sintaxe Teria como adicionar alguns comentários nele? Certamente function valida_carrinho(form) { "use strict"; // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode var i, ln, elements, buffer; // As variáveis que vamos usar buffer = {}; // Conforme formos passando pelos elementos, guardaremos aqui os valores elements = form.getElementsByTagName('input'); // pegamos todos os input's dentro do formulário function check(el) { if (el.type === 'hidden') { // Verificamos se é o elemento de estoque if (!buffer[el.name]) { // Verificamos se não passamos pelo elemento correspondente return buffer[el.name] = el.value; // Se não passamos, armazenamos o valor } if (buffer[el.name] <= el.value) { // Se já passamos e o valor escolhido é menor ou igual ao estoque return null; // Encerramos as verificações do elemento atual } } // Se não for o elemento de estoque if (!buffer[el.name]) { // Se não passamos pelo elemento de estoque return buffer['hd' + el.name] = el.value; // Guardamos o valor atual para testar depois } if (buffer['hd' + el.name] >= el.value) { // Se já passamos e o valor em estoque é maior ou igual ao atual return null; // Encerramos os testes } alert ('erro'); // Todos os testes falharam, o valor escolhido é menor que o estoque. } for (i = 0, ln = elements.length; i < ln; i += 1) { // Passamos por cada elemento do formulário if (check(elements.item(i)) === undefined) { // Se a checagem falhar... return false; // Encerramos o loop por aqui } } return true; // Tudo certo } Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 5, 2012 Melhorou. Porem, não estou conseguindo colocar a mensagem personalizada que o meu código tinha. Informando quantidade que ele adicionou no campo text e o estoque ele tem caso seja inferior e jogar o foco no campo de text realacionado a linha do erro. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 5, 2012 Oh meu Deus! Código exige atenção. Muiiiiiiiita atenção. Todos estavamos "comendo mosca". form.elements é um vetor e não uma função. Então, o correto seria form.elements[] e não form.elements(). Resolvido. O código ficou assim: function valida_carrinho(form, itens) { with (form) { j=0; for (var i=0; i < (itens-1)*2; i++) { if (elements[j].value > elements[j+1].value) { alert('Observe um dos produtos do carrinho\nVocê adicionou '+elements[j].value+' \nPorem, só tem '+ elements[j+1].value); elements[j].focus(); return (false); } j=j+2; } form.submit(); } } Obrigado a todos que contribuiram com respostas e principalmente ao memebro HappyHippyHippo do forum Portugal a programar. Mas fica a dúvida: O que seria mais correto e profissional fazer. with(form) { elements[] } Ou form.elements[] ? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 5, 2012 É. Mas aconteceu um imprevisto. Se houver apenas um produto no carrinho, a função não esta funcionando. Tem como corrigir esse erro? O botão de submit esta indo direto. Resolvido! Nova falta de atenção. i < (itens-1)*2 Se tiver apenas 1 produto no carrinho, fará: i < (1-1)*2I == i < (0)*2=0 Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 6, 2012 Não. Isso não esta funcionando. Como é que eu conto quantos campos input type=text tem em um formulário? Novamente. Lógica errada. function valida_carrinho(form, itens) { with (form) { j=0; for (var i=0; i < itens; i++) { if (elements[j].value > elements[j+1].value) { alert('Observe um dos produtos do carrinho\nVocê adicionou '+elements[j].value+' \nPorem, só tem '+ elements[j+1].value); elements[j].focus(); return (false); } j=j+2; } form.submit(); } } Vou acabar aprendendo JavaScript Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Agosto 6, 2012 O que seria mais correto e profissional fazer. with(form) { elements[] } Ou form.elements[] ? http://www.javascripttoolbox.com/bestpractices/#with http://net.tutsplus.com/tutorials/javascript-ajax/the-10-javascript-mistakes-youre-making/ (Erro 6) http://www.barryvan.com.au/2009/05/avoid-javascripts-with-keyword/ Compartilhar este post Link para o post Compartilhar em outros sites