eucyelle 0 Denunciar post Postado Julho 11, 2012 Alguém pode me ajudar em uma duvida??? Então to tentando criar um gráfico onde tenho que colocar uns valores do banco. A principio estou testando apenas os 4 primeiros valores. O problema eh que quando eu coloco "$campo = mysql_fetch_array($linha, MYSQL_NUM)?" dentro do laço while ele não puxa os valores e quando eu coloco fora ele apenas puxa o primeiro valor... <script type="text/javascript"> var chart = new EJSC.Chart("myChart"); chart.addSeries(new EJSC.LineSeries(new EJSC.ArrayDataHandler([ <?php include('conecta.php'); $iLeitor = 1; //Coordenar a seleção $iCont2 = 0; $iCont = 0; //$iValor = array(); $sql="select * from dados where leitor='$iLeitor'"; $linha=mysql_query($sql,$conexao); while($campo = mysql_fetch_array($linha, MYSQL_NUM) && $iCont < 5) { if($iCont == 4) { ?> [<?php echo $iCont?>,<?php echo $campo[2]?>] <?php }//fim if($iCont2 == 4) else { ?> [<?php echo $iCont?>,<?php echo $campo[2]?>], <?php }// fim else $iCont ++; }//fim while($campo = mysql_fetch_array($consultar) && $iCont < 5) mysql_free_result($linha); ?> ]))); </script> Obrigada Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Julho 11, 2012 Você deve entender algumas coisas antes de eu explicar porque só retorna apenas um valor. Vejamos: A variável $linha, possui o resultado da função mysql_query(). Quando é realizado uma consulta(SELECT), mysql_query retorna um resource. Um resource é uma variável especial que mantem uma referência de um recurso externo. No caso de uma query, é uma lista. Uma lista, em programação, é uma estrutura de dados que te permite, avançar e retroceder entre as linhas (diferente de outras estruturas). Para avançar e retroceder, você move um ponteiro interno na lista. Sempre que a lista é criada, o ponteiro encontra-se na posição zero (primeira posição da lista). A função mysql_fetch_array(), mysql_fetch_assoc() e/ou mysql_fetch_object(), retorna o valor aonde o ponteiro se encontra e, após retornar o valor, move o ponteiro uma posição para a frente. Vamos a prática, segue uma lista, o nome da coluna é 'nome'. -> Gabriel Heming eucyelle Fulano da Silva Considere a seta (->) o ponteiro da lista. Quando utilizamos a função mysql_fetch_array(), ele retorna a primeira linha: $linha = mysql_fetch_array($resource); echo $linha['nome']; Saída: Gabriel Heming O ponteiro move-se uma posição para frente, e nossa lista fica da seguinte maneira: Gabriel Heming -> eucyelle Fulano da Silva Por isso que fora do while, você retorna apenas um resultado. Já para o loop(while), ele sempre será realizando enquanto a condição for verdadeira. while(true) { /** codigo **/ } Agora vamos ao exemplo prático com referência a essa lista: -> Gabriel Heming eucyelle Fulano da Silva Código: while($linha = mysql_fetch_array($resource)) { echo $linha['nome'].'<br/>'; } O que realmente acontece: - Entra no loop(while); - Retorna a primeira linha; - Atribui o valor da linha na variável $linha; - O loop considera a condição verdadeira, pois retorna um vetor com elementos; - Move o ponteiro para a frente; - Imprime o valor na coluna nome. A saída será: Gabriel Heming E nossa lista estará: Gabriel Heming -> eucyelle Fulano da Silva Quando você chega no final do loop, ele vai verificar se a condição continua verdadeira. Como há uma linha na posição 2, ele repetira o processo acima mencionado, e a saída será: eucyelle E a lista estará: Gabriel Heming eucyelle -> Fulano da Silva Quando não houver mais itens na lista, a função mysql_fetch_array(), retorna false. O loop irá reconhecer a condição como false e não irá mais executá-la. Já o problema de não entrar no loop, deve ocorrer por dois motivos (um dos dois talvez). Por haver duas condições no seu while, ou por não estar entre parênteses: while(($campo = mysql_fetch_array($linha, MYSQL_NUM)) && $iCont < 5) { Eu acho a primeira hipótese a mais plausível. Eu sugiro testar somente desta maneira: while($campo = mysql_fetch_array($linha, MYSQL_NUM)) { Compartilhar este post Link para o post Compartilhar em outros sites
eucyelle 0 Denunciar post Postado Julho 11, 2012 Obrigadaaaaaaaaaaaaaaaaa!! Deu certo..... Só coloquei os parenteses... nem acredito que era só isso. A sua explicação foi de grande ajuda.... Valewwww... Compartilhar este post Link para o post Compartilhar em outros sites