how to traverse all elements of a php vector with javascript

0

How can I go through all the elements of a php vector in javascript because my javascript only takes the last name but my 'var_dump ()' is all I can understand how can I do this can anyone help me?

php code:

 foreach($_SESSION['carrinho'] as $id => $qtd){
                              $sql   = "SELECT *  FROM produtos WHERE id_produto= '$id'";
                              $qr    = mysql_query($sql) or die(mysql_error());
                              $ln    = mysql_fetch_assoc($qr);

                              $nomes  = $ln['nome'];
                              $preco = $ln['preco'];
                              $sub   = $ln['preco'] * $qtd;
                              $img   = $ln['img'];
                              $desc  = $ln['descricao'];
                              $id    = $ln['id_produto']; 


                              $nomes = array($nomes);
                              $nomes = implode("|", $nomes);
                              var_dump($nomes);

                    }

javascript code:

var i, array_produtos, string_array;
        //recebe a string com elementos separados, vindos do PHP
        string_array = "<?php echo $nomes; ?>";
        //transforma esta string em um array próprio do Javascript
        array_produtos = string_array.split("|");

        //varre o array só pra mostrar que tá tudo ok
        for (i in array_produtos)
        alert(array_produtos[i]);
    
asked by anonymous 20.11.2015 / 22:42

2 answers

1

Instance a variable outside the foreach, it is rewriting.

  

PHP

$final_result = "";
 foreach($_SESSION['carrinho'] as $id => $qtd){
                          $sql   = "SELECT *  FROM produtos WHERE id_produto= '$id'";
                          $qr    = mysql_query($sql) or die(mysql_error());
                          $ln    = mysql_fetch_assoc($qr);

                          $nomes  = $ln['nome'];
                          $preco = $ln['preco'];
                          $sub   = $ln['preco'] * $qtd;
                          $img   = $ln['img'];
                          $desc  = $ln['descricao'];
                          $id    = $ln['id_produto']; 

                          $final_result .= "|" . $nomes;

                }
  

Java Script:

var i, array_produtos, string_array;
        //recebe a string com elementos separados, vindos do PHP
        string_array = "<?php echo $final_result; ?>";
        //transforma esta string em um array próprio do Javascript
        array_produtos = string_array.split("|");

        //varre o array só pra mostrar que tá tudo ok
        for (i in array_produtos)
        alert(array_produtos[i]);

Below is a smarter way to get the data.

  

PHP (Get all the data and transform into json)

$final_result = array();
foreach($_SESSION['carrinho'] as $id => $qtd){
        $sql   = "SELECT *  FROM produtos WHERE id_produto= '$id'";
        $qr    = mysql_query($sql) or die(mysql_error());
        $ln    = mysql_fetch_assoc($qr);

        //Não sei se já existe quantidade em banco mas caso não exista estou setando ela manualmente abaixo:
        $ln['quantidade'] = $qtd;

        //Detalhe todos os campos do banco já estão no vetor inclusive nome img descricao etc...

        array_push($final_result, $ln);
}

$fjson = json_encode($final_result);
  

Javascript

var i, produtos;
//recebe o objeto json do php
produtos = <?php echo $fjson; ?>;

//varre o array só pra mostrar que tá tudo ok
for (i in produtos)
{
    alert("Nome: " + produtos[i].nome + "\nQuantidade: "+produtos[i].quantidade);
}
    
20.11.2015 / 22:58
0

Here is an example of how you could do this using the json_encode function of php:

<?php

$nomes = array(
  'nome1',
  'nome2',
  'nome3',
  'nome4',
  'nome5',
);

?>

<script type="text/javascript">

var nomes = <?php echo json_encode($nomes); ?>;

for (var nome in nomes) {
  console.log(nomes[nome]);
}

</script>

json_encode : This function returns a json-formatted representation of the variable that is passed as it argues for it. In the above example it will return the string below, which in javascript is interpreted as an array:

["nome1","nome2","nome3","nome4","nome5"]

By applying this function in your code, it could look like this:

<?php

$result = array();    

foreach($_SESSION['carrinho'] as $id => $qtd){
  $sql   = "SELECT *  FROM produtos WHERE id_produto= '$id'";
  $qr    = mysql_query($sql) or die(mysql_error());
  $ln    = mysql_fetch_assoc($qr);

  $nomes  = $ln['nome'];
  $preco = $ln['preco'];
  $sub   = $ln['preco'] * $qtd;
  $img   = $ln['img'];
  $desc  = $ln['descricao'];
  $id    = $ln['id_produto']; 

  $result[] = $nomes;

}

?>

<script type="text/javascript">

var i, array_produtos;
//recebe a string com elementos separados, vindos do PHP
array_produtos = <?php echo json_encode($result); ?>;
//transforma esta string em um array próprio do Javascript

//varre o array só pra mostrar que tá tudo ok
for (i in array_produtos)
    alert(array_produtos[i]);

</script>
    
20.11.2015 / 23:09