1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema a soluciona um problema em PHP+Mysql

Discussão em 'Web Development' iniciada por andrebarradas13, 16 de Maio de 2012. (Respostas: 5; Visualizações: 586)

  1. andrebarradas13

    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: 16 de Maio de 2012
  2. 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
     
  3. andrebarradas13

    andrebarradas13 Power Member

    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: 16 de Maio de 2012
  4. 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
     
  5. andrebarradas13

    andrebarradas13 Power Member

    Sim,está :) Obrigado pela ajuda

    Cumps
     
  6. Boas
    Sempre às ordens ;)
    Cumps
     

Partilhar esta Página