Как я могу заполнить массив JavaScript значениями из базы данных с помощью PHP? - PullRequest
2 голосов
/ 13 сентября 2009

Мне нужно создать массив javascript, чьи элементы извлекаются php из базы данных. Является ли это возможным? Если да, то как?

(я не хочу использовать ajax для этого)

Ответы [ 5 ]

5 голосов
/ 13 сентября 2009

Соберите значения в массиве и преобразуйте его в JSON с помощью json_encode:

$array = array();
while ($row = mysql_fetch_assoc($result)) {
    $array[] = $row['key'];
}
echo 'var array = '.json_encode($array).';';
4 голосов
/ 13 сентября 2009

Ответ 1: да, это можно сделать.

Ответ 2: Вот как:

$js_array = "[";
$result = mysql_query("some query of yours");
while( $row=mysql_fetch_array($result, MYSQL_NUM) ) {
    $js_array .= $row[0]; // assuming you just want the first field 
                          // of each row in the array
    $js_array .= ",";
}
$js_array{ strlen($js_array)-1 } = ']';

echo "var db_array = $js_array ;";

ура!

1 голос
/ 13 сентября 2009
<script language="javascript1.2">
var arr = new array(<?php 
$result = mysql_query("select .... ");
$count = mysql_num_rows($result);
if($count>0){
  for( $i=0;$i<$count-1;$i++) {
    $row = mysql_fetch_row($result);
    echo $row[0],',';
  }
  $row = mysql_fetch_row($result);
  echo $row[0],',';
}
?>);
</script>
1 голос
/ 13 сентября 2009

Если вы можете просмотреть содержимое базы данных, создать массив просто:

echo "var myArray = [";

Переберите массив здесь и добавьте запятые в отдельные значения.

echo "];";

Ваша переменная myArray будет доступна на стороне клиента. Это должно выглядеть примерно так:

var myArray = [1, 3, 2, 4];

В качестве альтернативы и во избежание лишней запятой из-за конкатенации строк на основе цикла вы можете записать переменную в клиент следующим образом:

echo "var myArray = [];"

... и выполните следующие действия для каждой строки данных:

echo "myArray.push($db_data);"

Это эффективно, хотя и не так чисто, как предыдущий подход. Вы получите код, подобный следующему:

var myArray = [];

myArray.push(3);
myArray.push(5);
myArray.push(1);

alert(myArray); // will display "3, 5, 1"

Приношу свои извинения за то, что не слишком знаком с PHP, но это то, что можно сделать с любым языком на стороне сервера.

0 голосов
/ 07 января 2016

Вот решение, которое правильно обрабатывает одинарные кавычки в данных:

Сначала получить данные базы данных, например, с помощью mysqli_ функций:

$result = mysqli_query($con, $sql);
if (!$result) die(); // error handling comes here
$array = mysqli_fetch_all($result, MYSQLI_ASSOC);

Затем преобразовать его в JSON, экранировать одинарные кавычки и вывести JavaScript:

$output = str_replace("'", "\'", json_encode($array));
echo "var array = '$output';";

Обратите внимание, что json_encode избегает обратной косой черты (как и должно быть), удваивая их. И это нормально, что не экранирует одинарные кавычки, поскольку не может знать контекст, в который мы его поместили. Поэтому, когда мы внедряем его в JavaScript, заключая его в одинарные кавычки, мы также несем ответственность за экранирование котировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...