Array
(
)

Tela de Login, não funciona na nuvem, nem puxar infos. via get

João Vitor
   - 04 dez 2014

Bom dia,

Fiz um sistema em php que local funciona perfeitamente, porém quando subi para meu servidor online e começou apresentar alguns problemas, o primeiro é na tela de login que não está funcionando, ele não consegue fazer as comparações não sei o por que, não sei se é por causa do MD5, enfim não consegui diagnosticar o problema. A conexão com o banco está correta, pois fiz alguns testes.

Segue minha tela de login:
#Código

<?php


session_start(); 
require ("includes/database.php");




$btEntrar = isset($_POST["btEntrar"]);


if ($btEntrar =='Entrar'){
// Recupera Login e Senha
$login = isset($_POST["login"]);  
$pass = isset($_POST["pass"]) ? md5(trim($_POST["pass"])) : FALSE;


if((!empty($login)) and (empty($pass)))
{ 
echo "<script> alert('Preencha os campos de Login e Senha!'); </script>"; 
} 
else if((empty($login)) and (!empty($pass)))
{ 
echo "<script> alert('Preencha os campos de Login e Senha!'); </script>";  
} 
else
{ 
echo "<script> alert('Preencha os campos de Login e Senha!'); </script>"; 
}  


$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM usuarios WHERE login = ?";
$q = $pdo->prepare($sql);
$q->bindvalue(1, $_POST['login'], PDO::PARAM_STR); 
$q->execute();


if($q) 
{ 
foreach ($q as $dados) 
{


if(($pass) == ($dados["pass"])) 
{ 
// Grava os dados da sessao e redireciona o usuário 
$_SESSION["usuario"] = stripslashes($dados["login"]); 
$_SESSION["nome_usuario"]    = $dados["nome_usu"]; 
$_SESSION["id_usu"]    = $dados["id_usu"];
$_SESSION["tp_usu"]    = $dados["tp_usu"];
$_SESSION["depto"] = $dados["depto"];


header("Location:index.php");
}
else 
{ 
echo "<script> alert('Usuário ou Senha Inválidos!'); </script>";
} 
}


}
else 
{ 
echo "<script> alert('Usuário ou Senha Inválidos!'); </script>"; 
exit; 
} 


}
?> 
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<link rel="Stylesheet" href="index.css" />
<link rel="stylesheet" href="css/style.css" media="screen" type="text/css" />
<script src="js/bootstrap.min.js"></script>
</head>


<body>
<div class="container">


<div class="span10 offset1">
<form class="form-horizontal menu_css" action="index.php" method="post">
<div id="menu_css1" class="control-group">
<span></span>
<label class="control-label"><h2>Login :</h2></label>
<div class="controls">


<input name="login" type="text"  placeholder="Usuário"> 
</div>
</div>
<div class="control-group">
<div class="controls">
<input name="pass" type="password"  placeholder="Senha"> 
</div>
</div>


 <button type="submit" id="btEntrar" name="btEntrar" value="Entrar" >LOGIN </button>
</form>




</div>
</div>
</body>
</html>

O segundo problema que estou tendo é para trazer o id via get seja para alterar, visualizar, ou deletar ele dá o seguinte erro:

Parse error: syntax error, unexpected T_INT_CAST in /home/control/public_html/os/read.php on line 5
#Código
Meu código está desse jeito:
$id = null;if ( !empty((int)$_GET['id'])) {
$id = $_REQUEST['id'];
}

Alguem pode me ajudar?

Vlw!

Gifagundes
   - 05 dez 2014

Olá João,

1º CASO
Sinceramente não entendi como você conseguiu fazer funcionar local... o problema deve ser o seguinte, vi que várias vezes você escreveu algo assim $variavel = isset($_POST["campo"]); O retorno disso é TRUE ou FALSE, ele vai dizer verdadeiro ou falso a depender se a variavel existe só isso. Agora para atribuir o valor do request você tem que colocar $variavel = $_POST['campo'] , ai sim você está pegando o valor desejado.

Nesse primeiro caso aqui ... => $btEntrar = isset($_POST["btEntrar"]); ... aqui está retornando TRUE ou FALSE. Para fazer a comparação if ($btEntrar =='Entrar') você precisa colocar $btEntrar = $_POST['btEntrar'] sem o isset.

