Variável não está sendo informada

Olá pessoal,

Estou tentando fazer um update numa tabela, mas não está dando certo. Para isso, criei alguns Métodos PHP, só um não está funcionando:

Método Preencher:

$id = {Usuario_ID}; $email = {Usuario_Email};

$sql = "SELECT Usuario_ID, Grupo_ID, ME_ID, Cliente_ID, Usuario_Login,
Usuario_Senha, Usuario_Nome, Usuario_Email, Usuario_Atvo, Usuario_Altera
FROM a013_usuarios
WHERE Usuario_ID = $id ";

sc_lookup(Ds, $sql);

if(!empty({Ds}))
{
{Cliente_ID} = {Ds[0][3]};
{Usuario_Login} = {Ds[0][4]};
{Usuario_Nome} = {Ds[0][6]};
{Usuario_Email} = {Ds[0][7]};
{Usuario_Ativo} = {Ds[0][8]};
{Usuario_Altera} = {Ds[0][9]};
};

Método Consultar:

$id = {Usuario_ID}; $email = {Usuario_Email};
$sql = "SELECT Usuario_ID, Grupo_ID, ME_ID, Cliente_ID, Usuario_Login,
		Usuario_Senha, Usuario_Nome, Usuario_Email, Usuario_Atvo, Usuario_Altera
		FROM a013_usuarios
		WHERE Usuario_Email = '$email' ";
if($id > 0){$sql .= " AND Usuario_ID <> $id ";};

sc_lookup(Ds, $sql);

if(!empty({Ds}))
{
	if($id == 0)
	{
		incluir();
	} else
		if($id > 0)
		{
			alterar();
		};
	echo $id;
} else
	if(empty({Ds}))
	{
		echo "Desculpe, este usuário já foi cadastrado.";
	};</blockquote>

Método Incluir:

$grupo = {Grupo_ID}; $me ={ME_ID}; $cliente ={Cliente_ID}; $login ={Usuario_Login}; $senha = md5({Usuario_Senha}); $nome ={Usuario_Nome}; $email ={Usuario_Email}; $ativo ={Usuario_Ativo}; $altera ={Usuario_Altera};

if($cliente == 0)
{
$sql = “INSERT INTO a013_usuarios (Grupo_ID, ME_ID, Cliente_ID, Usuario_Login,
Usuario_Senha, Usuario_Nome, Usuario_Email, Usuario_Atvo, Usuario_Altera) VALUES (
$grupo, $me, NULL, ‘$login’, ‘$senha’, ‘$nome’, ‘$email’, $ativo, $altera);”;
} else
if($cliente > 0)
{
$sql = “INSERT INTO a013_usuarios (Grupo_ID, ME_ID, Cliente_ID, Usuario_Login,
Usuario_Senha, Usuario_Nome, Usuario_Email, Usuario_Atvo, Usuario_Altera) VALUES
($grupo, $me, $cliente, ‘$login’, ‘$senha’, ‘$nome’, ‘$email’, $ativo, $altera);”;
};

sc_exec_sql ($sql);

Método Alterar:

$id = {Usuario_ID}; $grupo = {Grupo_ID}; $me ={ME_ID}; $cliente ={Cliente_ID}; $login ={Usuario_Login}; $senha = md5({Usuario_Senha}); $nome ={Usuario_Nome}; $email ={Usuario_Email}; $ativo ={Usuario_Ativo}; $altera ={Usuario_Altera};

$sql = “UPDATE a013_usuarios SET
Grupo_ID = $grupo,
ME_ID = $me,”;
if({Cliente_ID} > 0) {$sql .= “Cliente_ID = $cliente,”;};
$sql .= “Usuario_Login = ‘$login’,
Usuario_Senha = ‘$senha’,
Usuario_Nome = ‘$nome’,
Usuario_Email = ‘$email’,
Usuario_Atvo = $ativo,
Usuario_Altera = $altera
WHERE Ussuario_ID = $id;”;

sc_exec_sql ($sql);

Evento OnLoad:

if([vlGrupoID] == 1) { sc_field_disabled("Usuario_ID"); preencher(); } else if([vlGrupoID] <> 1) { desativacampos(); };

