Problema a soluciona um problema em PHP+Mysql

andrebarradas13

Power Member
Viva pessoal,

Estou aqui com um problema a resolver um bug no código que irei postar a seguir:

PHP:
<?php
                          if($_GET['ordem'] == "crescente") {            

$query = "select u.ID_Utente, us.Nome, u.Telefone                                 
from user as us                                 
LEFT JOIN utente as u on us.ID_User = u.ID_User                                
WHERE us.TipoUser = 'U'                                  
ORDER BY Nome asc ";                                 
}        
 
elseif($_GET['ordem'] == "decrescente")
{            $query = "SELECT u.ID_Utente, us.Nome, u.Telefone                                 
FROM user as us                                
 LEFT JOIN utente as u on us.ID_User = u.ID_User                                
WHERE us.TipoUser = 'U'                                 
 ORDER BY Nome desc ";                                 }        

else{            $query = "SELECT u.ID_Utente, us.Nome, u.Telefone                                 
FROM user as us                                 
LEFT JOIN utente as u on us.ID_User = u.ID_User                                
WHERE us.TipoUser = 'U' ";    
        }

 $stmt = $mydb->prepare($query);           
 $stmt->execute();        
 $stmt->bind_result($idUtente, $nome, $telefone);        
 echo("<table border = 1>");        
echo("<td><a href= 'barimage.php?ordem=crescente&campo=Nome'> <img src='seta_pra_cima.gif' /> </a>Nome <a href= 'barimage.php?ordem=decrescente&campo=Nome'> <img src='seta_pra_baixo.gif' /> </a></td><td>Telefone</td></tr>");       

 while ($stmt->fetch()) {            
echo("<tr>");           
 echo("<td><a href = 'InfoUtente.php?ID_Utente=$idUtente'>$nome</a></td><td>$telefone</td>");            
echo("</tr>");            
}        
echo("</table>");            
$stmt->close();

?>

O meu problema é que quando corro isto,ele no ínicio dá-me 2 erros porque o 'ordem' inicialmente não está na url, mas a ordenação funciona.
Como faço para que não dê o tal erro de Undefined index?

O objectivo é colocar duas imagens no titulo da coluna de uma tabela da base dados,uma para cima e outra para baixo que quando carregar nelas faça a ordenação ascendente ou descendente.Depois de carregar uma vez nas setas os erros desaparecem porque aí já tem na url o ordem=crescente ou ordem=decrescente mas a primeira vez quando executo o ficheiro aparece com 2 erros de undefined index por causa do 'nome'. Alguem me consegue ajudar a resolver este problema?

Se for necessário ajudar a entender melhor onde está o problema digam.Obrigado desde já a quem ajudar :)

Cumprimentos,
André Barradas
 
Última edição:
Boas
O que podes fazer é verificar primeiro se tens o valor "ordem" definido em QueryString,basta fazeres:
PHP:
if(!isset($_GET["ordem"]))$query = "SELECT u.ID_Utente, us.Nome, u.Telefone FROM user as us LEFT JOIN utente as u on us.ID_User = u.ID_User WHERE us.TipoUser = 'U' "; else{... outras querys
}
O que isto representa,basicamente,é se o valor "ordem" for passado por querystring então executas as querys com ordem definida (crescente ou decrescente),caso contrário executas uma query por defeito sem ordenação.
Espero ter ajudado.
Cumps
 
Boas
O que podes fazer é verificar primeiro se tens o valor "ordem" definido em QueryString,basta fazeres:
PHP:
if(!isset($_GET["ordem"]))$query = "SELECT u.ID_Utente, us.Nome, u.Telefone FROM user as us LEFT JOIN utente as u on us.ID_User = u.ID_User WHERE us.TipoUser = 'U' "; else{... outras querys
}
O que isto representa,basicamente,é se o valor "ordem" for passado por querystring então executas as querys com ordem definida (crescente ou decrescente),caso contrário executas uma query por defeito sem ordenação.
Espero ter ajudado.
Cumps