2º CASO
O problema que dá é porque você está usando o (int), trate o $_GET['id'] fora do empty. Esta assim :
if ( !empty((int)$_GET['id'])) {

Deixe assim, tratando a variavel antes:
$_GET['id'] = (int) $_GET['id'];
if ( !empty($_GET['id'])) {

Ronaldo Lanhellas
   - 06 dez 2014


Citação:
Bom dia,

Fiz um sistema em php que local funciona perfeitamente, porém quando subi para meu servidor online e começou apresentar alguns problemas, o primeiro é na tela de login que não está funcionando, ele não consegue fazer as comparações não sei o por que, não sei se é por causa do MD5, enfim não consegui diagnosticar o problema. A conexão com o banco está correta, pois fiz alguns testes.

Segue minha tela de login:
#Código

<?php


session_start(); 
require ("includes/database.php");




$btEntrar = isset($_POST["btEntrar"]);


if ($btEntrar =='Entrar'){
// Recupera Login e Senha
$login = isset($_POST["login"]);  
$pass = isset($_POST["pass"]) ? md5(trim($_POST["pass"])) : FALSE;


if((!empty($login)) and (empty($pass)))
{ 
echo "<script> alert('Preencha os campos de Login e Senha!'); </script>"; 
} 
else if((empty($login)) and (!empty($pass)))
{ 
echo "<script> alert('Preencha os campos de Login e Senha!'); </script>";  
} 
else
{ 
echo "<script> alert('Preencha os campos de Login e Senha!'); </script>"; 
}  


$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM usuarios WHERE login = ?";
$q = $pdo->prepare($sql);
$q->bindvalue(1, $_POST['login'], PDO::PARAM_STR); 
$q->execute();


if($q) 
{ 
foreach ($q as $dados) 
{


if(($pass) == ($dados["pass"])) 
{ 
// Grava os dados da sessao e redireciona o usuário 
$_SESSION["usuario"] = stripslashes($dados["login"]); 
$_SESSION["nome_usuario"]    = $dados["nome_usu"]; 
$_SESSION["id_usu"]    = $dados["id_usu"];
$_SESSION["tp_usu"]    = $dados["tp_usu"];
$_SESSION["depto"] = $dados["depto"];


header("Location:index.php");
}
else 
{ 
echo "<script> alert('Usuário ou Senha Inválidos!'); </script>";
} 
}


}
else 
{ 
echo "<script> alert('Usuário ou Senha Inválidos!'); </script>"; 
exit; 
} 


}
?> 
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<link rel="Stylesheet" href="index.css" />
<link rel="stylesheet" href="css/style.css" media="screen" type="text/css" />
<script src="js/bootstrap.min.js"></script>
</head>


<body>
<div class="container">


<div class="span10 offset1">
<form class="form-horizontal menu_css" action="index.php" method="post">
<div id="menu_css1" class="control-group">
<span></span>
<label class="control-label"><h2>Login :</h2></label>
<div class="controls">


<input name="login" type="text"  placeholder="Usuário"> 
</div>
</div>
<div class="control-group">
<div class="controls">
<input name="pass" type="password"  placeholder="Senha"> 
</div>
</div>


 <button type="submit" id="btEntrar" name="btEntrar" value="Entrar" >LOGIN </button>
</form>




</div>
</div>
</body>
</html>

O segundo problema que estou tendo é para trazer o id via get seja para alterar, visualizar, ou deletar ele dá o seguinte erro:

Parse error: syntax error, unexpected T_INT_CAST in /home/control/public_html/os/read.php on line 5
#Código
Meu código está desse jeito:
$id = null;if ( !empty((int)$_GET['id'])) {
$id = $_REQUEST['id'];
}

Alguem pode me ajudar?

Vlw!

Partindo do principio que tudo estava funcionando normalmente no seu servidor local e quando você colocou na hospedagem passou a apresentar erros que antes não tinham, você poderia comparar o seu php.ini com o php.ini da hospedagem e ver as diferenças, provavelmente tem alguma configuração habilitada em um que não está em outro. Isso é muito comum.

Din
|
MVP
Pontos: 45
    09 dez 2014

Outro ponto de atenção... de uma olhada nesses links

http://www.devmedia.com.br/evitando-sql-injection-em-aplicacoes-php/27804
http://www.devmedia.com.br/evitando-sql-injection-em-aplicacoes-php/27804
http://www.devmedia.com.br/evitando-sql-injection-em-aplicacoes-php/27804

duas coisas que EU não faria...

receber os campos via post e não trata-los afim de evitar o sql-injetction (vc está usando o md5, mas não informou como fez a query)
Editar campos de usuários via get.... geralmente aparece o link na barra de endereços ou na barra de status, uma pessoa maliciosa poderia, através dos parâmetros passar um id de outra pessoa (caso você não o trate) e tracar/editar e tudo mais.

é só uma dica...