Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rfamelli

[Resolvido] Array nao funciona com php

Recommended Posts

pessoal, to precisando fazer um slide de imagens em javascript que integra com php puxando as imagens do banco.

No entanto surge um problema. Quando faço while, ele pega inclusive a vírgula depois do colchete e faz com que não funcione.

 

Como eu faço isso? Como faço o loop, sendo que a última linha não pega a vírgula?

 

Alguem me help?

Obrigada desde já!

<script type="text/javascript"> 


var mygallery2=new fadeSlideShow({ 
wrapperid: "fadeshow2", //ID of blank DIV on page to house Slideshow 
dimensions: [190, 111], //width/height of gallery in pixels. Should reflect dimensions of largest image 

imagearray: [<? php while($row = mysql_fetch_array($result)) { ?> 
[<? echo "$row['nome']"?>.jpg, "link.php", "", ""], 
<?} ?> 
//<--no trailing comma after very last image element! 
], 
displaymode: {type:'manual', pause:2500, cycles:0, wraparound:false}, 
persist: false, //remember last viewed slide and recall within same session? 
fadeduration: 500, //transition duration (milliseconds) 
descreveal: "always", 
togglerid: "fadeshow2toggler" 
}) 

</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

<script type="text/javascript">


var mygallery2=new fadeSlideShow({
wrapperid: "fadeshow2", //ID of blank DIV on page to house Slideshow
dimensions: [190, 111], //width/height of gallery in pixels. Should reflect dimensions of largest image

imagearray: [<?php while($row = mysql_fetch_array($result)) { ?>
[<? echo $row['nome']; ?>.jpg, "link.php", "", ""],<?php } ?>
//<--no trailing comma after very last image element!
],
displaymode: {type:'manual', pause:2500, cycles:0, wraparound:false},
persist: false, //remember last viewed slide and recall within same session?
fadeduration: 500, //transition duration (milliseconds)
descreveal: "always",
togglerid: "fadeshow2toggler"
})

</script> 

Tente agora.!

 

você separou o <? de php, tem que ser junto. <?php.

E no seu echo $row['nome'], você não colocou o ponto e vírgula no final, e colocou aspas duplas. Eu retirei, não é necessário.

E na chaves que fecha o WHILE você colocou assim <? } ?>, ele não estava identificando como PHP. Então eu coloquei <?php } ?>.

 

Ok ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu aconselho você colocar todos os dados primeiro em um array:

<?php while($rows = mysql_fetch_array($result)) { 
$dados = $rows;
}
?>
Agora que você tem todos os registros você os conta:

$num_regs = count($dados);
Agora você tem o numero de registros, ou seja, você tem o número do ultimo registro.

Sendo assim, quando for o ultimo numero você não exibe a virgula. Para fazer isso você vai precisar de uma variavel que armazena o numero da iteração atual:

$i = 1;
foreach($dados as $row):
    echo $row['nome'];
    if($i != $num_regs) // Se o numero da iteração atual for diferente ao numero total de registros entra no IF
          echo ',';


    $i++; // Iterador
endforeach;

Bom, é algo do tipo, estuda aí e adapta =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Separa o codigo php do javascript fica bem melhor, no caso ali poderia usar ajax

 

mas para corrigir seu problema, você pode pegar todos os dados do banco guardar num array e depois ai sim passar a virgula do jeito certo sem sobrar uma no final

 

imagearray: [<?php while($row = mysql_fetch_array($result)) { ?> 
$arr[] = ".[".$row['nome'].".jpg, \"link.php\", \"\", \"\"]"; 
<?php
}
$imgs = implode(",", $arr);
echo $imgs;
?>
], 
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Separa o codigo php do javascript fica bem melhor, no caso ali poderia usar ajax

 

mas para corrigir seu problema, você pode pegar todos os dados do banco guardar num array e depois ai sim passar a virgula do jeito certo sem sobrar uma no final

 

imagearray: [<?php while($row = mysql_fetch_array($result)) { ?> 
	$arr[] = ".[".$row['nome'].".jpg, \"link.php\", \"\", \"\"]"; 
<?php
}
$imgs = implode(",", $arr);
echo $imgs;
?>
], 
...

Valeu pessoal,muito obrigada pela ajuda.

 

Fabio acho que é esse o caminho. mas com este código está dando o erro Warning: implode() [function.implode]: Invalid arguments passed in /home/storage/2/b1/6b/r2consulting/public_html/index.php on line 51

 

O que é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

como nao da para eu testar apenas te mostrei como seria

 

mas tenta dar um print_r para saber como esta o array

 

print_r($arr);

 

 

Fiz o print_r e nao printou nada mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então nao esta montando nada dentro do while

 

testa se a consulta esta retornando algum valor

 

ou faz assim só pra você testar

 

imagearray: [<?php 
$i = 0;
while($row = mysql_fetch_array($result)) { ?> 
   $i++;
       $arr[] = ".[".$row['nome'].".jpg, \"link.php\", \"\", \"\"]"; 
<?php
}
echo $i;
$imgs = implode(",", $arr);
echo $imgs;
?>
],

 

se o resultado do $i for 0 você tem certeza que o while esta nao retornando nada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então nao esta montando nada dentro do while

 

Talvez declarar a matriz antes do while possa ajudar:

 

$arr = array();

while($row = mysql_fetch_array($result)) {
$arr[] = sprintf( '["%s.jpg","link.php", "", ""]' , $row[ 'nome' ] );
}

// Se existir alguma imagem na matriz, mostramos.
if ( count( $arr ) ){
echo implode( ',' , $arr);
} else {
echo 'A matriz está vazia.';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.