Ir para conteúdo
Fórum Script Brasil
  • 0

IF não bloqueia


Enigma_avatar

Pergunta

Bom pessoal desenvolvendo um sistema de confirmacao to com um problema aparentemente simples, mais não estou identificando o erro

Tenho uma pagina que lista um confronto e nela um link que informa o derrotado o porem é que funciona , porem se o outro user clicar na mesma funcao não esta bloqueando, o certo era o if impedir que pessoas com status X não exibisse

segue o codigo

pagina que chama a funcao:

 	<?
	if($cargo!=""){
$result = mysql_query("SELECT * FROM novo_usuarios WHERE status='emduelo' AND ID='$id_user'");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "<table width='100%' height='100%' border='0' align='center' cellpadding='0' cellspacing='0'>
  <tr align='center'> 
    <td height='30' colspan='3'> <div id='titulo'>Quem venceu o duelo?</div></td>
  <tr align='center'> 
    <td width='49%' height='60%'> <div id='areafoto'><img id='avatarduel' src='avatares/$row[ID].png'/> </div></td>
    <td width='5'>x</td>
    <td width='49%' height='60%'><div id='areafoto'><img id='avatarduel' src='avatares/$row[oponente].png'/> </div></td>
  <tr align='center'> 
    <td height='30'>  <div id='aceitar'><a href='acao.php?pag=verificar' >".consulta_usuario('usuario', $row[ID])."</a></div></td>
	<td></td>
	<td height='30'><div id='recusar'><a href='acao.php?pag=perdi&id=$row[oponente]' >".consulta_usuario('usuario', $row[oponente])." </a></div></td>
</table>

  <embed height='1' width='1' src='../duelo.mp3'> ";
}
}else{echo "<center>É preciso estar logado para acessar essa opção.<br><br>Não é cadastrado?<a href='index.php?pag=cadastro' target='_top'> Clique Aqui</a>.";}
?>

pagina que era pra fazer o trabalho

<?
// 111 É preciso estar logado para acessar essa opção.
if($cargo!=""){ 
$id = $_GET["id"];
$today = date("d-m-Y");

// VERIFICACAO //
$result = mysql_query("SELECT FROM novo_usuarios WHERE status='livre'");
$livre = mysql_affected_rows();
$result = mysql_query("SELECT FROM novo_usuarios WHERE status='pendente'");
$pendente = mysql_affected_rows();
$result = mysql_query("SELECT FROM novo_usuarios WHERE status='espera'");
$espera = mysql_affected_rows();
$result = mysql_query("SELECT FROM novo_usuarios WHERE status='aguardando'");
$aguardando = mysql_affected_rows();
$result = mysql_query("SELECT FROM novo_usuarios WHERE status='desertor'");
$desertor = mysql_affected_rows();

// CONDICOES //
if($id_user!==$id){ 
if($id_user!==$pendente){ 
if($id_user!==$espera){
if($id_user!==$aguardando){
if($id_user!==$desertor){
 

// INSERTE SE DER TUDO OK //
$result = mysql_query("UPDATE novo_usuarios SET status='aguardando' , oponente='$id_user' WHERE ID='$id' ");
$result2 = mysql_query("UPDATE novo_usuarios SET status='espera' , oponente='' WHERE ID='$id_user' ");
echo " Aguarde a confirmação do seu adversario ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'>";


// FECHAMENTOS //
}else{echo "<center>Desertor ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";}
}else{echo "<center>Seu oponente notificou sua vitoria aguarde para confirmar ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";}
}else{echo "<center>Aguarde a confirmação do seu adversario ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";}
}else{echo "<center>pendente ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";}
}else{echo "<center>Erro. Voce nao pode confirmar uma vitoria para voce mesmo... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'>";}




}else{echo "<center>É preciso estar logado para acessar essa opção.<br><br>Não é cadastrado?<a href='index.php?pag=cadastro'> Clique Aqui</a>.";}

?>

Como sempre de ante mão agradeço

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Pra ser sincero me perdi um pouco na lógica do sistema, mas vamos lá.

Acredito que o problema esteja nos SELECTs da função:

