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

Erro SQL em query

Discussão em 'Web Development' iniciada por satman1, 5 de Outubro de 2008. (Respostas: 8; Visualizações: 707)

  1. satman1

    satman1 Power Member

    Olá,

    Tenho a seguinte query:

    PHP:
    $query3 "SELECT c.*, r.montante_pagam s.nome_user FROM #__pagamentos_socios AS c LEFT JOIN #__pagamentos AS r  ON c.id_pagamento='$_POST['$rowsPagamento['descricao_pagam']'
    LEFT JOIN #__associados AS s ON s.id = c.idAssociado LEFT JOIN #__users AS u ON u.id=s.id_user.id"
    ;
    O objectivo é fazer a listagem de todos os pagamentos efectuados do tipo seleccionado.

    O problema é aquele'$POST['$rowsPagamento['descricao_pagam']'.Indica o pagamento que foi seleccionado.

    Parse error
    : syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
     
  2. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Tira a plica depois de $_POST[, acrescenta um ], e talvez seja melhor pôres chavetas à volta disso:


    PHP:
    $query3 "SELECT c.*, r.montante_pagam s.nome_user 
               FROM #__pagamentos_socios 
                 AS c 
               LEFT JOIN #__pagamentos 
                 AS r 
                 ON c.id_pagamento='
    {$_POST[$rowsPagamento['descricao_pagam']]}'
               LEFT JOIN #__associados 
                 AS s 
                 ON s.id = c.idAssociado 
               LEFT JOIN #__users 
                 AS u 
                 ON u.id=s.id_user.id"
     
  3. satman1

    satman1 Power Member

    Tive de efectuar alguma correcções na query porque tinha alguns erros.
    A query já "funciona", mas não faz o que lhe peço. No notepad++ a parte que colocaste dentro de chavetas fica a preto, pelo que não deve estar a ser reconhecido...

    PHP:

    $query3 
    "SELECT c.*, r.montante_pagam, s.nome_user 
               FROM #__pagamentos_socios 
                 AS c 
               LEFT JOIN #__pagamentos 
                 AS r 
                 ON c.id_pagamento='
    {$_POST[$rowsPagamento['descricao_pagam']]}'
               LEFT JOIN #__associados 
                 AS s 
                 ON s.id = c.idAssociado 
               LEFT JOIN #__users 
                 AS u 
                 ON u.id=s.id_user"

     
  4. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Quanto a não fazer o que lhe pedes, isso já tens de ser tu a pensar, mas aquele $_POST parece-me mesmo estranho :P eu só te tratei do erro sintático.
    O que está dentro das chavetas fica a preto porque isso é a indicação em como "não faz parte da string". Não é "$_POST[...]" que vai para a string; é o conteúdo disso. Normalmente fica a cinzento e negrito, mas as chavetas permitem-te o uso das aspas sem "acidentes". Usa-as quando quiseres estender variáveis mais complicadas ;)
     
  5. [C4]

    [C4] Power Member

    Nao percebo de php, mas assim de repente diria que o problema esta nesta linha.
    ON c.id_pagamento='{$_POST[$rowsPagamento['descricao_pagam']]}'
    Penso que deve ficar qualquer coisa deste genero, pois como o Kayvlim disse, o que tu queres porcurar nao é o $_POST mas o conteudo deste.
    ON c.id_pagamento='".{$_POST[$rowsPagamento['descricao_pagam']]}."'
    se as chavetas teem de ficar ou nao, isso ja nao sei, pois como referi nao sei php.(sei apenas que para concatenar string se usa o ponto)

    Tenta fazer um "output" da $query3 para veres se o contudo é aquele que esperas.
     
    Última edição: 6 de Outubro de 2008
  6. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    [C4], em PHP quando tens uma string dentro de uma variável, a string é "expandida" (acho que este é que é o termo certo) para o seu valor. O problema é que, apesar de
    PHP:
    $x "World";
    $y "Hello, $x!";
    echo 
    $y;
    funcionar, há casos em que isso pode confundir o PHP e provocar erros de sintaxe:
    PHP:
    $variavel["a"] = "World";
    $y "Hello, $variavel["a"]!"// <--- linha do erro
    echo $y;
    e para esses casos usam-se as chavetas:
    PHP:
    $variavel["a"] = "World";
    $y "Hello, {$variavel["a"]}!";
    echo 
    $y;
    para delimitarem correctamente a variável no interior da string.
     
    Última edição: 6 de Outubro de 2008
  7. [C4]

    [C4] Power Member

    Sempre se pode usar o metodo "nao compacto" ou nao?(Sempre aproveito para aprender alguam coisa)
    PHP:
    $id_pagamento $_POST[$rowsPagamento['descricao_pagam']]
    $query3 "SELECT c.*, r.montante_pagam, s.nome_user 
    FROM #__pagamentos_socios 
    AS c 
    LEFT JOIN #__pagamentos 
    AS r 
    ON c.id_pagamento='"
    .$id_pagamento."'
    LEFT JOIN #__associados 
    AS s 
    ON s.id = c.idAssociado 
    LEFT JOIN #__users 
    AS u 
    ON u.id=s.id_user"

    Quaquer da formas, uma analise ao conteudo de $query3 vai revelar o problema.
    o valor para comparacao de c.id_pagamento está incorrecto ou vazio.

    Parece-me que temos aqui uma incoerencia.
    no $_POST recolhes "descricao do pagamento" e na query estas a pedir id_pagamento = descricao_pagamento. Não será este o problema?
    id_pagamento e descricao_pagamento normalmente sao coisas diferentes. Pode ser esse o problema.
     
    Última edição: 6 de Outubro de 2008
  8. ups

    ups Power Member

    Ja agora:

    Nunca uses $_POST directamente numa query SQL. É estares a pedir para que te limpem a base de dados com um simples SQL Injection.
    Usa:

    $id_pagamento = mysql_real_escape_string($_POST[$rowsPagamento['descricao_pagam']]);

    Se estiveres a usar mysql
     
  9. satman1

    satman1 Power Member

    Quanto à comparação do id_pagamento com $_POST[$rowsPagamento['descricao_pagam']], o $rowsPagamento faz a selecção do pagamento, fazendo o load do id. Sim, tens razão quando dizes que[$rowsPagamento['descricao_pagam']]=id_pagamento não faz sentido, pois estou a comparar o id com outro campo, mas o "genericList" faz o load do id mostrando apenas o texto que envio para o select. Foi o que entendi no estudo da API do joomla.

    PHP:
    $rowsPagamento['descricao_pagam']= JHTML::_('select.genericlist',$rowsPagamento,'id_pagamento','class="inputbox" size="1"''value''text',$row->id_pagamento);
     

Partilhar esta Página