• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

duarte69

Erro em odbc

20 mensagens neste tópico

Boas, sou novo por estes lados mas isto parece ser fixe, lol

Bem é o seguinte:

Estou com um pequeno problema, liguei uma bd access ao php, segui um tutorial para meter a ligação a trabalhar, mas está a dar erro no odbc_do().

O erro é o seguinte:

Warning: odbc_do() [function.odbc-do]: SQL error: [Microsoft][Controlador Microsoft Access de ODBC] Poucos par�metros. 1 esperado., SQL state 07001 in SQLExecDirect in D:\xampp\htdocs\testes\login_php.php on line 17

Funcionário inesistente ou fora de actividade

Aqui fica o código:


<?php

function login(){

	//passagem dos dados do form para o ficheiro php
	$id=$_POST['id'];
	$password=$_POST['password'];
	$grupo=$_POST['grupo'];
	//fim

	$ligacao= odbc_connect ("access","","") or die ("Impossivel aceder à base de dados");

	if ($grupo="funcionario"){ //caso o user seja um funcionário

		$sql=("Select * FROM Trabalhadores WHERE (estado='1' and n_funcionário='$id')");

		[b]$resultado= odbc_do ($ligacao, "$sql");[/b]
		if (empty($resultado)){
			echo "Funcionário inesistente ou fora de actividade";
			//rederecionar para login.html
		}
		else{
			$sql=("Select * FROM Trabalhadores WHERE estado=1 and n_funcionário=$id and password=$password");

			$resultado=odbc_do ($ligacao, $sql);
			if (empty($resultado)){
				echo "Password incorrecta";
				////rederecionar para login.html
			}
			else{
				odbc_result_all($resultado, "border=3");
				odbc_free_result ($resultado);
				odbc_close ($ligacao);
			}

		}
	}
	else{ //caso seja um comprador

		$sql=("Select * FROM Compradores WHERE cod_comprador=$id");

		$resultado=odbc_do ($ligacao, $sql);
		if (empty ($resultado)){
			echo "Comprador inesistente";
			//rederecionar para login.html
		}
		else{
			$sql=("Select * FROM Compradores WHERE cod_comprador=$id and password=$password");

			$resultado=odbc_do ($ligacao, $sql);
			if (empty($resultado)){
				echo "Password incorrecta";
				////rederecionar para login.html
			}
			else{
				odbc_result_all($resultado, "border=3");
				odbc_free_result ($resultado);
				odbc_close ($ligacao);
			}		
		}		
	}
}
//main

if (($_POST['id']) && ($_POST['password']) && $_POST['grupo']){ //se todos os valores forem introduzidos-->
	login(); //chama a função de login
}	
else{
	if (empty($_POST['id'])){ //caso o campo id do formulário="" retorna mensagem de erro
		echo "Introduza o ID";
	}
	else{
		if (empty($_POST['password'])){ //caso o campo password do formulário="" retorna mensagem de erro
			echo "Introduza a Password";
		}
		else{			
			if (empty ($_POST['grupo'])){ //caso não seja escolhido nenhum grupo retorna mensagem de erro
				echo "Escolha um grupo";
			}
		}
	}
}
?>

O erro aponta para a linha a negrito...

Se poderem ajudar agradecia, não estou a ver onde está o erro e é a primeira vez que estou a trabalhar com odbc.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que reparei estas a usar base de dados access, acertei?

tenta assim: dbc_connect ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ="caminhoParaabd/db.mdb","","")

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, sim estou a usar um bd access.

Desde já agradeço a ajuda...

A ligação ficou assim:

$ligacao= odbc_connect ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ="E:\ATI(pen)\MDB\projectotecnologico.mdb","","") or die ("Impossivel aceder à base de dados");

Mas está a dar erro nessa linha, diz : "Parse error: syntax error, unexpected T_STRING in D:\xampp\htdocs\testes\login_php.php on line 11"

É do quê?

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Já tentei com a bd no htdocs e dá o mesmo erro, acho que é um erro de sintaxe, mas como não percebo grande coisa disto não sei onde é que está o erro...

Preciso mesmo de ajuda, preciso disto a trabalhar até segunda  :D

Cumps e obrigado pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas está a dar erro nessa linha, diz : "Parse error: syntax error, unexpected T_STRING in D:\xampp\htdocs\testes\login_php.php on line 11"

tesn de escapar a string :D

neste caso $ligacao= odbc_connect ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=E:/ATI(pen)/MDB/projectotecnologico.mdb","","") or die ("Impossivel aceder à base de dados"); por exemplo