lol muito obrigado pela ajuda.Eu é que estava a ser burro porque já tinha experimentado o isset mas esqueci-me que teria é de fazer a negação com o !isset por isso é que quando metia o isset deixava de fazer qualquer ordenação porque ia diretamente para a query sem ordenação independentemente de ter o valor ordem ou não :)
Já está a dar,Obrigado mais 1 vez

Cumps

EDIT: Quer dizer afinal não funciona bem porque ele não os ordena agora com o !isset

EDIT2:

PHP:
        if(!isset($_GET["ordem"]) == "crescente")
        
        {
            $query = "select u.ID_Utente, us.Nome, u.Telefone 
                                from user as us 
                                LEFT JOIN utente as u on us.ID_User = u.ID_User
                                WHERE us.TipoUser = 'U'  
                                 "; 
                                }
         elseif($_GET['ordem'] == "decrescente"){
            $query = "SELECT u.ID_Utente, us.Nome, u.Telefone 
                                FROM user as us 
                                LEFT JOIN utente as u on us.ID_User = u.ID_User
                                WHERE us.TipoUser = 'U'  
                                ORDER BY Nome desc "; 
                                }
    else{
            $query = "SELECT u.ID_Utente, us.Nome, u.Telefone 
                                FROM user as us 
                                LEFT JOIN utente as u on us.ID_User = u.ID_User
                                WHERE us.TipoUser = 'U' 
                                ORDER BY Nome asc
                                ";    


        }

Eu fiz isso assim mas não percebo porque está a dar bem,supostamente deveria dar bem quando o ordem=crescente tivesse o order by Nome asc e não tivesse que o por no else. Porque funciona assim?
 
Última edição:
Boas
Estás a usar incorrectamente o isset,porque apenas verifica se o o valor "ordem" da querystring está definido.Teria de ser algo assim:
Código:
if(!isset($_GET["ordem"])){[INDENT]$query = "select u.ID_Utente, us.Nome, u.Telefone from user as us LEFT JOIN utente as u on us.ID_User = u.ID_User WHERE us.TipoUser = 'U'";
[/INDENT]
}
else{[INDENT]if($_GET["ordem"] == "decrescente")[/INDENT]
[INDENT=2]$query = "SELECT u.ID_Utente, us.Nome, u.Telefone FROM user as us LEFT JOIN utente as u on us.ID_User = u.ID_User WHERE us.TipoUser = 'U' ORDER BY Nome desc";
[/INDENT]
[INDENT]else[/INDENT]
[INDENT=2]$query = "SELECT u.ID_Utente, us.Nome, u.Telefone FROM user as us LEFT  JOIN utente as u on us.ID_User = u.ID_User WHERE us.TipoUser = 'U' ORDER  BY Nome";
[/INDENT]
}
Verifica se está a funcionar.
Cumps
 
Boas
Estás a usar incorrectamente o isset,porque apenas verifica se o o valor "ordem" da querystring está definido.Teria de ser algo assim:
Código:
if(!isset($_GET["ordem"])){[INDENT]$query = "select u.ID_Utente, us.Nome, u.Telefone from user as us LEFT JOIN utente as u on us.ID_User = u.ID_User WHERE us.TipoUser = 'U'";
[/INDENT]
}
else{[INDENT]if($_GET["ordem"] == "decrescente")[/INDENT]
[INDENT=2]$query = "SELECT u.ID_Utente, us.Nome, u.Telefone FROM user as us LEFT JOIN utente as u on us.ID_User = u.ID_User WHERE us.TipoUser = 'U' ORDER BY Nome desc";
[/INDENT]
[INDENT]else[/INDENT]
[INDENT=2]$query = "SELECT u.ID_Utente, us.Nome, u.Telefone FROM user as us LEFT  JOIN utente as u on us.ID_User = u.ID_User WHERE us.TipoUser = 'U' ORDER  BY Nome";
[/INDENT]
}
Verifica se está a funcionar.
Cumps

Sim,está :) Obrigado pela ajuda

Cumps
 
Back
Topo