lordfokas Posted June 27, 2012 at 03:59 AM Report #465817 Posted June 27, 2012 at 03:59 AM (edited) Ora bem, vou começar por situar toda a gente. Eu estou a fazer um jogo de browser, é o meu projecto pessoal já há uns anos. Á medida que vou ganhando mais capacidades, vou descartando código velho, e eventualmente recomeçar do zero quando chego a situações em que acho que o meu código tem muito que melhorar. Esta é a terceira vez que começo o projecto do zero, e nunca pensei que me fosse dar problemas tão graves, tão cedo, e tão estúpidos. Durante a criação do sistema de registo, quando fui para testar o que pensava ser um sistema já terminado (outros testes foram feitos a outros componentes do sistema, o ultimo era à componente server-side), apercebi-me que algo estava muito mal. Em primeiro lugar, o meu script PHP estava a lançar uma excepção por a password ser demasiado curta, o que chamou imediatamente a minha atenção. var_dump($_POST); indicava um array vazio. Outros métodos indicavam a mesma coisa. php://input, indicava a mesma coisa. verifiquei o php.ini, todos os valores estão em condições. não há campos disabled no form, o js não está a mudar nada relevante, até mudei para o método GET para testar, e a query string ia vazia. Inclusivamente, usei o firebug para procurar a origem do problema, e a única coisa que consegui determinar é que o browser não manda nada no POST. Testei tanto com o Firefox como o Chrome. Não faço mais ideia do que possa ser o problema, a única conclusão a que consegui chegar é que provém do cliente e não do servidor. Tinha esperanças que alguém detectasse alguma coisa que me escapou, e me ajudasse a resolver isto. Eis excertos relevantes do código fonte da página: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd%22> <html xmlns="http://www.w3.org/1999/xhtml%22> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="./resources/css/_override.css" type="text/css" /> <link rel="stylesheet" href="./resources/css/frame.css" type="text/css" /> <link rel="stylesheet" href="./resources/css/register.css" type="text/css" /> <script type="text/javascript" src="./resources/js/jquery.min.js" ></script> <script type="text/javascript" src="./resources/js/register.js" ></script> <title>Titallus</title> </head> <body> <div id="topbar"> </div> <div id="root"> <div id="header"> <div id="logo" class="headblock"> </div> <div id="nav" class="headblock"> <div id="playercount"> <span class="navblock"> Registered: 0 </span> | <span class="navblock"> Active: 0 </span> | <span class="navblock"> Online: 0 </span> </div> <div id="menu"> <span class="navblock"> <a href="./">Home</a> </span> | <span class="navblock"> <a href="./?m=login">Login</a> </span> | <span class="navblock"> <span class="here">Register</span> </span> | <span class="navblock"> <a href="./?m=rules">Rules</a> </span> | <span class="navblock"> <a href="http://forum.titallus.com%22>Forum</a> </span> </div> </div> </div> <div id="content-wrapper"> <div id="register"> <form action="./?m=form&f=register" method="post"> <div class="row secure"> Note that all of these fields, except for the nickname, are used only to log into the account and proving account ownership. Keep them secret. Also, use a nickname diferent from your username, for security reasons. </div> <div class="row"> <div class="row-desc"> Username </div> <div class="row-data"> <input type="text" id="user" maxlength="16" /> </div> <div class="row-error error" id="user-error"> * </div> </div> <div class="row"> <div class="row-desc"> Nickname </div> <div class="row-data"> <input type="text" id="nick" maxlength="16" /> </div> <div class="row-error error" id="nick-error"> * </div> </div> <div class="row"> <div class="row-desc"> Password </div> <div class="row-data"> <input type="password" id="pass" /> </div> <div class="row-error error" id="pass-error"> * </div> </div> <div class="row"> <div class="row-desc"> Confirm </div> <div class="row-data"> <input type="password" id="conf" /> </div> <div class="row-error ok" id="conf-error"> * </div> </div> <div class="row"> <div class="row-desc"> E-mail </div> <div class="row-data"> <input type="text" id="mail" maxlength="128" /> </div> <div class="row-error error" id="mail-error"> * </div> </div> <div class="row legal"> By registering, you agree to our Terms and Conditions and the Privacy Policy, both present in the Legal Stuff section of this website. </div> <div class="row"> <div class="submit"> <input type="submit" value="Register" id="submit" disabled="disabled" /> </div> </div> </form> </div> </div> <div id="footer"> <span> LordFokas ©2012 - All Rights Reserved </span> <span class="float-r"> <a href="./?m=news">News</a> <span class="footer-sep">|</span> <a href="./?m=support">Support</a> <span class="footer-sep">|</span> <a href="./?m=legal">Legal Stuff</a> <span class="footer-sep">|</span> <a href="http://devblog.titallus.com%22>DevBlog</a> <span class="footer-sep">|</span> <a href="./?m=changelog">Changelog</a> </span> </div> </div> </body> </html> var jsbuffer; $(document).ready(function(){ $("input").blur(regval); $("input").keyup(regval); $("input").click(regval); $("input").change(regval); regval(); }); function setError(id, status, message){ $(id).removeClass("error").removeClass("ok"); if(status == true){ $(id).addClass("error"); }else{ $(id).addClass("ok"); } $(id).html(message); } function setLock(status){ if(status == false){ $("#submit").removeAttr("disabled"); }else{ $("#submit").attr("disabled", "disabled"); } } function checkUser(){ var user = $("#user").val(); if(user.length < 6){ setError("#user-error", true, "Minimum 6 characters!"); return false; } $.ajax({url: "./?m=ajax&f=user&fd=" + user, async: false}).done(function(data){ jsbuffer = data; }); if(jsbuffer != "OK"){ setError("#user-error", true, "Username already taken!"); return false; }else{ setError("#user-error", false, "The username is valid!"); return true; } } function checkNick(){ var nick = $("#nick").val(); if(nick.length < 3){ setError("#nick-error", true, "Minimum 3 characters!"); return false; } if(nick.toUpperCase() == $("#user").val().toUpperCase()){ setError("#nick-error", true, "User and Nick can't be equal!"); return false; } $.ajax({url: "./?m=ajax&f=nick&fd=" + nick, async: false}).done(function(data){ jsbuffer = data; }); if(jsbuffer != "OK"){ setError("#nick-error", true, "Nickname already taken!"); return false; }else{ setError("#nick-error", false, "The nickname is valid!"); return true; } } function checkPass(){ var pass = $("#pass").val(); if(pass.length < 6){ setError("#pass-error", true, "Minimum 6 characters!"); return false; } setError("#pass-error", false, "The password is valid!"); return true; } function checkConf(){ if($("#pass").val() == $("#conf").val()){ setError("#conf-error", false, "The passwords match!"); return true; }else{ setError("#conf-error", true, "The passwords don't match!"); return false; } } function checkMail(){ var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; var mail = $("#mail").val(); if(!emailPattern.test(mail)){ setError("#mail-error", true, "Invalid Email address!"); return false; } $.ajax({url: "./?m=ajax&f=mail&fd=" + mail, async: false}).done(function(data){ jsbuffer = data; }); if(jsbuffer != "OK"){ setError("#mail-error", true, "Address already in use!"); return false; }else{ setError("#mail-error", false, "The address is valid!"); return true; } } function regval(){ var user = checkUser(); var nick = checkNick(); var pass = checkPass(); var conf = checkConf(); var mail = checkMail(); setLock(!(user && nick && pass && conf && mail)); } Edited June 27, 2012 at 06:42 AM by yoda
tiagotavares Posted June 27, 2012 at 06:40 AM Report #465822 Posted June 27, 2012 at 06:40 AM (edited) Boas, todos os teus inputs não tem o atributo name definido, o que vai no $_POST é o name não o id. //Está assim <input type="password" id="pass" /> //Devia ser assim <input type="password" id="pass" name="pass" /> Espero ter ajudado Edited June 27, 2012 at 06:42 AM by yoda 1 Report Tiago Tavares
lordfokas Posted June 27, 2012 at 03:24 PM Author Report #465973 Posted June 27, 2012 at 03:24 PM (edited) O que fui ensinado nas aulas, depois de já ter vários anos de experiência com HTML, é que tanto faz. Se um input tiver um ID, esse ID é usado em vez do Name. Eu nem sequer fazia ideia disso. No entanto, ontem à tarde, durante os ultimos testes que fiz, pus um name em todos os campos, e mesmo assim nada funcionou. Para mais, até vou testar uma coisa com o Firebug, vou voltar a por names em tudo e analisar o pacote HTML enviado, a ver se funciona com names e há outro problema por trás, ou é tudo a mesma coisa. No entanto, continuo a crer que não seja problema do Name. EDIT: WTF? Ontem testei a por os names nos inputs, continuava com o mesmo erro. Testei hoje, o pacote HTTP vai certinho, com tudo la dentro. Ou alguma coisa me escapou ontem durante os testes, ou então não sei. De qualquer forma, a minha consideração pelo ensino superior voltou a descer, e sinto-me um idiota, por ao fim de mais de 6 anos de experiência com HTML ter cometido um erro destes. A única coisa que me chateia é, porque é que ontem por volta desta hora quando testei com names não resolveu o problema, e hoje foi á primeira? :/ Obrigadão, tiagotavares! Podem fechar, está resolvido. Edited June 27, 2012 at 03:38 PM by lordfokas
HappyHippyHippo Posted June 27, 2012 at 03:26 PM Report #465976 Posted June 27, 2012 at 03:26 PM O que fui ensinado nas aulas, depois de já ter vários anos de experiência com HTML, é que tanto faz. Se um input tiver um ID, esse ID é usado em vez do Name. Eu nem sequer fazia ideia disso. No entanto, ontem à tarde, durante os ultimos testes que fiz, pus um name em todos os campos, e mesmo assim nada funcionou. Para mais, até vou testar uma coisa com o Firebug, vou voltar a por names em tudo e analisar o pacote HTML enviado, a ver se funciona com names e há outro problema por trás, ou é tudo a mesma coisa. No entanto, continuo a crer que não seja problema do Name. onde tiveste aulas ??? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
taviroquai Posted June 27, 2012 at 03:38 PM Report #465983 Posted June 27, 2012 at 03:38 PM (edited) Viva, @lordfokas Lê estas informações: http://www.w3.org/TR/html401/interact/forms.html#successful-controls "A successful control must be defined within a FORM element and must have a control name." Depois se clicares em control_name... http://www.w3.org/TR/html401/interact/forms.html#control-name "A control's "control name" is given by its name attribute" Lê tudo... Edited June 27, 2012 at 03:39 PM by taviroquai
lordfokas Posted June 27, 2012 at 04:13 PM Author Report #465998 Posted June 27, 2012 at 04:13 PM @HappyHippyHippo, Escola Superior de Tecnologia e Gestão, do Instituto Politécnico de Leiria. Os professores também se enganam. Há la muitos professores nabos, que não fazem ideia do que estão a fazer, mas este certamente não é um deles. @taviroquai, obrigado, depois desta experiência, já não me volto a enganar nisto. Enfim, com as experiências é que se aprende... Bem que este era um daqueles erros para cometer no inicio, não ao fim de uma mão cheia de anos nisto. Faz sempre bem no entanto... Foi assim que aprendi HTML: a mal. E PHP. E Javascript. E Java. E provavelmente outras linguagens que de repente não me surgem. De qualquer forma, obrigado pela ajuda 👍
taviroquai Posted June 27, 2012 at 05:00 PM Report #466013 Posted June 27, 2012 at 05:00 PM Boa, nunca deixes de investigar! 😉
tiagotavares Posted June 27, 2012 at 05:49 PM Report #466025 Posted June 27, 2012 at 05:49 PM (edited) O que fui ensinado nas aulas, depois de já ter vários anos de experiência com HTML, é que tanto faz. Se um input tiver um ID, esse ID é usado em vez do Name. Eu nem sequer fazia ideia disso. No entanto, ontem à tarde, durante os ultimos testes que fiz, pus um name em todos os campos, e mesmo assim nada funcionou. Para mais, até vou testar uma coisa com o Firebug, vou voltar a por names em tudo e analisar o pacote HTML enviado, a ver se funciona com names e há outro problema por trás, ou é tudo a mesma coisa. No entanto, continuo a crer que não seja problema do Name. EDIT: WTF? Ontem testei a por os names nos inputs, continuava com o mesmo erro. Testei hoje, o pacote HTTP vai certinho, com tudo la dentro. Ou alguma coisa me escapou ontem durante os testes, ou então não sei. De qualquer forma, a minha consideração pelo ensino superior voltou a descer, e sinto-me um idiota, por ao fim de mais de 6 anos de experiência com HTML ter cometido um erro destes. A única coisa que me chateia é, porque é que ontem por volta desta hora quando testei com names não resolveu o problema, e hoje foi á primeira? :/ Obrigadão, tiagotavares! Podem fechar, está resolvido. Eu estou agora a frequenter o ensino superior, ainda não tive nenhuma unidade curricular de desenvolvimento web e estou bastante curioso de saber como os professores leccionam as aulas. E sim não é a fazer testes, a ler livros e ouvir os profs falar que se aprende programação é mesmo a dar com a cabeça na parede vezes e vezes sem conta 😄 Edited June 27, 2012 at 09:44 PM by tiagotavares Tiago Tavares
lordfokas Posted June 27, 2012 at 08:49 PM Author Report #466043 Posted June 27, 2012 at 08:49 PM Depende dos testes, não sei a que te estavas a referir. Eu testo constantemente tudo o que produzo, quando crio por exemplo um script PHP, gosto de o fazer estoirar de todas as maneiras possíveis antes de fazer uma release. Se não tentares explorar todas as possiveis falhas, por mais certezas que tenhas que as coisas estão protegidas, e não testares tudo intensivamente, não tens como ter a certeza que tudo funciona bem. É raro em PHP haver uma falha nos meus scripts, e quando há, é sempre algo que eu não me lembrei de experimentar. Não só é saudavel para o código que produzes, como acabas sempre a aprender coisas novas com isso. Os livros, epá, é relativo. Depende dos livros. Eu quando leio um livro de programação, geralmente é documentação e não tutoriais. Gosto de sites como php.net e w3schools porque dão te uma especificação detalhada de tudo o que tens disponivel. Esses são bons. Mas nunca te vão ensinar nada, só te ajudam a ter menos trabalho quando precisas de desenvolver uma funcionalidade nova. No meio disso tudo, o que sobra mesmo são as horas perdidas a praticar. Leva tempo, e dá muitas chatices, mas é recompensador, e tenho o orgulho de dizer que tudo o que sei de PHP aprendi ás minhas custas, apenas com ajuda da documentação das funções, e algumas horas a pesquisar no google por causa de erros esquisitos. Não tive aulas onde me ensinassem, nem tão pouco segui tutoriais ou copiei código. Quanto mais esforço tiveres a produzir algo, melhor o resultado final, dentro de limites razoáveis obviamente. Uma coisa é certa, depois disto vai ser mais fácil para mim questionar aquilo que acho que sei, e não tomar os meus conhecimentos como garantidos. Sinceramente acho que me fez bem.
tiagotavares Posted June 27, 2012 at 09:45 PM Report #466048 Posted June 27, 2012 at 09:45 PM (edited) Estava a falar de testes de avaliação 😄 Edited June 27, 2012 at 09:45 PM by tiagotavares Tiago Tavares
lordfokas Posted June 27, 2012 at 11:00 PM Author Report #466060 Posted June 27, 2012 at 11:00 PM Oh, isso não é nada. São avaliações. Só servem para mostrar o que sabes.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now