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

?= no PHP

Discussão em 'Web Development' iniciada por Aparicio, 1 de Junho de 2006. (Respostas: 21; Visualizações: 1635)

  1. Aparicio

    Aparicio /dev/mod
    Staff Member

    Queria saber como trabalhar com esta "coisa" --> *.php?"açao"="valor", para que altere a forma como organiza os dados, tipo alfabeticamente por ou nick.

    Mais concretamente fazer com conforme o link tipo: pagina.php?action=1; pagina.php?action=2; etc.
    E fizesse que para que um organizasse alfabeticamente por uma coluna da tabela e outra que organizasse alfabeticamente por uma outra coluna.

    O código que tenho é este:
    <?php

    //------------- Conexão à base de dados -------------------//
    mysql_connect("localhost", "username", "password") or
    die("Não pude conectar: " . mysql_error());
    mysql_select_db("nome");

    //------------- Selecção da tabela -------------------//
    $result = mysql_query("SELECT * FROM tabela");

    //------------- Apresentação dos resulatados -------------------//
    while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    printf("
    <p>%s</p>
    <p>%s</p>
    ", $row[2], $row[0]);
    }

    //------------- Liberta a memória -------------------//
    mysql_free_result($result);
    ?>

    Agradecia que me pudessem ajudar como trabalhar com isso.
     
  2. Lancaster

    Lancaster To fold or to FOLD?

    Heyas all...

    Essa coisa chama-se passar os parâmetros por $_GET...

    Pegando no teu código:

    Código:
    <?php
    
    //------------- Conexão à base de dados -------------------//
    mysql_connect("localhost", "username", "password") or
       die("Não pude conectar: " . mysql_error());
     mysql_select_db("nome");
     
    //------------- Selecção da tabela -------------------//
    
    //Como é aqui que se faz o select, é aqui que temos trabalhar com as várias opções que vêm por $_GET
    
    if ( $_GET['accao'] == 1 )
        $query = "select * from tabela order by campo1";
    else if ( $_GET['accao'] == 2 )
        $query = "select * from tabela order by campo2";
    else//No caso de o $_GET for outra coisa qq..
         $query = "select * from tabela order by campo1";
    
    $result = mysql_query($query);
    
    //------------- Apresentação dos resulatados -------------------//
    while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
        printf("
       <p>%s</p>
       <p>%s</p>
        ", $row[2], $row[0]); 
    }
    
    //------------- Liberta a memória -------------------//
    mysql_free_result($result);
    ?>
    
    E pronto facilímo...amanhã vou fazer exactamente a mesma coisa que tu tens fazer...

    Nunca te esquecas é de proteger para quando não existem valores válidos de $_GET, basicamente para não aparecerem erros a quem está a ver a página...que fica sempre mal..

    Hasta all e espero ter ajudado [[]]
     
  3. CrazyBomber

    CrazyBomber Power Member

    Só queria adicionar que, precisamente para proteger de quando não existe um valor no $_GET, existe o método isset(), que verifica se determinada posição no array existe ou não.

    Assim, tinhamos na parte de selecção da tabela:
    Código:
    //------------- Selecção da tabela -------------------//
    
    //Como é aqui que se faz o select, é aqui que temos trabalhar com as várias opções que vêm por $_GET
    
    if( !isset( $_GET['accao'] ) )
        $_GET['accao'] = 1; //accao por defeito...
    
    if ( $_GET['accao'] == 1 )
        $query = "select * from tabela order by campo1";
    else if ( $_GET['accao'] == 2 )
        $query = "select * from tabela order by campo2";
    else
        qq coisa... //o que fazer quando não é 1 ou 2? se o user meter 3? lol
    
    $result = mysql_query($query);
    
     
  4. Aparicio

    Aparicio /dev/mod
    Staff Member

    Muto obrigado.:)

    Eu já tinha tentado procurar no manual do php.net mas não sabia como se chamava isso e aquilo não é nada pequeno.


    Cumprimentos
     
  5. Lancaster

    Lancaster To fold or to FOLD?

    Uma cena...o último else que eu pus no meu código não tratava disso? Ou tem mesmo que ser dessa maneira? Eu até costumo usar bastantes vezes o isset(...) só que para estes casos acho que não é preciso..

    Hasta all [[]]

    EDIT:
    Não é necessário por o isset(....), mas só na via das dúvidas é capaz de ser aconselhavel o uso dele...
     
    Última edição: 2 de Junho de 2006
  6. CrazyBomber

    CrazyBomber Power Member

    Se tentares aceder a uma posição do array não iniciada, o PHP manda um erro (se tiver a opção ligada). Com o isset dá para contornares isso. Até poupa algum trabalho, verificar se o valor está lá ou não, antes de o tentar processar :)

    Mas sim, o teu último else dava conta do recado :P
     
  7. Aparicio

    Aparicio /dev/mod
    Staff Member

    Como é que se faz para que no WHERE = id, o id seja igual ao valor do $_GET?

    $result = mysql_query("SELECT * FROM lista_membros WHERE = id ");
     
  8. CrazyBomber

    CrazyBomber Power Member

    $result = mysql_query("SELECT * FROM lista_membros WHERE id= " . $_GET['idDoGet'] );

    Percebes mais ou menos? Vais buscar o valor do get ao array, e juntas à string de sql, no sitio apropriado :)
     
  9. Aparicio

    Aparicio /dev/mod
    Staff Member

    Pois, estive a esperiemntar criar uma variável com o $_GET, e adicionar, mas havia qualquer coisa que não estava a funcionar bem.

    Obrigado e Cumprimentos.
     
  10. Tuaregue

    Tuaregue Power Member

    eu não percebo nada de php, bem um pouquinho, mas isto cheira-me que está pronto para levar com um sql injection.
     
  11. Aparicio

    Aparicio /dev/mod
    Staff Member

    Que queres dizer com sql injection?
     
  12. Aparicio

    Aparicio /dev/mod
    Staff Member

    Como é que atribuo $_GET['id'] a uma variavel e depois uso a variavel no IF.

    È que se não for assim tenho de estar sempre a repetir como aqui:


    if ( $_GET['id'] == 1 ) {include('página1.html');}
    else if( $_GET['id'] == 2 ) {include('página2.html');}
    else if( $_GET['id'] == 3 ) {include('página3.html');}
    else if( $_GET['id'] == 4 ) {include('página4.html');}
    else if( $_GET['id'] == 5 ) {include('página5.html');}
     
    Última edição: 3 de Junho de 2006
  13. Lancaster

    Lancaster To fold or to FOLD?

    Heyas all..

    Vê isto: http://en.wikipedia.org/wiki/SQL_Injection, melhor que explicado que isto deve ser impossivél...

    Fácil:

    Código:
    $var_xpto = $_GET['id'];
    
     
  14. Aparicio

    Aparicio /dev/mod
    Staff Member

    Bem, já tinha tentado mas só por faltar isto ; no fim não dava.

    Quanto ao sql injection, isso estava em Inglês, não percebi bem.
    O que faz essa falha de segurança?
     
  15. Aparicio

    Aparicio /dev/mod
    Staff Member

    (Postei duas vezes por engano. Não dá para eu eliminar?)
     
    Última edição: 3 de Junho de 2006
  16. CrazyBomber

    CrazyBomber Power Member

    Basicamente, "injecta" código do utilizador na tua query de sql. Não é mt bonito :P

    Por isso, podes resolver a cena, por exemplo, adicionando uma condição para verificar a string do get. Ou, no caso de ser um inteiro, verificar se é efectivamente um inteiro.

    if( is_numeric( $_GET['id'] ) )

    Há mais maneiras de dar a volta à situação. Tenta garantir que não corres queries sql geradas com parâmetros dado pelo utilizador sem que esses parâmetros tenham sido verificados primeiro.
     
  17. Aparicio

    Aparicio /dev/mod
    Staff Member

    Mas onde é que insiro isso?

    E que tipo de problemas é que isso pode trazer?
     
  18. Lancaster

    Lancaster To fold or to FOLD?

    Por exemplo, imaginando que estás a criar uma página onde tens vários produtos, para ver o detalhe de cada produto carregas na imagem..

    Uma das maneiras mais fáceis de fazer isto em PHP é teres uma outra página, onde "entra" o id do produto...

    Quando carregas no link que deve ser algo do género: www.exemplo.pt/detalhe.php?id=2, ele faz-te um select à BD para ir buscar os vários detalhes do produto que tem código 2...

    Antes de fazeres o select que seria algo do género: select * from produtos where id = $_GET['id'], fazes a verificação do $_GET['id'] através do isnumeric, senão for número dá mensagem de erro ou coisa parecida, e porquê? Porque todos os id's têm que ser numéricos (neste exemplo)


    Se não fizeres a verificação, podem por exemplo por no $_GET['id'] o seguinte:
    Código:
    1';drop produtos;//Apagava-te logo a tabela dos produtos..
    
    E o que é que acontecia? Ficavas sem os produtos, tb podiam por uma query que inserisse valores na tabela produtos, ou se tiveres um sistema de login, podiam adicionar um novo utilizador...e por aí adiante...

    Hasta all e espero ter ajudado [[]]
     
  19. Aparicio

    Aparicio /dev/mod
    Staff Member

    Tenho uma página assim, uma lista de membros e quando se carregua no nome vai ter a uma página com os detalhes do membro.
    Já pus o if( is_numeric( $_GET['id'] ) ) e funciona.



    Mas na página da lista de membros tenho um select para ordenar de várias maneiras.
    também é preciso por o if( is_numeric( $_GET['id'] ) ) ai?
     
  20. Lancaster

    Lancaster To fold or to FOLD?

    Se for um número que usas para saber como hás-de ordenar...sim claro...

    Se for outra coisa qualquer...tens que validar pela outra coisa... ( o que vai pelo $_GET[''] )

    Tudo o que o utilizador possa introduzir, tens que validar sempre, para não teres problemas...

    Hasta all [[]]
     

Partilhar esta Página