Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

mikeysantana

Função getSingleValue não funciona como esperado

Mensagens Recomendadas

mikeysantana    2
mikeysantana

Boa tarde,

Estava aqui a utilizar a função getSingleValue pela primeira vez e acho que algo correu mal, mas como não domino a sintaxe desta função, precisava de alguma ajuda vossa.

O código que tenho é o seguinte:

	$tableName = "TiposDocumentos";
	$prop = "NomeTipoDocumento";
	$value = $TipoDoc;
	$columnName = "VerificacaoTipoDocumento";
	
	function getSingleValue($tableName, $prop, $value, $columnName)
	{
	  $q = $pdo->query("SELECT `$columnName` FROM `$tableName` WHERE $prop='".$value."'");
	  $f = $q->fetch();
	  $result = $f[$columnName];
	  return $result;
	}

	if ($result == "Sim")
	{
		$EstadoDoc = "Por Verificar";
	}
	else
	{
		$EstadoDoc = "Verificado";
	}

E depois o "$EstadoDoc" é enviado para a BD assim:

$stmt=$pdo->prepare("UPDATE Documentos SET EstadoDoc=:EstadoDoc WHERE ID=:ID");
$stmt->bindParam(':EstadoDoc', $EstadoDoc);
$stmt->bindParam(':ID', $ID);
$stmt->execute();

O que está a causar problemas não tem tanto a ver com a mudança do campo na BD do "$EstadoDoc" mas sim com a identificação da variável através do primeiro código. Qualquer que seja a opção que escolhemos, ele publica sempre "Verificado" e nunca "Por Verificar", quando realmente a variável "$result" deveria ser "SIM".

Qualquer coisa que possa ajudar é bem-vinda.

Obrigado,

mikeysantana

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1132
HappyHippyHippo

não só a tua exposição do problema é disconexa assim como o primeiro código que apresentas não faz muito sentido ...

tens de ser mais claro quando apresentas um problema

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mikeysantana    2
mikeysantana
Em 15/09/2017 às 00:11, HappyHippyHippo disse:

não só a tua exposição do problema é disconexa assim como o primeiro código que apresentas não faz muito sentido ...

tens de ser mais claro quando apresentas um problema

Só quero que a função vá pesquisar numa coluna da tabela da BD, um dado selecionado no formulário (que está também nesta BD) e identifique a linha, fazendo com que vá buscar o resultado da coluna ao lado, dessa mesma linha. Se o que estiver nessa coluna for um "Sim" então, ele deve atribuir à variável o valor "Por Verificar", caso contrário, será sempre "Verificado".

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1132
HappyHippyHippo
10 minutes ago, mikeysantana said:

Só quero que a função vá pesquisar numa coluna da tabela da BD, um dado selecionado no formulário (que está também nesta BD) e identifique a linha, fazendo com que vá buscar o resultado da coluna ao lado, dessa mesma linha. Se o que estiver nessa coluna for um "Sim" então, ele deve atribuir à variável o valor "Por Verificar", caso contrário, será sempre "Verificado".

 

em base de dados não se deve pensar em "coluna ao lado"

novamente, tens de ser mais concreto na tua explicação

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mikeysantana    2
mikeysantana
4 minutos atrás, HappyHippyHippo disse:

em base de dados não se deve pensar em "coluna ao lado"

novamente, tens de ser mais concreto na tua explicação

Há uma base de dados que possui tipos de documentos. Nessa base de dados há a coluna do ID, a coluna do nome do tipo do documento e a coluna da verificação do tipo de documento. Esta última só recebe os valores "Sim" ou "Não".

Só quero que o ficheiro php encarregue de enviar a informação para a BD, verifique se o tipo de documento precisa ou não de verificação, ou seja, que consulte a BD, pesquisando pelo nome do tipo de documento (que é selecionado no formulário) e encontrar se nessa mesma linha na coluna da verificação há a resposta "Sim" ou "Não". Caso a resposta seja "Sim" então a variável acima deve tomar o valor "Por Verificar", caso contrário, será sempre "Verificado".

Espero ter ajudado a compreender.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
yoda    139
yoda
if (getSingleValue($tableName, $prop, $value, $columnName) == "Sim")
{
	$EstadoDoc = "Por Verificar";
}
else
{
	$EstadoDoc = "Verificado";
}

Só tinhas a função declarada, não a estavas a chamar. Talvez não sintas motivação suficiente para aprender PHP, mas se investires umas horas da tua vida vais ver que percebes depressa, é uma linguagem simples, mais do que muitas que por ai andam.

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mikeysantana    2
mikeysantana
Em 17/09/2017 às 10:04, yoda disse:

if (getSingleValue($tableName, $prop, $value, $columnName) == "Sim")
{
	$EstadoDoc = "Por Verificar";
}
else
{
	$EstadoDoc = "Verificado";
}

Só tinhas a função declarada, não a estavas a chamar. Talvez não sintas motivação suficiente para aprender PHP, mas se investires umas horas da tua vida vais ver que percebes depressa, é uma linguagem simples, mais do que muitas que por ai andam.

 

Olá, yoda!

Obrigado pela ajuda!

Até que é simples, o único problema que tenho tido é quando tento o PDO, é raro conseguir encontrar casos específicos em PDO (assim como aqueles que tenho vindo a expor), já em mysqli é muito mais fácil.

