Ir para conteúdo

POWERED BY:

Arquivado

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

RonCyg

Problema estranho com Localhost

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.