Ir para conteúdo

POWERED BY:

Arquivado

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

Caio Salgado Nepomuceno

You have an error in your SQL syntax

Recommended Posts

Então pessoal, estou terminando meu TCC e estou transpondo o mesmo para um novo template.

Estou usando o método $_SERVER['PHP_SELF'], vamos aos códigos:

 

A página Home.php começa com:

<?php
   if (isset($_POST['login'])){ //Se o botão de Login existir
    require "php/funcoes.class.php"; //Classe de funções
    $funcao = new funcoes();
    $funcao -> conecta(); // Conecta ao BD
    $funcao -> sqllogin($_POST['email'],$_POST['senha']); //Verifica se os campos batem com os do BD
  }else{
?>

SqlLogin:

public function sqllogin($email, $senha){
$buscar = mysql_query("SELECT * FROM login WHERE email='$email' AND senha='$senha'") or die (mysql_error());
if (mysql_num_rows($buscar) == 1)
{
$usuario = mysql_fetch_array($buscar);
session_start();//INICIA A SESSÃO
$_SESSION["id_user"] = $usuario[id_pess6_fk];


switch ($usuario[id_nivel_fk]){
case 1: 
$_SESSION["level"] = "emp"; 
header("Location: emp/empresa.php");
break;


case 2: 
$_SESSION["level"] = "alu"; 
header("Location: alu/Aluno.php");
break;


case 3: 
$_SESSION["level"] = "adm"; 
header("Location: adm/Administrador.php");
break;
}
}else{ ?>
        <script>alert("Login ou senha inválidos");</script>
<script>location.href = 'Home.php';</script>
   <?php }
}

 

O Formulário de login esta no header, é este aqui:

<header class="grid col_12">
  <br>
  <div class="col_4">SpotJob  <input name="pesquisa" type="text"/>
    <a href="#"><i class="icon-search"></i></a> //Esta é a pesquisa no BD, ainda não fiz :)
  </div>
    <div class="pull-right col_7 align-right">
      <form name="frmlogin" method="post" action="<?php $_SERVER['PHP_SELF'] ?>"> //Form de LOGIN
        Email <input name="email" type="email" value=""/>
        Senha <input name="senha" type="password" value=""/>      
        <button class="margin5 button small" name="login" type="submit">Entrar</button>
        <br>
        <a href="#" class="align-right pull-right">Esqueceu a senha?</a>
      </form>
    </div>
 </header>

 

Quando eu faço login com email e senha corretos ou não, este é o erro apresentado:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@hotmail.com AND senha =' at line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta no SqlLogin fazer o Seguinte:

public function sqllogin($email, $senha){
$sql_busca = "SELECT * FROM login WHERE email='$email' AND senha='$senha'";
var_dump($sql_busca); // Faz um var_dump de seu código
$buscar = mysql_query($sql_busca) or die (mysql_error());
if (mysql_num_rows($buscar) == 1)
{
$usuario = mysql_fetch_array($buscar);
session_start();//INICIA A SESSÃO
$_SESSION["id_user"] = $usuario[id_pess6_fk];
 
 
switch ($usuario[id_nivel_fk]){
case 1: 
$_SESSION["level"] = "emp"; 
header("Location: emp/empresa.php");
break;
 
 
case 2: 
$_SESSION["level"] = "alu"; 
header("Location: alu/Aluno.php");
break;
 
 
case 3: 
$_SESSION["level"] = "adm"; 
header("Location: adm/Administrador.php");
break;
}
}else{ ?>
        <script>alert("Login ou senha inválidos");</script>
<script>location.href = 'Home.php';</script>
   <?php }
}

Poste aqui, o resultado do var_dump.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, não deu outra, funcionou de primeira!

Agora, para meu entendimento, o que estava acontecendo?

E também quero saber o qual a função deste var_dump, pois olhei na documentação do PHP e não entendi muito bem.

 

Tenho outro problema no sqllogin:

Quando coloco informações erradas, ele me retorna isso aqui:

YJbPHyU.png

Não quero que este erro SQL em vermelho apareça para o usuário, somente o alert ali já esta de bom tamanho.

De primeira pensei que isso fosse problema bem aqui:

$buscar = mysql_query($sql_busca) or die(mysql_error());

Então tirei o die, deixando somente o mysql_query para que caísse no else da verificação logo abaixo.
Nos meus conhecimentos, e pela minha lógica, isso daria certo. Mas o resultado continua sendo o mesmo da print acima. Help ? ;--;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, o var_dump, lhe retorna seu código meio técnico, com o numero de strings, inteiros..(etc). Caso não queira, é so tirar a linha "var_dump($sql_busca); // Faz um var_dump de seu código". Estas com o problema ainda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, como eu disse, a sua solução com o var_dump me ajudou e fez o login funcionar quando entro com informações corretas.

 

Porém, eu fui testar o mesmo com informações erradas e o que aparece é um erro SQL que mostra o código sql inteiro, inclusive o usuário e senha (PRINT ACIMA).

 

A princípio, pensei que isso estava sendo causado pelo "die (mysql_error());", mas eu o retirei e mesmo assim aquele erro sql em vermelho continua a aparecer. Conseguiu entender agora? :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aquele SQL "Vermelho", é o resultado do var_dump. Faz o seguinte, retire a linha "var_dump($sql_busca);".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes:

$buscar = mysql_query("SELECT * FROM login WHERE email='$email' AND senha='$senha'") or die (mysql_error());

Depois:

$sql_busca = "SELECT * FROM login WHERE email='$email' AND senha='$senha'";
var_dump($sql_busca); // Faz um var_dump de seu código
$buscar = mysql_query($sql_busca) or die (mysql_error());

Por que deste método deu certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim vamos dizer fica mais "Organizado". Se deu certo, tranquilo. Era isso seu problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal, sempre que precisar de algo é so dar um toque. Só marque como Resolvido, se gostou da ajuda, me dê um ponto positivo :)

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.