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

Interpretar variável em Select de Mysql

Discussão em 'Web Development' iniciada por JPCarvalhinho, 16 de Agosto de 2007. (Respostas: 17; Visualizações: 4318)

  1. JPCarvalhinho

    JPCarvalhinho Colaborador
    Staff Member

    Bom dia... estou farto de arrancar cabelos por causa desta coisa..

    Tenho uma variável em PHP que se chama

    PHP:
    $encomenda_id
    ...que se eu fizer o seu
    PHP:
    Print $encomenda_id
    obtenho o seu valor no ecrã

    Mas agora quero fazer uma query que use essa variável na condição Where e que é mais ou menos o seguinte:



    PHP:
    $query "SELECT exp_enc_produto_lista.encomenda_id, exp_enc_produto_lista.produto_id, exp_enc_produto_lista.quantidade, exp_weblog_data.field_id_5 
    FROM exp_enc_produto_lista 
    LEFT JOIN exp_weblog_data ON exp_enc_produto_lista.produto_id=exp_weblog_data.field_id_4 
    WHERE exp_enc_produto_lista.encomenda_id = 
    $encomenda_id";
    Ora esta query resulta num conjunto vazio, mas seu eu substituir
    PHP:
    $encomenda_id
    pelo seu valor já obtenho resultados.

    Ou seja.. qual o formato que eu tenho que usar para meter o valor da variável na query?

    (exemplo de valor = 1_1111111)

    Cumps
    JPC
     
  2. SoundSurfer

    SoundSurfer Power Member

    Não sei como se faz em PHP, mas normalmente, se estás a escrever a variável dentro de aspas, o mais provável é ser interpretado mesmo como string... tens de concatenar a string query com o valor da valiável...
     
  3. CoolMaster

    CoolMaster Power Member

    O PHP normalmente faz o parse das variaveis nas strings, mas sim... o melhor é sempre concatenar, eu nunca mas nunca uso variaveis enclosed nas "" ou ''.

    Não deve ser esse o problema, a minha pergunta é: estas a fazer esse query onde? Numa função? Se for numa função, a variavel esta visivel no scope da função? Isto é, estas a envia-la com argumento ou a declara-la como global variable? Se a resposta é sim a estas questões, já sabes o que fazer:P Se não for, vais ter que dar mais dados.
     
  4. JPCarvalhinho

    JPCarvalhinho Colaborador
    Staff Member

    Declaro-a como global e atribuo-lhe um valor com base num cookie :)

    não estou a usar numa função...

    E como é que eu concateno isto para dar resultados? é que já experimentei todas as combinações possíveis e imaginárias :±

    Só preciso mesmo do que escrever em:

    exp_enc_produto_lista.encomenda_id = $encomenda_id






    entretanto aqui fica código da página completo é (a ligação à BD está estabelecida à priori pelo CMS onde está incluído):

    PHP:
    <?php if (isset($_COOKIE["encomenda_id"])) {
           global 
    $encomenda_id
           global 
    $HTTP_COOKIE_VARS;
            
    $encomenda_id $HTTP_COOKIE_VARS["encomenda_id"];
    print 
    $encomenda_id//está OK
    } else {
    Print 
    "Ocorreu um erro... Por favor carregue no botão de regressar do seu browser. Se este erro persisitir, não poderá prosseguir. Contacte o administrador";

    ?>
    {embed="Angola/_header" my_site="mpsfarmaceutica"}

    <?php 

    $query 
    "SELECT exp_enc_produto_lista.encomenda_id, exp_enc_produto_lista.produto_id, exp_enc_produto_lista.quantidade, exp_weblog_data.field_id_5 FROM exp_enc_produto_lista LEFT JOIN exp_weblog_data ON exp_enc_produto_lista.produto_id=exp_weblog_data.field_id_4 WHERE exp_enc_produto_lista.encomenda_id =" $encomenda_id ." "

    $result mysql_query ($query); 
    ?>
    <br />
    <p>Encomenda Número:  <?php print $encomenda_id;?> //Está OK
    <br />
    <table width="100%" border="0" cellspacing="1" cellpadding="0" class="tabela">
    <tr class="cabecalho">
    <td class="cabecalho" align="center">Código</td>
    <td class="cabecalho" align="center">Nome</td>
    <td class="cabecalho" align="center">Quantidade</td>
    </tr>
    <?php
    for ($count 0$row mysql_fetch_array($result); $count++) {

    ?>
    <tr>

    <td class="celula" align="center"><?php echo $row[1]; ?></td>
    <td class="celula"><?php echo $row[3]; ?></td>
    <td class="celula" align="center"><?php echo $row[2]; ?></td>

    </tr>
    <?php ?>
    </table>

     
    Última edição: 16 de Agosto de 2007
  5. G3-

    G3- Power Member

    Experimenta tirar os espaços, assim:

    alltrim(exp_enc_produto_lista.encomenda_id) = alltrim($encomenda_id)
     
    Última edição: 16 de Agosto de 2007
  6. Slash

    Slash Power Member

    PHP:
    $query "SELECT exp_enc_produto_lista.encomenda_id, exp_enc_produto_lista.produto_id, exp_enc_produto_lista.quantidade, exp_weblog_data.field_id_5 FROM exp_enc_produto_lista LEFT JOIN exp_weblog_data ON exp_enc_produto_lista.produto_id=exp_weblog_data.field_id_4 WHERE exp_enc_produto_lista.encomenda_id =" $encomenda_id;
    Experimenta assim depois diz se funciona

    Nuno
     
    Última edição: 16 de Agosto de 2007
  7. JPCarvalhinho

    JPCarvalhinho Colaborador
    Staff Member

    bendito techzone... estas cores garridas ajudaram-me a identificar que o problema não seria inteiramente daqui...

    Nunca tinha reparado mas o erro agora está umas linhas mais abaixo em :

    PHP:
    for ($count 0$row mysql_fetch_array($result); $count++) {
    que dá um output de:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in yada yada yada yada...

    De qualuqer das formas quando eu substituo a variável por um dos valores que ela toma, o erro desaparece e apresenta os valores... :(
     
    Última edição: 16 de Agosto de 2007
  8. SoundSurfer

    SoundSurfer Power Member

     
  9. JPCarvalhinho

    JPCarvalhinho Colaborador
    Staff Member

    Já experimentei... e dá o mesmo erro...
    O select é feito umas linhas mais acima e não dá erro... o que agora dá erro é esta expressão que vai fazer a múltiplas linhas enquanto o cout não chga ao valor obtido na query...
     
  10. G3-

    G3- Power Member

    Ele dá-te esse erro nessa linha:
    PHP:
    for ($count 0$row mysql_fetch_array($result); $count++) {[php]

    porque a query ($resultestá a devolver "vazio".

    O problema está mesmo na query.
     
  11. G3-

    G3- Power Member

    $query = "SELECT exp_enc_produto_lista.encomenda_id, exp_enc_produto_lista.produto_id, exp_enc_produto_lista.quantidade, exp_weblog_data.field_id_5 FROM exp_enc_produto_lista LEFT JOIN exp_weblog_data ON exp_enc_produto_lista.produto_id=exp_weblog_data.field_id_4 WHERE alltrim(exp_enc_produto_lista.encomenda_id) = alltrim($encomenda_id)";
     
  12. JPCarvalhinho

    JPCarvalhinho Colaborador
    Staff Member

    g3- dá o mesmo erro
     
  13. G3-

    G3- Power Member

    E assim?

    PHP:
    $encomenda_id alltrim($encomenda_id);

    $query "SELECT exp_enc_produto_lista.encomenda_id, exp_enc_produto_lista.produto_id, exp_enc_produto_lista.quantidade, exp_weblog_data.field_id_5 FROM exp_enc_produto_lista LEFT JOIN exp_weblog_data ON exp_enc_produto_lista.produto_id=exp_weblog_data.field_id_4 WHERE exp_enc_produto_lista.encomenda_id = $encomenda_id)";
     
  14. JPCarvalhinho

    JPCarvalhinho Colaborador
    Staff Member

    mmm assim pendurou todo o CMS ;)


    "Fatal error: Call to undefined function alltrim() in"
     
  15. JPCarvalhinho

    JPCarvalhinho Colaborador
    Staff Member

    acho que o problema está na definição da $encomenda_id, que uso um misto de tags PHP e ExpressionEngine...


    em vez de $encomenda_id = 1_11111111

    está a assumir o valor:

    $encomenda_id = {member_id}_11111111
     
    Última edição: 16 de Agosto de 2007
  16. G3-

    G3- Power Member

    Sorry mate, em php é trim() em vez de alltrim() ;)

    ou str_replace(' ', '', $encomenda_id );


    PHP:
    $encomenda_id str_replace(' '''$encomenda_id );
    Se o print te da o valor correcto continuo a achar que é um problema de espaços no fim da string.
     
    Última edição: 16 de Agosto de 2007
  17. mascker

    mascker Power Member

    Viva,
    PHP:
    $query "SELECT exp_enc_produto_lista.encomenda_id, exp_enc_produto_lista.produto_id, exp_enc_produto_lista.quantidade, exp_weblog_data.field_id_5 FROM exp_enc_produto_lista LEFT JOIN exp_weblog_data ON exp_enc_produto_lista.produto_id=exp_weblog_data.field_id_4 WHERE exp_enc_produto_lista.encomenda_id ='$encomenda_id' "
    Se o problema for da variavel, muda o nome :D, mas tenta da maneira que coloquei acima

    Saudações
     
  18. JPCarvalhinho

    JPCarvalhinho Colaborador
    Staff Member

    BIngo!!!

    Depois de muito matutar, experimentar e etc eis o que se passava...

    O Expression Engine (CMS) tem uma layer de abstracção da ligação à bd e um interpretador de comandos que interpreta tudo oque esteja entre {} em código html, procurando nos seus valores de variáveis globais por si definidos...

    Quando criei a variável da primeira vez, queria que ela fosse igual ao userid_timestamp e criei a variável como ={member_id}_{current_time}

    Sempre que usava a variável em HTTP ela era correctamente interpretada como sendo 1_111111, mas em PHP... ficava {member_id}_111111111 (não me perguntem porque o tempo era correctamente identificado pois não sei dizer)

    ORa nesta query estava então quando a variavel era interpretada a dizer que where encomenda_id={member_id}_11111 e por isso não retornava qualquer valor!!!!



    Só quando fui ver como é que estava a ser criado o cookie é que reparei nesta treta... e o cooki é criado duas páginas antes :)) como ele para apresentar os prints da variável ele fazia o parse da mesma no EEngine... aparecia-me semrpe o valor correcto :)

    Tive que chamar uma variável de Sistema (gere as ligações e isolar o valor do member_id para a criação do cookie!!!

    Agora com isto corrigdo e usando a forma do masker, tudo encaixou :)

    A todos um muito obrigado...




    A todos um muito obrigado!!!!
     

Partilhar esta Página