O código que sugeriste para o script, não sei porquê. Decidi fazer uma abordagem mais simples, que estava mais familiarizado.

Para simplificar as coisas:

"$TipoDoc" recebe do formulário o tipo de documento que o utilizador seleciona

Depois, o SELECT vai, supostamente pesquisar na coluna "NomeTipoDocumento" a linha que seja igual a "$TipoDoc". De seguida, o "$stmt" iria atribuir à variável "$ResultadoTipo", os valores "Sim" ou "Não", consoante o que estivesse presente na coluna "VerificacaoTipoDocumento" da mesma linha. 

$sql= "SELECT NomeTipoDocumento, VerificacaoTipoDocumento FROM TiposDocumentos WHERE NomeTipoDocumento = :TipoDoc"; 
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':VerificacaoTipoDocumento', $ResultadoTipo, PDO::PARAM_INT); 
$stmt->execute();
	if ($ResultadoTipo == "Sim")
{
	$EstadoDoc = "Por Verificar";
}
else
{
	$EstadoDoc = "Verificado";
}

Infelizmente, na execução, ele apresenta esta mensagem:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

Refere-se ao "$stmt" do "VerificacaoTipoDocumento" mas, pensei que o código funcionaria assim...

Falta alguma coisa?

Obrigado.

Editado por mikeysantana

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1132
HappyHippyHippo

':TipoDoc' ou ':VerificacaoTipoDocumento' ?

olha bem para o código SQL e o nome do parâmetro que pretendes atribuir

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mikeysantana    2
mikeysantana
2 horas atrás, HappyHippyHippo disse:

':TipoDoc' ou ':VerificacaoTipoDocumento' ?

olha bem para o código SQL e o nome do parâmetro que pretendes atribuir

Olá, @HappyHippyHippo

Eu desconfiei que fosse dessa parte do código, porém não sei como proceder.

Mas a minha intenção é que ele identifique a linha onde a coluna "NomeTipoDocumento" seja igual à variável "$TipoDoc", depois atribuir o valor da coluna "VerificacaoTipoDocumento" dessa mesma linha à variável "$ResultadoTipo". Isso é possível?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1132
HappyHippyHippo

novamente, continuas com referências vindas do céu ...

- afinal que variável é $TipoDoc ?

- que valor tem essa variável ?

- se queres guardar o valor na variável $ResultadoTipo, porque estás a dar essa variável como elemento de entrada/composição do SQL ?

 

afinal que tutorial de PHP/PDO andas a seguir ? onde estás a retirar/estudar esta maneira de fazer as coisas ?

este é o primeiro resultado que obtive a pesquisar php pdo tutorial no google, já será um começo se deres uma vista de olhos (como deve ser) http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mikeysantana    2
mikeysantana
12 horas atrás, HappyHippyHippo disse:

novamente, continuas com referências vindas do céu ...

- afinal que variável é $TipoDoc ?

- que valor tem essa variável ?

- se queres guardar o valor na variável $ResultadoTipo, porque estás a dar essa variável como elemento de entrada/composição do SQL ?

 

afinal que tutorial de PHP/PDO andas a seguir ? onde estás a retirar/estudar esta maneira de fazer as coisas ?

este é o primeiro resultado que obtive a pesquisar php pdo tutorial no google, já será um começo se deres uma vista de olhos (como deve ser) http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

A variável $TipoDoc recebe o valor de um dos campos do formulário, neste caso, o nome do Tipo de Documento, uma das colunas da tabela TiposDocumentos da BD. Só quero fazer um SELECT para ele identificar a linha desse Tipo de Documento na coluna NomeTipoDocumento e atribuir à variável $ResultadoTipo, o valor do campo da coluna VerificacaoTipoDocumento na mesma linha. Na BD, esta coluna apenas toma valores de Sim ou Não.

Desta vez, não segui tutorial, simplesmente fui usar o comando SELECT.

Vou ver o tutorial, obrigado.

É possível fazer o que descrevi acima?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1132
HappyHippyHippo
$stmt = $pdo->prepare("SELECT `VerificacaoTipoDocumento` FROM `TiposDocumentos` WHERE `NomeTipoDocumento` = :Nome");
$stmt->bindParam(':Nome', $TipoDoc);
$stmt->execute();
$resultSet = $stmt->fetchAll();
if (count($resultSet) != 1) {
die("unexpected number of rows : " . count($resultSet));
}

$ResultadoTipo = reset($resultSet)['VerificacaoTipoDocumento'];

deverá ser algo como isto

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mikeysantana    2
mikeysantana
32 minutos atrás, HappyHippyHippo disse:

$stmt = $pdo->prepare("SELECT `VerificacaoTipoDocumento` FROM `TiposDocumentos` WHERE `NomeTipoDocumento` = :Nome");
$stmt->bindParam(':Nome', $TipoDoc);
$stmt->execute();
$resultSet = $stmt->fetchAll();
if (count($resultSet) != 1) {
die("unexpected number of rows : " . count($resultSet));
}

$ResultadoTipo = reset($resultSet)['VerificacaoTipoDocumento'];

deverá ser algo como isto

Olá, @HappyHippyHippo!

Obrigado pela sugestão do código.

Já tenho o código funcional! Muito obrigado! :)

Editado por mikeysantana

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade