unisov Postado Novembro 7, 2009 Denunciar Share Postado Novembro 7, 2009 olatenho um formulario com 5 campos, onde o usuario digitara 5 nicks...mas ele não pode repetir os nicks em nenhum campos... não podem haver dois nicks iguais...algum pode me dar uma dica de como eu começo? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 8, 2009 Denunciar Share Postado Novembro 8, 2009 Crie um array com os elementos e um loop para percorrê-los. Em cada execução do loop você cria um loop aninhado (um dentro do outro) que percorre todos os valores anteriores e, se houver repetição, erro !É uma das formas mais simples de fazer. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 unisov Postado Novembro 20, 2009 Autor Denunciar Share Postado Novembro 20, 2009 olaseguindo um outro modelo eu fiz mais ou menos o q você falou...ficou assim:array=Array(); array[0]=document.getElementById("eso").value; array[1]=document.getElementById("eso2").value; array[2]=document.getElementById("eso3").value; array[3]=document.getElementById("eso4").value; array[4]=document.getElementById("eso5").value; for(var i = 0; i < 5; i++) { for(var j = i; j < 5; j++) { if(array[i] == array[j]) { ok = false; } } } if(!ok) { alert(ok); return false; }mas não deu certo...sera q fiz algo errado?ele sermpre retora "ok=false"imagino q isso aconteça por q ele sempre vai se econtrar com um valor igual quando esta perconrrendo o loop Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 20, 2009 Denunciar Share Postado Novembro 20, 2009 No código de retorno seria mais simples você deixar algo assim:if(!ok){ return true }else{ return false } Ou: return !okMas ocorre algum erro ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 unisov Postado Novembro 20, 2009 Autor Denunciar Share Postado Novembro 20, 2009 não é q acontece erro...o problema é q ele sermpre retorna ok=falsee isso é pra acontecer apenas quando houverem os campos iguais...como eu já disse, creio q o motivo disso seja o fato de sempre haverem valores iguais nos dois loops...tipo... quando o loop interno estiver percorrendo o loop externo ele os valores sempre iram se topar...ou estou errado? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 20, 2009 Denunciar Share Postado Novembro 20, 2009 Se possível, poste o código completo da função. Mas antes tente substituir pelo código que postei. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 unisov Postado Novembro 21, 2009 Autor Denunciar Share Postado Novembro 21, 2009 o form:<form onsubmit='return nickrepetido();' method='POST' action='index.php?act=atividade&id=".$id."'> <input name='eso' id='eso' type='text' value='".$row['eso']."' /> <input name='eso2' id='eso2' type='text' value='".$row['eso2']."' /> <input name='eso3' id='eso3' type='text' value='".$row['eso3']."' /> <input name='eso4' id='eso4' type='text' value='".$row['eso4']."' /> <input name='eso5' id='eso5' type='text' value='".$row['eso5']."' /> <input type='hidden' name='id' value='".$id."' /> <input type='submit' name='button' value='Atualizar' /> </form> o js: function nickrepetido(){ array=Array(); array[0]=document.getElementById("eso").value; array[1]=document.getElementById("eso2").value; array[2]=document.getElementById("eso3").value; array[3]=document.getElementById("eso4").value; array[4]=document.getElementById("eso5").value; for(var i = 0; i < 5; i++) { for(var j = i; j < 5; j++) { if(array[i] == array[j]) { ok = false; } } } if(!ok) { alert(ok); return false; } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 21, 2009 Denunciar Share Postado Novembro 21, 2009 Faça as modificações que eu falei. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 John Doe Postado Novembro 21, 2009 Denunciar Share Postado Novembro 21, 2009 É importante que você atribua o valor true à variável ok antes do loop, i.e., antes do código você bota:var ok = true; (resto do código) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 unisov Postado Novembro 21, 2009 Autor Denunciar Share Postado Novembro 21, 2009 eu fiz as modificaçoes e continuou como estava...acho q não estao me entendeno...veja essa parte do codigo if(array[i] == array[j])ele deveria retornar um erro sempre q econtrasse dois valores iguais...mas assim ele sempre vai econtrar dois valores iguais... então o erro sempre sera retornadoafinal quando o loop estiver sendo percorrido semrpe havera o encontro de array[0] com array[0], de array[1] com array[1], e assim por diante... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 21, 2009 Denunciar Share Postado Novembro 21, 2009 Como ficou o código após as modificações ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 unisov Postado Novembro 21, 2009 Autor Denunciar Share Postado Novembro 21, 2009 (editado) function nickrepetido(){ array=Array(); array[0]=document.getElementById("eso").value; array[1]=document.getElementById("eso2").value; array[2]=document.getElementById("eso3").value; array[3]=document.getElementById("eso4").value; array[4]=document.getElementById("eso5").value; var ok = true; for(var i = 0; i < 5; i++) { for(var j = i; j < 5; j++) { if(array[i] == array[j]) { ok = false; } } } if(!ok){ return true; }else{ alert(ok); return false; } } Editado Novembro 21, 2009 por unisov Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 21, 2009 Denunciar Share Postado Novembro 21, 2009 O motivo pelo qual não funciona é bem simples !Basta observar que você está comparando cada elemento X do combo com todos os elementos (incluindo o próprio X), o que fará com que sempre existam ítens iguais (afinal, X = X)O código também estava meio bagunçado, segue o código funcionando e organizado:function nickrepetido() { //Array de ítens array = new Array(); array[0] = document.getElementById("eso").value; array[1] = document.getElementById("eso2").value; array[2] = document.getElementById("eso3").value; array[3] = document.getElementById("eso4").value; array[4] = document.getElementById("eso5").value; //Faz a verificação var ok = true; for (var i = 0; i < 5; i++) { for (var j = i+1; j < 5; j++) { if (array[i] == array[j]) { alert("Dados repetidos !") return false } } } }Note que se não for especificado um valor de retorno a função retornará undefined. Nesse caso, o formulário será enviado da mesma forma e não haverá problema.Obs.:O código poderia ser organizado de forma mais inteligente, o que o tornaria até mais eficiente, mas deixei assim para não ficar confuso.Seria interessante o uso de classes ao invés de id's para esse tipo de códigoQualquer coisa posta aí ! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 unisov Postado Novembro 21, 2009 Autor Denunciar Share Postado Novembro 21, 2009 funcionando perfeitamente...muito obrigado Jonathan Queiroz porem eu me deparei com um novo problema, pois o script indentificava os campos vazios como dados repetidos...não sei se era a melhor forma de resolver o problema, mas resovi da seguinte forma, e agora ta 100%vlw mesmofunction nickrepetido() { //Array de ítens array = new Array(); if(document.getElementById("eso").value!=""){array[0] = document.getElementById("eso").value;} else {array[0] = 0;} if(document.getElementById("eso2").value!=""){array[1] = document.getElementById("eso2").value;} else {array[1] = 1;} if(document.getElementById("eso3").value!=""){array[2] = document.getElementById("eso3").value;} else {array[2] = 2;} if(document.getElementById("eso4").value!=""){array[3] = document.getElementById("eso4").value;} else {array[3] = 3;} if(document.getElementById("eso5").value!=""){array[4] = document.getElementById("eso5").value;} else {array[4] = 4;} //Faz a verificação var ok = true; for (var i = 0; i < 5; i++) { for (var j = i+1; j < 5; j++) { if (array[i] == array[j]) { alert("Dados repetidos !") return false } } } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 21, 2009 Denunciar Share Postado Novembro 21, 2009 Você pode fazer assim:function nickrepetido() { //Array de ítens array = new Array(); array[0] = document.getElementById("eso").value; array[1] = document.getElementById("eso2").value; array[2] = document.getElementById("eso3").value; array[3] = document.getElementById("eso4").value; array[4] = document.getElementById("eso5").value; //Faz a verificação var ok = true; for (var i = 0; i < 5; i++) { for (var j = i+1; j < 5; j++) { if (array[i] == array[j] && array[i]) { alert("Dados repetidos !") return false } } } }Note que o operador AND lógico (&&), se usando com variáveis não-booleanas, irá converter o valor para um tipo booleano. No caso de strings, são convertidas de acordo com sua quantidade de caracteres. Se for 0 (vazia), é convertido para false, caso contrário, true. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 unisov Postado Novembro 21, 2009 Autor Denunciar Share Postado Novembro 21, 2009 agora sim ficou 100%mais uma vez obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 21, 2009 Denunciar Share Postado Novembro 21, 2009 De nada cara.Qualquer coisa posta aí !Obs.:O tópico foi marcado como Resolvido. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
unisov
ola
tenho um formulario com 5 campos, onde o usuario digitara 5 nicks...
mas ele não pode repetir os nicks em nenhum campos... não podem haver dois nicks iguais...
algum pode me dar uma dica de como eu começo?
Link para o comentário
Compartilhar em outros sites
16 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.