<?php
$result = mysql_query("SELECT FROM novo_usuarios WHERE status='livre'");
$livre = mysql_affected_rows();
$result = mysql_query("SELECT FROM novo_usuarios WHERE status='pendente'");
$pendente = mysql_affected_rows();
$result = mysql_query("SELECT FROM novo_usuarios WHERE status='espera'");
$espera = mysql_affected_rows();
$result = mysql_query("SELECT FROM novo_usuarios WHERE status='aguardando'");
$aguardando = mysql_affected_rows();
$result = mysql_query("SELECT FROM novo_usuarios WHERE status='desertor'");
$desertor = mysql_affected_rows();

Já deveria retornar um erro por você não estar colocando os campos que os SELECTs irão retornar, coloque um * ou qualquer campo, pois sem campos o MySQL retorna erro.

O mysql_affected_rows() serve para contar os registros afetados pela última consulta e o SELECT não afeta os registros, apenas UPDATE, DELETE, INSERT ou REPLACE, para contar as linhas retornadas pelo SELECT use o mysql_num_rows(). Porém uma dica, use um COUNT(*) no SELECT, para contar os registros, e um mysql_fetch_array() para pegar o valor que a consulta fica um pouco mais rápida.

Enfim provavelmente as variáveis $id, $pendente, $espera, $aguardando e $desertor devem estar com o valor -1 que sempre será diferente do $id_user, por isso todos que acessam à página têm acesso a todo script.

Outra dica seria evitar elses, eles tornam o código mais difícil de ler.

Enfim como eu disse, me perdi na lógica do seu script então não sei se isso vai funcionar, mas acho que esse seria um primeiro passo pra solução.

<?
// 111 É preciso estar logado para acessar essa opção.
if ($cargo=="") {
	echo "<center>É preciso estar logado para acessar essa opção.<br><br>Não é cadastrado?<a href='index.php?pag=cadastro'> Clique Aqui</a>.";
}

$id = $_GET["id"];
$today = date("d-m-Y");

// VERIFICACAO //
$result = mysql_query("SELECT COUNT(*) FROM novo_usuarios WHERE status='livre'");
$livre = mysql_fetch_array($result);
$livre = $livre[0];

$result = mysql_query("SELECT COUNT(*) FROM novo_usuarios WHERE status='pendente'");
$pendente = mysql_fetch_array($result);
$pendente = $pendente[0];

$result = mysql_query("SELECT COUNT(*) FROM novo_usuarios WHERE status='espera'");
$espera = mysql_fetch_array($result);
$espera = $espera[0];

$result = mysql_query("SELECT COUNT(*) FROM novo_usuarios WHERE status='aguardando'");
$aguardando = mysql_fetch_array($result);
$aguardando = $aguardando[0];

$result = mysql_query("SELECT COUNT(*) FROM novo_usuarios WHERE status='desertor'");
$desertor = mysql_fetch_array($result);
$desertor = $desertor[0];

// CONDICOES //
$verificador = true;
if($id_user===$id){
	echo "<center>Erro. Voce não pode confirmar uma vitoria para voce mesmo... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'>";
	$verificador = false;
}
if($id_user===$pendente){
	echo "<center>pendente ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";
	$verificador = false;
}
if($id_user===$espera){
	echo "<center>Aguarde a confirmação do seu adversario ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";
	$verificador = false;
}
if($id_user===$aguardando){
	echo "<center>Seu oponente notificou sua vitoria aguarde para confirmar ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";
	$verificador = false;
}
if($id_user===$desertor){
	echo "<center>Desertor ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";
	$verificador = false;
}
 
if ($verificador) {
	// INSERTE SE DER TUDO OK //
	$result = mysql_query("UPDATE novo_usuarios SET status='aguardando' , oponente='$id_user' WHERE ID='$id' ");
	$result2 = mysql_query("UPDATE novo_usuarios SET status='espera' , oponente='' WHERE ID='$id_user' ");
	echo " Aguarde a confirmação do seu adversario ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'>";
}
Link para o comentário
Compartilhar em outros sites

  • 0

Esperai, acho que peguei rsrs, você está tentando verificar o status do $id_user, se sim seu SELECT está errado.

<?
// 111 É preciso estar logado para acessar essa opção.
if ($cargo=="") {
	echo "<center>É preciso estar logado para acessar essa opção.<br><br>Não é cadastrado?<a href='index.php?pag=cadastro'> Clique Aqui</a>.";
}

$id = $_GET["id"];
$today = date("d-m-Y");

// VERIFICACAO //
$result = mysql_query("SELECT status FROM novo_usuarios WHERE id = $id_user");
$status = mysql_fetch_assoc($result);
$status = $status[0];

// CONDICOES //
$verificador = true;
if($id_user===$id){
	echo "<center>Erro. Voce não pode confirmar uma vitoria para voce mesmo... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'>";
	$verificador = false;
}
switch ($status) {
	case 'pendente':
		echo "<center>pendente ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";
		$verificador = false;
	break;
	case 'espera':
		echo "<center>Aguarde a confirmação do seu adversario ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";
		$verificador = false;
	break;
	case 'aguardando':
		echo "<center>Seu oponente notificou sua vitoria aguarde para confirmar ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";
		$verificador = false;
	break;
	case 'desertor':
		echo "<center>Desertor ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'> ";
		$verificador = false;
	break;
}
 
if ($verificador) {
	// INSERTE SE DER TUDO OK //
	$result = mysql_query("UPDATE novo_usuarios SET status='aguardando' , oponente='$id_user' WHERE ID='$id' ");
	$result2 = mysql_query("UPDATE novo_usuarios SET status='espera' , oponente='' WHERE ID='$id_user' ");
	echo " Aguarde a confirmação do seu adversario ... <br> <img src='loading.gif'><br> <meta http-equiv='refresh' content='5;URL=acao.php?pag=verificar'>";
}
Link para o comentário
Compartilhar em outros sites

  • 0

Markus mesmo não tendo o efeito esperado te agradeço pois usar o switch e o mysql_fetch_assoc é sem duvida bem mais pratico , irei reduzir uns 60% de códigos .

Agora quanto a função ainda esta acontecendo exatamente o mesmo problema que estava antes vou tentar explicar de uma forma melhor.

EX: EU VS VC -quando 2 usuarios se desafiam ambos ficam com o status EMDUELO e são jogado para a pagina onde qualquer um pode informar que perdeu

Na pagina onde eu chamo essa função existe 2 links,

EX COMO SE FOSSE MINHA TELA

[ id do logado] >> se clicar aki ele simplesmente vai chamar a funcao que verifica o status

[id do oponente] >> se clicar aqui ele vai abrir a pagina que estamos trabalhando onde a pagina colocara o SEU status em AGUARDANDO e o MEU próprio em ESPERA.

ate aki tudo bem tudo 100% ,o porem vem agora

o problema e que VOCE ainda esta na tela anterior ainda com os 2 links disponivel

EX COMO SE FOSSE SUA TELA

[ id do logado] >> se clicar aki ele simplesmente vai chamar a funcao que verifica o status( no caso como eu já informei que você venceu ira aparecer a pagina pra você confirmar , essa parte ta funcionando)

[id do oponente] >> se clicar aqui ele vai abrir a pagina que estamos trabalhando onde ::: o que era certo a fazer, era a pagina verificar o seu status que no caso já estaria em AGUARDANDO e te redirecionar para a pagina de verificacao

mais isso não acontece , se você clicar em no link ele ira fazer o mesmo processo novamente so que ao inverso.

pelo o que intendi o case e simplesmente para verificar isso

case 'aguardando': = se caso o status = aguardando echo { isso ou aquilo}

Link para o comentário
Compartilhar em outros sites

  • 0

Agora entendi. Putz mancada a minha, isso:

$status = $status[0];

Era pra ser assim:

$status = $status['status'];

Quando se usa o mysql_fetch_assoc() ele retorna um array com cada registro, sendo que cada registro terá índices com os nomes dos campos e os valores de cada célula, um array associativo, usar 0(Zero) como índice só funciona se eu estivesse usando mysql_fetch_array(), onde o retorno vem com o array associativo e numérico, ou mysql_fetch_row(), onde o retorno só tem o array numérico.

Faz essa troca e da um echo na variável $status só pra ver se o retorno está correto.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...