RonCyg 0 Denunciar post Postado Maio 10, 2013 Olá pessoal, tenho procurado em diversos fóruns, inclusive gringos, mas não encontro a solução para o meu problema. Instalei o Apache, PHPMyAdmin e tudo mais na minha máquina manualmente porque pelo Wamp estava com problema pra acessar o PHPMyAdmin. Testei e me parece que está tudo OK.O problema é que fiz um formulário e ele está funcionando perfeitamente online. Mas localmente não. Segue o mesmo: <?php // função que mostra o erro no formulário function erro ($tipo,$msg="Sem informações."){ switch ($tipo){ case 1: echo "Formulário não enviado. "; break; case 2: echo "<h1>Erro no formulário:</h1>"; echo $msg; break; } } // pegando todas as variáveis do formulário $nome = $_POST["txt_nome"]; $endereco = $_POST["txt_endereco"]; $sexo = $_POST["rdo_sexo"]; $estadocivil = $_POST["slt_civil"]; $data = $_POST["txt_idade"]; $idade = $_POST["idade"]; $hobbie = $_POST["chk_hobbies"]; $comentario = $_POST["txa_comentario"]; // verifica o envio do formulário if (@$_POST["sbm_enviar"]=="") erro(1); else{ // variável de controle para verificar erro no preenchimento de cada campo $controle=false; // verifica se o campo NOME possui duas palavras utilizando a função strstr() para verificar se há espaço entre as palavras if (strstr($nome," ")){ $controle=true; } else { $msgcampo.="Insira seu nome completo.<br />\n"; } // verifica se o campo COMNENTÁRIO possui pelo menos duas palavras utilizando a função strstr() para verificar se há espaço entre as palavras if (strstr($comentario," ")){ $controle=true; } else { $msgcampo.="Insira um comentário maior do que duas palavras.<br />\n"; } // verifica se o campo ENDEREÇO possui ao menos duas letras if (strlen($endereco) < 2){ $msgcampo.="Preencha seu endereço completo.<br />\n"; $controle=true; } // verifica se o campo SEXO foi marcado if (empty($sexo)){ $msgcampo.="Selecione o sexo.<br />\n"; $controle=true; } // verifica se ao menos um item HOBBIE foi marcado if (empty($hobbie)){ $msgcampo.="Selecione ao menos um hobbie.<br />\n"; $controle=true; } // verifica se o campo DATA foi preenchido if (empty($data)){ $msgcampo.="Preencha o campo data de nascimento corretamente com DD/MM/AAAA.<br />\n"; $controle=true; } else{ if (!eregi("^[0-9]{2}/[0-9]{2}/[0-9]{4}$", $data)) { $msgcampo.="Preencha o campo data de nascimento corretamente com DD/MM/AAAA.<br />\n"; $controle=true; } } // verifica e exibe as mensagens de erro, se houver if($controle==true) erro(2,$msgcampo); else{} // arruma os valores do campo SEXO if ($sexo == "M"){ $sexo = "Masculino"; } else{ if ($sexo == "F") $sexo = "Feminino"; } // arruma os valore do campo ESTADO CIVIL if ($estadocivil == ""){ $estadocivil = "Não Determinado"; } if ($estadocivil == "s"){ $estadocivil = "Solteiro"; } if ($estadocivil == "c"){ $estadocivil = "Casado"; } if ($estadocivil == "v"){ $estadocivil = "Viúvo"; } if ($estadocivil == "d"){ $estadocivil = "Divorciado"; } if ($estadocivil == "j"){ $estadocivil = "Separado(a) Judicialmente"; } // arruma os valore do campo HOBBIES com um Array $k = array (8); $k[0] = "Esporte"; $k[1] = "Jardinagem"; $k[2] = "Pintura"; $k[3] = "Corte & Costura"; $k[4] = "Música"; $k[5] = "Meditação"; $k[6] = "Leitura"; $k[7] = "Jogos Eletrônicos"; ?> </p> <hr /> <table width="950" border="0" cellspacing="0" cellpadding="5"> <tr> <td width="182" align="right">Nome:</td> <td width="2"> </td> <td colspan="3"><?=$nome?></td> </tr> <tr> <td align="right">Endereço:</td> <td> </td> <td colspan="3"><?=$endereco?></td> </tr> <tr> <td align="right">Sexo:</td> <td> </td> <td colspan="3"><?=$sexo?></td> </tr> <tr> <td align="right">Estado Civil:</td> <td> </td> <td colspan="3"><?=$estadocivil?></td> </tr> <tr> <td align="right">Data de Nascimento:</td> <td> </td> <td width="143"><?=$data?></td> <td width="43" align="right">Idade:</td> <td width="530" align="left"><?=$idade?> anos</td> </tr> <tr> <td align="right">Hobbies:</td> <td> </td> <td colspan="3"> <? // Verifica os hobbies selecionados if(isset($hobbie)) { // Faz um loop no Array de checkbox for($i = 0; $i < count($hobbie); $i++) { echo "$k[$i]<br />"; } } ?> </td> </tr> <tr> <td align="right">Comentários:</td> <td> </td> <td colspan="3"><?=$comentario?></td> </tr> </table> <br /> <hr /> <p><a href="AD.html">Voltar para o formulário</a></p> <?php } ?> Esse código mostra as informações digitadas em um formulário. Online mostra corretamente. No localhost fica tudo em branco. O estranho é que se uso echo pra mostrar as informações, elas aparecem. Se deixo como está assim, não funciona. Só online mesmo. Alguém tem ideia do que pode ser isso? É alguma configuração do PHP? Obrigado.Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
RonCyg 0 Denunciar post Postado Maio 10, 2013 De qualquer forma, dei mais uma tentativa para o Wamp (baixei uma versão mais atualizada) e funcionou direitinho agora, só quando coloco senha que dá um erro... mas enfim, não vou precisar usar senha.Mas se alguém souber o que pode ser, se já teve algum problema assim e souber como resolver, fica de alerta para outra pessoa com o mesmo problema. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 10, 2013 Comece por parar de usar o supressor de erros ( @ ) para que seu código converse com você e te diga onde dói. Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Maio 10, 2013 Comece por parar de usar o supressor de erros ( @ ) para que seu código converse com você e te diga onde dói. Isso. Se reescrever: if (@$_POST["sbm_enviar"]=="") Para: if (!isset($_POST["sbm_enviar"]) or empty($_POST["sbm_enviar"])) Fica melhor e mais compreensível. Outra coisa que é bom verificar é se short_tags está habilitado em ambos os ambientes. Além de display_errors, é claro. É comum que em ambientes de produção a exibição de erros esteja desabilitada. Você falou que retorna uma mensagem de erro, mas você precisa dizer qual o conteúdo dessa mensagem... Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Maio 10, 2013 Além das observações, você pode simplificar esse IF veja: if($controle==true) erro(2,$msgcampo); else{} para: Mais elegante. ($controle==true) ? erro(2,$msgcampo) : false; Compartilhar este post Link para o post Compartilhar em outros sites
RonCyg 0 Denunciar post Postado Maio 10, 2013 Obrigado pelas respostas, como podem ver estou realmente aprendendo, iniciando.Fiz as mudanças nos códigos, retirei a @ no início e não acusou erros, e modifiquei as demais linhas também. Numa próxima vou seguir esse raciocínio. Valeu. -- edit Sobre as mensagens de erro que estavam acontecendo, eu realmente não lembro. Na verdade consegui resolver utilizando o Wamp. Eu estava usando o Xampp antes e não consegui acessar o MyPhpAdmin, mesmo colocando o usuário e a senha corretamente. Com o Wamp instalado eu consegui. Se eu mudo a senha no config, trava de novo. Como estou meio que apressado pra terminar esse trabalho (é pra faculdade) decidi usar sem senha mesmo por agora e verificar isso depois. Então provavelmente vou googlear ou voltarei a postar aqui com a mensagem de erro direitinho. :) Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 10, 2013 Nesse caso sim, Alaerte. Mas vale salientar que não se deve usar o operador ternário indiscriminadamente. Se aquilo que se estiver sendo testado e potencialmente sendo usado para quando o dito teste resultar em verdadeiro possuir uma quantidade de dados consideravel, usar o ternário é muito pior do que um par IF?ELSE tradicional. Se sim ou se não, pelo menos eu descobri isso num artigo do Blog do Fabio Potencier, o qual, inclusive, conta com um snippet de teste que prova o cenário Compartilhar este post Link para o post Compartilhar em outros sites
Enrico Pereira 299 Denunciar post Postado Maio 10, 2013 Ternário é só para condições com if e else. Se tiver que não ter else não funciona e se precisar de elseif fica uma caca. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 10, 2013 Ternário é só para condições com if e else. Se tiver que não ter else não funciona e se precisar de elseif fica uma caca. Nem me fala. Fiz um uma condição com dois ou três ELSEIF enfiados num ternário uma vez, só de onda. Putz! É mole, mole se perder nos parênteses. Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Maio 10, 2013 Nesse caso sim, Alaerte. Mas vale salientar que não se deve usar o operador ternário indiscriminadamente. Se aquilo que se estiver sendo testado e potencialmente sendo usado para quando o dito teste resultar em verdadeiro possuir uma quantidade de dados consideravel, usar o ternário é muito pior do que um par IF?ELSE tradicional. Se sim ou se não, pelo menos eu descobri isso num artigo do Blog do Fabio Potencier, o qual, inclusive, conta com um snippet de teste que prova o cenário É verdade, bem interessante, dei uma olhada no artigo Nem me fala. Fiz um uma condição com dois ou três ELSEIF enfiados num ternário uma vez, só de onda. Putz! É mole, mole se perder nos parênteses. É um saco Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Maio 10, 2013 2ª regra da calistenia de objetos: Evite [inline]else[/inline]. Fui ao nirvana quando consegui aplicar. Compartilhar este post Link para o post Compartilhar em outros sites
Enrico Pereira 299 Denunciar post Postado Maio 10, 2013 Sim, e elseif principalmente, else é o de menos. Sobre objects calisthenics tem estes excelentes slides: http://www.slideshare.net/rdohms/bettercode-phpbenelux212alternate Mas vamos voltar para o tópico pô... :lol: Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Maio 10, 2013 É verdade, daí a pouco estamos nós abordando outro assunto e nem percebemos... rsrsrs Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Maio 10, 2013 Nada, esses tais ternários são muito fodas, véio! Reescrevi da linha 88 até a 115 e ainda adicionei flexão de gênero no $estadocivil: // linha 88 até 115 $sexo = $sexo == "M" ? "Masculino" : "Feminino"; $estadocivil = $estadocivil == "s" ? "Solteir" : ($estadocivil == "c" ? "Casad" : ($estadocivil == "v" ? "Viúv" : ($estadocivil == "d" ? "Divorciad" : ($estadocivil == "j" ? "Separad" : "Indeterminado")))); $estadocivil .= $estadocivil != "Indeterminado" ? ($sexo == "Masculino" ? "o" : "a") : ""; Perfeitamente claro, simples e compreensível, não!? :rolleyes: Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 10, 2013 Sim, e elseif principalmente, else é o de menos. Sobre objects calisthenics tem estes excelentes slides: http://www.slideshare.net/rdohms/bettercode-phpbenelux212alternate Mas vamos voltar para o tópico pô... :lol: Não enche, é difícil a gente se entreter no fórum ultimamente. :P Muitíssimo interessante esse slide, mas eu discordo do #6 e de parte do #10. Beleza, devemos deixar nossas classes pequenas. Também não gosto de classes muito longas, mas tem umas que simplesmente não dá. A View, por exemplo, pelo menos no meu caso são duas coisas: A View propriamente dita e as CompositeViews que são outra. A segunda está perfeitamente separada, mas a primeira é uma coisa só, tudo relacionado para proporcionar uma View simples porém poderosa (na medida do possível, claro). Já o #10, me refiro especificamente a "não documente o problema, corrija-o" Existem problemas chatos de solucionar, alguns até complicados de se enxergar a primeira vista. Documentar uma explicação do porquê aquela ação está sendo tomada, até mesmo incluindo um cenário demonstrando o que aconteceria se não fosse feito vai inflar o código, potencialmente será algo que não estará na documentação da API, mas é vital para se eventualmente vir a dar um problema, tenhamos um espectro melhor do caso e possamos trabalhar numa nova solução. Confiar cegamente na memória é perigoso para isso. Eu mesmo já sofri com a preguiça do preg_match() em parar no primeiro casamento válido, depois de muitos testes (não automatizados Enrico chato :P) é que pude compreender e documentei pra não esquecer e/ou alertar quem lesse o código. Compartilhar este post Link para o post Compartilhar em outros sites
Enrico Pereira 299 Denunciar post Postado Maio 11, 2013 Pô, eu sou legal! :) Eu tenho classes de 700 linhas (abstração de HTTP), que simplesmente não dá pra extrair. Object Calisthenics são um enorme desafio e não aplicáveis à todos os casos. E no 10, eu documento pelo simples fato de que o PHP não possui tipagem de retorno e scalar type hinting, talvez documentar seja útil, o código tem que ser legível sem precisar de docs. mas que elas ajudam, ajudam. (eu disse os docblocks, nada de comentários horrorosos do tipo // multiplica dias, //endif, etc.). Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 11, 2013 700 linhas pra abstrair o HTTP inteiro? :o Putz! Só a minha Request tem umas 700-800 linhas de código (mais os comentários). Daí tem classe separada pra Response, Cookies, Headers, Header Fields... Compartilhar este post Link para o post Compartilhar em outros sites
Enrico Pereira 299 Denunciar post Postado Maio 11, 2013 Não.. 700 linhas para a Request, mas já estou providenciando uma refactoring B), apesar de que menos de 500 linhas não vai ficar (com os comentários). Eu acho que tamanho de código não significa nada, é muito subjetivo. Compartilhar este post Link para o post Compartilhar em outros sites