O erro foi meu pois no exemplo dei com a aspa fora do sitio ou com uma aspa a menos depende do ponto de vista LOL

mas penso funcionar semteres o caminho sem aspa, se nao der, tenta com aspas escapadas \"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Obrigado pela ajuda, esse problema já está resolvido, mas surgiu outro:

Código:

 <?php

function login(){

	//passagem dos dados do form para o ficheiro php
	$id=$_POST['id'];
	$password=$_POST['password'];
	$grupo=$_POST['grupo'];
	//fim

	$ligacao= odbc_connect ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=E:/ATI(pen)/MDB/projectotecnologico.mdb","","") or die ("Impossivel aceder à base de dados");

	if ($grupo="funcionario"){ //caso o user seja um funcionário

		[b]$sql=("Select * FROM Trabalhadores WHERE (estado = true and n_funcionário='$id')");[/b]

		[b]$resultado= odbc_do ($ligacao, "$sql");[/b]
		if (empty($resultado)){
			echo "Funcionário inesistente ou fora de actividade";
			//rederecionar para login.html
		}
		else{
			$sql=("Select * FROM Trabalhadores WHERE estado=1 and n_funcionário=$id and password=$password");

			$resultado=odbc_do ($ligacao, $sql);
			if (empty($resultado)){
				echo "Password incorrecta";
				////rederecionar para login.html
			}
			else{
				odbc_result_all($resultado, "border=3");
				odbc_free_result ($resultado);
				odbc_close ($ligacao);
			}

		}
	}
	else{ //caso seja um comprador

		$sql=("Select * FROM Compradores WHERE cod_comprador=$id");

		$resultado=odbc_do ($ligacao, $sql);
		if (empty ($resultado)){
			echo "Comprador inesistente";
			//rederecionar para login.html
		}
		else{
			$sql=("Select * FROM Compradores WHERE cod_comprador=$id and password=$password");

			$resultado=odbc_do ($ligacao, $sql);
			if (empty($resultado)){
				echo "Password incorrecta";
				////rederecionar para login.html
			}
			else{
				odbc_result_all($resultado, "border=3");
				odbc_free_result ($resultado);
				odbc_close ($ligacao);
			}		
		}		
	}
}
//main

if (($_POST['id']) && ($_POST['password']) && $_POST['grupo']){ //se todos os valores forem introduzidos-->
	login(); //chama a função de login
}	
else{
	if (empty($_POST['id'])){ //caso o campo id do formulário="" retorna mensagem de erro
		echo "Introduza o ID";
	}
	else{
		if (empty($_POST['password'])){ //caso o campo password do formulário="" retorna mensagem de erro
			echo "Introduza a Password";
		}
		else{			
			if (empty ($_POST['grupo'])){ //caso não seja escolhido nenhum grupo retorna mensagem de erro
				echo "Escolha um grupo";
			}
		}
	}
}
?>

Isto está a dar dois erros:

Como o código está dá o seguinte: "Warning: odbc_do() [function.odbc-do]: SQL error: [Microsoft][Controlador Microsoft Access de ODBC] Poucos par�metros. 1 esperado., SQL state 07001 in SQLExecDirect in D:\xampp\htdocs\testes\login_php.php on line 17"

Se eu meter aspas  na ($sql=("Select * FROM Trabalhadores WHERE (estado = "true" and n_funcionário='$id')"):( sql da linha 15 dá este:  "Parse error: syntax error, unexpected T_STRING in D:\xampp\htdocs\testes\login_php.php on line 15"

Alguém pode ajudar? É urgente...

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se está definido como boolean, nem deve levar ' ou ", digo eu.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não devia era levar Access  :cheesygrin:

Mas o erro que lhe está a dar é por ele iniciar o string com " e a meio ter " novamente, mas se está definido com boolean não deveria ser preciso as "

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ya, não devia levar access =)

tirácio, quando dizes que é para por \" é para por onde? :S

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No true. Em vez de teres no source code "true", tens \"true\". Chama-se a isso escapar a aspa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Foi isso que fiz e deu erro na mesma...

Bem, obrigado pela ajuda a todos, fiquei sem tempo, precisava disto para amanhã, se bem que agora gostava de saber porque é que esta coisa não trabalha...

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também já tentei assim, e dá erro na mesma  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O erro é este:  Warning: odbc_do() [function.odbc-do]: SQL error: [Microsoft][Controlador Microsoft Access de ODBC] Poucos par�metros. 1 esperado., SQL state 07001 in SQLExecDirect in D:\xampp\htdocs\testes\login_php.php on line 17

Não te chateies com isso que não vale a pena, da próxima não uso access, lol.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora