Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

luciano_zanita

Bug de IF e Else

Recommended Posts

Boa tarde amigos, estou quebrando a cabeça com um possivel bug de Else.

 

Seguinte eu fiz as variáveis em IF e criei uma contra resposta em else caso não fosse permitido a execução no if.

 

Veja o demo.

<?php
$status = $_POST['status'];
$funcao 		= $_POST["funcao"];
$idstreaming	        = $_POST["idshout"];

if($status==0){
	if($funcao=="ligar-shoutcast"){
	header("Location: http://".$urlpainel."/gerenciar.php?s=".$encriptacao."&aviso=1");
	}
}
else{
	header("Location: http://".$urlpainel."/gerenciar.php?s=".$encriptacao."&aviso=2");
}

if($status==1){
	if($funcao=="desligar-shoutcast"){
	header("Location: http://".$urlpainel."/gerenciar.php?s=".$encriptacao."&aviso=3");
	}
}
else{
	header("Location: http://".$urlpainel."/gerenciar.php?s=".$encriptacao."&aviso=4");
}

?>

Pois bem até ai ta tudo certo, só que acontece o seguinte, quando eu uso a funcao de desligar-shoutcast, ele vai e desligar normal, mais quando eu vou e tento religar de novo, ele acaba pegando o segundo else que é do desligar-shoutcast em vez de pegar o if do ligar-shoutcast, só ocorre quando faço nessa sequência e não tem uma forma lógica do porque isto esta ocorrendo.
Ele executa o IF do ligar mais redireciona não com o aviso=1 mais sim com o aviso=4

Alguém sabe da uma luz do porque isto ocorre?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu fiz todas checagens do $_POST as variáveis que vem ta certa, pois se eu não fazer a sequência de desligar primeiro e tentar depois ligar ele não da o erro.

 

Fiz um requerimento em echo, por exemplo se eu tirar o redirecionamento do else que ta o aviso 4 ele não ta o erro

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
$status = $_POST['status'];
$funcao         = $_POST["funcao"];
$idstreaming     = $_POST["idshout"];

var_dump($_POST); exit;

Coloque isso ai, e me passe o resultado, tanto na hora de desligar quanto na hora de desligar por favor, só pra eu confirmar algumas coisas.

 

Pode tirar o exit se comentar todos os header

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para desligar

array(2) { ["funcao"]=> string(18) "desligar-shoutcast" ["idshout"]=> string(1) "2" }

 

a array $status é dentro do código eu só dei uma modificada para $_POST só para dar um exemplo.

 

para ligar:
array(2) { ["funcao"]=> string(15) "ligar-shoutcast" ["idshout"]=> string(1) "2" }

 

como visto ele ta normal, o problema é nos else

Sempre que faço a sequência de desligar-shoutcast e depois ligar-shoutcast ele buga o else, e pega o else da meensagem aviso 4 em vez de pegar o if do ligar-shoutcast

Compartilhar este post


Link para o post
Compartilhar em outros sites

este é o codigo original.

<?php
//Conexão MYSQL
require_once "configuracoes_mysql_expo.php";

//verifica se esta logado
require_once "chave_usuario.php";

////////////////////
// VARIAVEIS PHP  //
////////////////////
$funcao 		= $_POST["funcao"];
$idstreaming	= $_POST["idshout"];
$urlpainel 		= $_SERVER['SERVER_NAME'];

/////////////////////
// BANCO DE DADOS  //
/////////////////////

$resultado = mysql_query("SELECT*FROM usuarios WHERE id = ".$ident."");
	$linhas = mysql_num_rows($resultado);
	while ($linha = mysql_fetch_array($resultado)){
	$iduser     = $linha["id"];
;}
$sql=mysql_query("SELECT * FROM streaming WHERE id = ".$idstreaming."");
	$verifica=mysql_num_rows($sql);
	while($linha = mysql_fetch_array($sql)){
	$ip_stream	 = $linha["ip"];
	$porta 		 = $linha["porta"];
	$versao 	 = $linha["shoutcast"];
	$idsv 	   	 = $linha["idservidor"];
	$encriptacao  = base64_encode($porta);
;}
$sql=mysql_query("SELECT * FROM servidores WHERE id = ".$idsv."");
	$verifica=mysql_num_rows($sql);
	while($linha = mysql_fetch_array($sql)){
	$ip 	        = $linha["ip"];
	$porta_ssh 	   	= $linha["porta_ssh"];
	$usuario_ssh	= $linha["usuario"];
	$senha_ssh		= $linha["senha"];
;}

//Pegando outros dados
require_once "ssh.funcoes.php";

//////////////////////////
// FUNCOES EXECUTAVEIS	//
//////////////////////////
		//Verficando se Esta online a Porta
		$fp=@fsockopen ($ip,$porta, $errno, $errstr,(float)0.5);
        if(!$fp) {
        $status = "0";
        }
        else {
        $status = "1";
        fclose($fp);
        }


/////////////////////
// Ligar Shoutcast //
/////////////////////
if($status==0){
	if($funcao=="ligar-shoutcast"){
	$ssh = new SSH();
	$ssh->conectar($ip,$porta_ssh);
	$ssh->autenticar($usuario_ssh,$senha_ssh);
	$ssh->executar("sh /home/zsonic/ligar ".$porta." ".$versao." ");
	header("Location: http://".$urlpainel."/gerenciar.php?s=".$encriptacao."&aviso=1");
	}
}
else{
	header("Location: http://".$urlpainel."/gerenciar.php?s=".$encriptacao."&aviso=2");
}
////////////////////////
// Desligar Shoutcast //
////////////////////////

if($status==1){
	if($funcao=="desligar-shoutcast"){
	$ssh = new SSH();
	$ssh->conectar($ip,$porta_ssh);
	$ssh->autenticar($usuario_ssh,$senha_ssh);
	$ssh->executar("sh /home/zsonic/desligar ".$porta." ");
	header("Location: http://".$urlpainel."/gerenciar.php?s=".$encriptacao."&aviso=3");
	}
}
else{
	header("Location: http://".$urlpainel."/gerenciar.php?s=".$encriptacao."&aviso=4");
}

/////////////////////////
// Reiniciar Shoutcast //
/////////////////////////

if($status==1){
	if($funcao=="reiniciar-shoutcast"){
	$ssh = new SSH();
	$ssh->conectar($ip,$porta_ssh);
	$ssh->autenticar($usuario_ssh,$senha_ssh);
	$ssh->executar("sh /home/zsonic/desligar ".$porta." ");
	$ssh->executar("sh /home/zsonic/ligar ".$porta." ".$versao."");
	header("Location: http://".$urlpainel."/gerenciar.php?s=".$encriptacao."&aviso=5");
	}
}
else{
	header("Location: http://".$urlpainel."/gerenciar.php?s=".$encriptacao."&aviso=6");
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

em vez de ele puxar o if do aviso=1 ele puxa o aviso=6 ou qualquer outro que seja por final else.


Para desligar:

NULL string(18) "desligar-shoutcast"

 

Para Ligar:

NULL string(15) "ligar-shoutcast"


Notei algo que só ocorre o erro de seleção de if e else quando esta na função desligar-shoutcast

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então a array $status vem do

$fp=@fsockopen ($ip,$porta, $errno, $errstr,(float)0.5);
        if(!$fp) {
        $status = "0";
        }
        else {
        $status = "1";
        fclose($fp);
        }

Não vejo explicação para o erro...

só ocorre o erro pra função ligar-shoutcast

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentei mesmo assim continua dando o erro.

Acontece da seguinte forma.

Quando o $status for igual a 0, e eu tentar executar a função ligar-shoutcast em vez de ele me retornar o resultado do if() do ligar-shoutcast ele acaba me mandando de retorno a mensagem do else do reiniciar-shoutcast, se eu remover o reiniciar-shoutcast fica o desligar-shoutcast ai ele me exibe o else do desligar-shoutcast, mais nunca me exibe o código do if do ligar-shoutcast

isso que ta me quebrando a cabeça e não acho solução para arrumar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim exibe normal o resultado, se tiver desligado ele exibe 0 se tiver ligado exibe 1, já fiz o teste ta certo com o $status

o $status voltou nulo lá pois eu coloquei no cabeçario da página e a array tava mais pra baixo.

 

Problema ta entre os if e else não sei entender o porque disso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo.. o header não interrompe a execução do script.

 

Ele entra no primeiro if, envia o cabeçalho, depois lê o segundo else e envia o outro cabeçalho.

 

Resolva inserindo exit(); após cada header();

 

[]'s!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só complementando o Matheus Tavares. Uma verificação mais consistente pode ser, também, uma boa escolha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente da um var_dump no $status, acho que ele que ta com o valor errado.

Se não, só confirme que você colocou um exit em todos os lugares depois do header.

Outro, reveja a ordem do seus IF:

if ($funcao == 'XXXX') {
    if ($status) {
        // header
    } else {
        // header
    }
} else if ($funcao == 'YYYYY') {
    if ($status) {
        // header
    } else {
        // header
    }
}
exit;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.