Evento OnValidate:

consultar();

O problema está ocorrendo apenas ao verificar se a variável $id está sendo informada ou não. No caso, está considerando sempre a variável igual a zero, mesmo quando o campo {Usuario_ID} está sendo preenchido.

Alguém consegue ver onde está o erro, pois já tentei de tudo e não consigo fazer um update, só insert. É como se a variável $id ou o campo {Usuario_ID} não estivessem sendo informados, mas o campo {Usuario_ID} está sendo preenchido corretamente no evento OnLoad.

Grato,

Ilano.

Tente com este código:
/* Macro sc_lookup */

$sql ="
SELECT
Usuario_ID,
Grupo_ID,
ME_ID,
Cliente_ID,
Usuario_Login,
Usuario_Senha,
Usuario_Nome,
Usuario_Email,
Usuario_Atvo,
Usuario_Altera
FROM
a013_usuarios
WHERE
Usuario_Email = ‘$email’
";

sc_lookup(chk_usuario, $sql);

/* Erro no lookup /
if (FALSE === {chk_usuario}) {
sc_error_message(“Ocorreu um erro no acesso ao banco de dados.
”);
}
elseif (empty({chk_usuario})) { /
EOF */

// sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");	

if (empty({Usuario_ID})) { // {Usuario_ID} == 0
    incluir(); // Não achou vamos incluir...
} else {
    alterar();
}

}
else {

/* Inclua aqui sua rotina de processamento */	

sc_error_message("Desculpe, este usuário já foi cadastrado..<BR>");

}

/* Macro sc_lookup */

$sql ="
SELECT
	Usuario_ID,
	Grupo_ID,
	ME_ID,
	Cliente_ID,
	Usuario_Login,
	Usuario_Senha,
	Usuario_Nome,
	Usuario_Email,
	Usuario_Atvo,
	Usuario_Altera
FROM
	a013_usuarios
WHERE
	Usuario_Email = '$email'
";

sc_lookup(chk_usuario, $sql);

/* Erro no lookup */
if (FALSE === {chk_usuario}) {
	sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({chk_usuario})) { /* EOF */

	// sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");	
	
	if (empty({Usuario_ID})) { // {Usuario_ID} == 0
	    incluir(); // Não achou vamos incluir...
	} else {
	    alterar();
	}
	
}
else {

	/* Inclua aqui sua rotina de processamento */	
	
	sc_error_message("Desculpe, este usuário já foi cadastrado..<BR>");
	
}

E o que é esse campo {chk_usuario}?

Em vez de usar só ds, rs, para pegar o array de retorno eu gosto de personalizar, é como é uma tabela de usuário a abreviatura em Português (BR) = Checar o usuário.

E fazendo isso quando tenho que encadear vários sc_lookup e sc_select seguidos em rotinas complexas eu tenho garantia que nenhum array vai se misturar com os outros, e
com isso evito bugs.

Ah tá, entendi!
Bom, eu copiei o código que você me passou, mas não tem jeito, ele só vai para o insert.

É que eu tinha ‘copiado’ sua lógica na hora que montei.

Tente com este código, agora:
/* Macro sc_lookup */

$sql ="
SELECT
Usuario_ID,
Grupo_ID,
ME_ID,
Cliente_ID,
Usuario_Login,
Usuario_Senha,
Usuario_Nome,
Usuario_Email,
Usuario_Atvo,
Usuario_Altera
FROM
a013_usuarios
WHERE
Usuario_Email = ‘$email’
";

sc_lookup(chk_usuario, $sql);

/* Erro no lookup /
if (FALSE === {chk_usuario}) {
sc_error_message(“Ocorreu um erro no acesso ao banco de dados.
”);
}
elseif (empty({chk_usuario})) { /
EOF */

// sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");	

if (empty({Usuario_ID})) { // {Usuario_ID} == 0
    incluir(); // Não achou vamos incluir...
}

}
else {

/* Inclua aqui sua rotina de processamento */	

// sc_error_message("Desculpe, este usuário já foi cadastrado..<BR>");

alterar();

}

/* Macro sc_lookup */

