Solucionado (ver solução)
Solucionado
(ver solução)
18
respostas

COMO FAÇO UM SELECT COM MAIS DE UMA CONDIÇÂO WHERE? ESTA DANDO ERRO.

$login = DB::connection('mysql')->select('select id from users where email=? AND  password=?',[$email] ,[$senha]);

POREM DA O SEGUINTE ERRO

(1/1) FatalErrorException syntax error, unexpected '$nome' (T_VARIABLE)

ISSO EM LARAVEL

18 respostas

Oi Emerson,

Pode postar aqui o seu código completo?

Pela mensagem de erro, o problema não é no select, pois ele está dando erro numa variável chamada $nome, que não está nesse seu código do select. Deve ser problema em outra parte do código.

<?php namespace App\Http\Controllers;;

use Illuminate\Support\Facades\DB;
use Request;

Class IntranetController extends Controller{
    public function VerificaLogin(){
        $email = Request::input('email');
        $senha = Request::input('senha');

        $login = DB::connection('mysql')->select('select id from users where email='$email' AND password='$senha'');
        if(empty($login)){
            return "usuario ou senha invalidos";
        }else{
            return view('intranet\index');
        }
    }


    }

Codigo Formulario ---

    <div class="form-group">


        <input type="text" class="form-control" name="email" id="inputEmail" placeholder="Endereço Email">

    </div>

    <div class="form-group">

        <input type="password" class="form-control" name="senha" id="inputPassword" placeholder="Senha">

    </div>
    <div class="forgot">
    <a href="reset.html">Esqueceu a senha?</a>
</form>

--- ajustei um dos problemas porem o erro persiste com outra variavel.

(1/1) FatalErrorException syntax error, unexpected '$email' (T_VARIABLE)

in IntranetController.php line 11

Agora o problema é na linha do select mesmo, com a variavel $email.

Pode ser porque precisa colocar as variaveis entre chaves, desse jeito:

$login = DB::connection('mysql')->select("select id from users where email='{$email}' AND password='{$senha}'");

E também colocar esse select em aspas duplas, pois dentro vão ter as aspas simples das variaveis.

Veja se desse jeito para de dar o erro.

Bom dia, Obrigado pela resposta. refiz toda a pagina mas agora estou com outro problema.

ReflectionException Class App\Http\Controllers\IntranetController does not exist

controller -- <?php namespace intranet\app\Http\LoginController;

use App\Http\Controllers\Controller; use Illuminate\Support\Facades\DB; use Request;

Class LoginController extends Controller{ public function logar(){

    $email = Request::input('email');
    $password = Request::input('password');
    $logar = DB::connection('mysql')->select('select id from users where email='{$email}' and password='{$password}'');

       if(empty($logar)) {
        return "Login e/ou Usuario Incorretos";
      }else{
          return view('welcome')->with('logar',$logar);
      }
}

}

-- routes

Route::get('/', function () { return view('login.login'); });

Route::post('/intranet/logar','IntranetController@logar');

oque pode estar errado?

Oi Emerson,

No seu arquivo de rotas você disse que o controller se chama IntranetController:

Route::post('/intranet/logar', 'IntranetController@logar');

Mas sua classe está com nome LoginController. Por isso está dando erro.

resolvido... erro de digitação... porem voltamos ao erro do sql

$logar = DB::connection('mysql')->select('select id from users where email='{$email}' and password='{$password}'');

porem da o seguinte erro.

(1/1) FatalErrorException syntax error, unexpected '{'

in LoginController.php line 15

quando coloco o Sql em ASPAS DUPLAS diz que a classe controller nao existe.

(1/1) FatalErrorException Class 'intranet\app\Http\Controller' not found

Testa sem as chaves então, mas com as aspas duplas:

$logar = DB::connection('mysql')->select("select id from users where email = '$email' and password = '$password' ");

mesma coisa, o erro da classe so desaparece se eu deixar com aspas simples...

Na verdade tem um jeito mais simples, sem precisar digitar o sql:

$logar = DB::connection('mysql')->table('users')->where([
    ['email', '=', '$email'],
    ['password', '=', '$password'],
])->get();

é complicado nao entender o framework direirto... :/

fiz a alteração mas o erro Class 'intranet\app\Http\Controller\Controller' not found

continua acontecendo, acho que e alguma coisa com a classe mesmo, mas nao sei como resolver.

Isso aí deve ser erro de alguma configuração do seu projeto.

Melhor gerar o controller via artisan, ao inves de digitar o código na mão, para não ter esses problemas.

Abra o terminal, acesse o diretório do projeto e digite o comando:

php artisan make:controller IntranetController

Assim ele já cria o controller no diretório correto e com o namespace certinho.

realmente agora parece que esta ok, porem ja verifiquei todas as permissoes deste usuario e mesmo assim da o seguinte erro.... tem alguma dica?

(2/2) QueryException SQLSTATE[HY000] [1045] Access denied for user 'laravel'@'localhost' (using password: YES) (SQL: select id from users where email='ti@rotoline.com' and password='ua2nqvgc')

in Connection.php line 647 at Connection->runQueryCallback('select id from users where email='ti@rotoline.com' and password='ua2nqvgc'', array(), object(Closure)) in Connection.php line 607 at Connection->run('select id from users where email='ti@rotoline.com' and password='ua2nqvgc'', array(), object(Closure)) in Connection.php line 326 at Connection->select('select id from users where email='ti@rotoline.com' and password='ua2nqvgc'') in IntranetController.php line 19 at IntranetController->logar()

Agora funcionou o código, porém está dando erro de acesso ao seu banco de dados.

As configurações do seu banco de dados ficam no arquivo database.php, na pasta config. Veja se os dados do seu mysql estão corretos.

Veja também se seu projeto possui o arquivo .env, que fica no diretório principal do projeto, que lá também deve ter os dados de acesso ao mysql.

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=intranet_rotoline
DB_USERNAME=root
DB_PASSWORD=secret

database

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'intranet_rotoline'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

ja usei usuario e senha diferentes e nada de funcionar.

Oi Emerson,

Você alterou esses dados do banco ou já estava assim?

Porque na mensagem de erro tinha falado isso: Access denied for user 'laravel'@'localhost'

Ou seja, ele estava utilizando como usuário laravel e não root.

Se você alterou arquivo .env ou database.php, precisa parar e iniciar o servidor, pois o laravel somente carrega essas configurações ao inicializar o projeto.

sim. alterei usuariuo e senha e ate reinciei meu computador... porem o erro persiste, agora ele diz que o usuario homestead'@'localhost' esta tentando acesso, mas ja alterei tudo que continha esse usuario

solução!

consegui...

parei o serviço do artisan e fiz o seguinte.. php artisan config:clear

dei um clear nas configs... reiniciei o artisam e o login foi executado com sucesso, abriu meu home normalmente... Obrigado pela ajuda. e desculpa o incomodo.

Ah legal que deu certo :)

Essa parte de configurações costuma dar dor de cabeça de vez em quando.

Bons estudos!