2016-05-15 5 views
1

У меня сейчас немного сложное время с передачей некоторых переменных PHP в Javascript для диаграммы пончиков. Я уже давно возился с этим, и еще не смог понять, что я проверил здесь, а также многочисленные поисковые запросы Google, но пока не смог найти ответ. Вот что я пытаюсь выполнить:Цитата PHP Переменная внутри PHP Переменная для Javascript Диаграмма пончика

Я пытаюсь передать данные из MySQL в диаграмму Javascript Donut для веб-рефереров на определенную страницу PHP. Синтаксис для диаграммы Javascript как таковой:

<script> 
Morris.Donut({ 
element: 'css div', 
data: 
[ 
{ label: '<?php echo($graph["referrer"]); ?>', value: '<?php echo($graph["chart"]); ?>' }, 
] 
}); 
</script> 

$ графа [ «ссылающаяся»] переменная содержит имя ссылающейся, такие как «Google.com», и $ графа [ «Count»] переменная содержит соответствующий счетчик записей для имени реферера как число, например «5».

Линия Javascript, начинающаяся с «{label», обозначает одну часть диаграммы пончика. Первоначально данные, полученные из MySQL, выполняются с помощью fetchArray(), я пытаюсь создать каждую строку «{label», используя инструкцию PHP foreach (например, foreach ($ Array as $ graph)), так что граф может генерироваться динамически на основе количества имен реферера, возвращаемых функцией fetchArray(). Я пробовал почти все, что я могу придумать, чтобы сделать эту работу - хранение всей строки Javascript в PHP, а затем повторение ее в Javascript и т. Д. Но это всегда вызывает внутреннюю ошибку с PHP.

Я уверен, что ответ у меня под носом, спасибо всем за ваше время.

+0

_ "Но это всегда вызывает внутреннюю ошибку с PHP" _, что такое ошибка? В какой строке кода это указывает? –

+0

Он просто не удается выполнить и показывает ошибку 500 –

+0

Ошибка 500 - это способ веб-серверов: «У меня серьезная проблема, но я не хочу говорить об этом публично». Посмотрите на журнал ошибок сервера, появится четкое сообщение о том, что не так. –

ответ

2

Использование json_encode() для создания чистого объекта данных:

в PHP:

$data = array(array('label' => $graph["referrer"]), 'value' => $graph["chart"])); 

в вашем JavaScript;

data: <?php echo json_encode($data); ?> 
+0

Спасибо за ваш ответ, но этот код оставляет меня только с «Google.com 2», тогда как я пытаюсь сгенерировать всю строку Javascript с «{» до «}». –

+0

«Google.com 2» определенно не является результатом 'json_encode()' генерирует. Вы смотрите на исходный исходный код? Вы эхом отдаете его в нужном месте? –

+0

Ops my bad. Хорошо, поэтому я думаю, что мы куда-нибудь пойдем. Вот мой код для цикла:

1

Правильный способ передачи массивов PHP переменных в JS скриптов с использованием json. Вот что вам нужно сделать:

PHP части:

$sql = 'select * from ....'; // your query 
// execute query 
// as I don't know what mysql api do you use, 
// it's kinda pseudo-code 
// but the main idea is to get all rows 
// you need in one array `$graphs` 

$graphs = array(); 
while ($graph = fetch_array()) { 
    $graphs[] = array(
     'label' => $graph["referrer"], 
     'value' => $graph["chart"], 
    ); 
} 

Js части:

<script> 
Morris.Donut({ 
    element: 'css div', 
    data: <?php echo json_encode($graphs); ?> 
}); 
</script> 
+0

Спасибо за ответ. Поэтому использование переменных PHP в Javascript было чем-то, что я уже смог выяснить. Я хочу, чтобы PHP генерировал целую строку, начинающуюся с "{label:" и заканчивая на "}," для каждого экземпляра имени referrer в массиве. Для цикла я использую foreach ($ arrayofreferrers как $ graph), поэтому мне действительно нужно выяснить, как поместить весь код Javascript с кодом PHP внутри эха PHP. Затем цикл foreach запускает echo X количество ссылок, упомянутых в $ arrayofreferrers. –

+0

Хотя вам решать, но я настоятельно рекомендую вам делать то, что я ответил. Кстати, если у вас будет 'label' значение с' '', что вы получите? –

+0

Я пробую ваш код, но ничего не возвращает. Мой массив из запроса MySQL: Array ([0] => Array ([referrer] => Facebook [count] => 2) [1] => Array ([referrer] => Direct [count] => 2) [2] => Array ([referrer] => Microsoft [count] => 1) [3] => Array ([referrer] => Ask.com [count] => 1) [4] => Array ([ referrer] => Google [count] => 1)) Так что, возможно, это не работает, потому что я использую многомерный массив? Извините, я не понимаю ваш вопрос о значении метки. –

1

Вы вообще не зацикливание на $graph переменных. Он имеет только один:

<script> 
    Morris.Donut({ 
    element: 'css div', 
    data: [{ 
     label: '<?php echo($graph["referrer"]); ?>', 
     value: '<?php echo($graph["chart"]); ?>' 
    },] 
    }); 
</script> 

Приведенный выше код отобразит только одну переменную. Я считаю, вы должны иметь какой-то цикл здесь:

<script> 
    Morris.Donut({ 
    element: 'css div', 
    data: [ 
<?php foreach (/* some loop */) { ?> 
     { 
     label: '<?php echo($graph["referrer"]); ?>', 
     value: '<?php echo($graph["chart"]); ?>' 
     }, 
<?php } ?> 
    ] 
    }); 
</script> 

Или лучший способ заключается в использовании массива и json_encode() для вывода JSON.

+0

Извините, мой код foreach был вокруг тегов

Смежные вопросы