$sql ="
SELECT
	Usuario_ID,
	Grupo_ID,
	ME_ID,
	Cliente_ID,
	Usuario_Login,
	Usuario_Senha,
	Usuario_Nome,
	Usuario_Email,
	Usuario_Atvo,
	Usuario_Altera
FROM
	a013_usuarios
WHERE
	Usuario_Email = '$email'
";

sc_lookup(chk_usuario, $sql);

/* Erro no lookup */
if (FALSE === {chk_usuario}) {
	sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({chk_usuario})) { /* EOF */

	// sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");	
	
	if (empty({Usuario_ID})) { // {Usuario_ID} == 0
	    incluir(); // Não achou vamos incluir...
	}
	
}
else {

	/* Inclua aqui sua rotina de processamento */	
	
	// sc_error_message("Desculpe, este usuário já foi cadastrado..<BR>");
	
    alterar();
	
}

Mesma coisa meu amigo, só faz o insert.

(pdo-mysql): SELECT Usuario_ID, Grupo_ID, ME_ID, Cliente_ID, Usuario_Login, Usuario_Senha, Usuario_Nome, Usuario_Email, Usuario_Atvo, Usuario_Altera FROM a013_usuarios WHERE Usuario_Email = 'yurimeneses044@gmail.com' (pdo-mysql): INSERT INTO a013_usuarios (Grupo_ID, ME_ID, Cliente_ID, Usuario_Login, Usuario_Senha, Usuario_Nome, Usuario_Email, Usuario_Atvo, Usuario_Altera) VALUES ( 1, 1, NULL, 'yuri', 'e10adc3949ba59abbe56e057f20f883e', 'Yuri Meneses Frota', 'yurimeneses044@gmail.com', 1, 0); 1062: Duplicate entry 'yurimeneses044@gmail.com' for key 'Usuario_Email' ADOConnection._Execute(INSERT INTO a013_usuarios (Grupo_ID, ME_ID, Cliente_ID, Usuario_Login, Usuario_Senha, Usuario_Nome, Usuario_Email, Usuario_At..., false) % line 1085, file: adodb.inc.php ADOConnection.Execute(INSERT INTO a013_usuarios (Grupo_ID, ME_ID, Cliente_ID, Usuario_Login, Usuario_Senha, Usuario_Nome, Usuario_Email, Usuario_At...) % line 3513, file: cadUsuario_apl.php cadUsuario_apl.incluir() % line 1821, file: cadUsuario_apl.php cadUsuario_apl.Valida_campos(null, null, null) % line 1290, file: cadUsuario_apl.php cadUsuario_apl.controle() % line 1791, file: index.php

Agora você tem que tentar depurar a lógica do código, para ver que caminho e o valor das variáveis no momento.

/* Macro sc_lookup */

$sql ="
SELECT
Usuario_ID,
Grupo_ID,
ME_ID,
Cliente_ID,
Usuario_Login,
Usuario_Senha,
Usuario_Nome,
Usuario_Email,
Usuario_Atvo,
Usuario_Altera
FROM
a013_usuarios
WHERE
Usuario_Email = ‘$email’
";

sc_lookup(chk_usuario, $sql);

/* Erro no lookup /
if (FALSE === {chk_usuario}) {
sc_error_message(“Ocorreu um erro no acesso ao banco de dados.
”);
}
elseif (empty({chk_usuario})) { /
EOF */

// sc_error_message(“Nenhum valor foi retornado pelo banco.
”);

if (empty({Usuario_ID})) { // {Usuario_ID} == 0
// incluir(); // Não achou vamos incluir…

   echo 'SE NÃO ACHOU > INCLUIR:'."<BR>";
   echo 'Usuário ID = '.{Usuario_ID}."<BR>";
   echo 'Usuário e-mail = '. {Usuario_Email}."<BR>";

}

}
else {

/* Inclua aqui sua rotina de processamento */

  // sc_error_message("Desculpe, este usuário já foi cadastrado..<BR>");

 //  alterar();

   echo 'ENCONTRADO: > ALTERAR'."<BR>";
   echo 'Usuário ID = '.{Usuario_ID}."<BR>";
   echo 'Usuário e-mail = '. {Usuario_Email}."<BR>";

}