Как ссылаться на JSON, используемый с PHP и хранящий surveyjs в mysql

Мой PHP-файл имеет код, похожий на этот

<?php

    $connect = mysqli_connect("localhost","root","","surveytest");
    $query = '';
    $table_data = '';
    $filename2 = "employee_data.js";
    $data2 = file_get_contents($filename2);
    $array2 = json_decode($data2, true);


     foreach($array2 as $row) //Extract the Array Values by using Foreach Loop
              {
               $query .= "INSERT INTO survey(name, gender, designation) 
               VALUES 
               ('".$row["name"]."', 
               '".$row["gender"]."', 
               '".$row["designation"]."'); ";  // Make Multiple Insert Query 

               $table_data .= '
                <tr>
           <td>'.$row["name"].'</td>
           <td>'.$row["gender"].'</td>
           <td>'.$row["designation"].'</td>
          </tr>
               '; //Data for display on Web page
              }
              if(mysqli_multi_query($connect, $query)) //Run Mutliple Insert Query
        {
         echo '<h3>Imported JSON Data</h3><br />';
         echo '
          <table class="table table-bordered">
            <tr>
             <th width="45%">Name</th>
             <th width="10%">Gender</th>
             <th width="45%">Designation</th>
            </tr>
         ';
         echo $table_data;  
         echo '</table>';
              }  
    ?>

Мой файл JavaScript имеет код, похожий на этот

var json =
 {  
  "items": [
    {  
     "name": "Rusydi",  
     "gender": "Male",  
     "designation": "System Architect"  
    },  

    {  
     "name": "Hakim",  
     "gender": "Male",  
     "designation": "Conservation worker"  
    }
 ]
 }

Привет! Я новичок в Javascript и JSON.
Я пытаюсь добавить var JSON в базу данных MySQL.
Теперь я хочу сослаться на этот javascriptfile (var json), но он не работает.

Моя цель состоит в том, чтобы попытаться сохранить эту переменную в MySQL.
Вот почему я стараюсь делать так.

var json = {
    questions: [
        {
            name: "name",
            type: "text",
            title: "Please enter your name:",
            placeHolder: "Jon Snow",
            isRequired: true
        }, {
            name: "birthdate",
            type: "text",
            inputType: "date",
            title: "Your birthdate:",
            isRequired: true
        }, {
            name: "color",
            type: "text",
            inputType: "color",
            title: "Your favorite color:"
        }, {
            name: "email",
            type: "text",
            inputType: "email",
            title: "Your e-mail:",
            placeHolder: "jon.snow@nightwatch.org",
            isRequired: true,
            validators: [
                {
                    type: "email"
                }
            ]
        }
    ]
};

Это полный код. https://surveyjs.io/Examples/Library/?id=questiontype-text&platform=jQuery&theme=default

Survey
    .StylesManager
    .applyTheme("default");

var json = {
    questions: [
        {
            name: "name",
            type: "text",
            title: "Please enter your name:",
            placeHolder: "Jon Snow",
            isRequired: true
        }, {
            name: "birthdate",
            type: "text",
            inputType: "date",
            title: "Your birthdate:",
            isRequired: true
        }, {
            name: "color",
            type: "text",
            inputType: "color",
            title: "Your favorite color:"
        }, {
            name: "email",
            type: "text",
            inputType: "email",
            title: "Your e-mail:",
            placeHolder: "jon.snow@nightwatch.org",
            isRequired: true,
            validators: [
                {
                    type: "email"
                }
            ]
        }
    ]
};

window.survey = new Survey.Model(json);

survey
    .onComplete
    .add(function (result) {
        document
            .querySelector('#surveyResult')
            .innerHTML = "result: " + JSON.stringify(result.data);
    });

$("#surveyElement").Survey({model: survey});

или что мне делать?

3 ответа

Удалите "var json =" из вашего файла и измените расширение на ".json" вместо ".js".

Поскольку ваш файл javascript не содержит допустимой строки JSON, он не может быть декодирован php.

employee_data.json

 {  
  "items": [
    {  
     "name": "Rusydi",  
     "gender": "Male",  
     "designation": "System Architect"  
    },  

    {  
     "name": "Hakim",  
     "gender": "Male",  
     "designation": "Conservation worker"  
    }
  ]
 }

Хорошо, проблема, как я вижу, заключается в следующем:

//employee_data.js
var json =
{

И тогда вы импортируете это

$filename2 = "employee_data.js";
$data2 = file_get_contents($filename2);
$array2 = json_decode($data2, true);

JSON - это не код JavaScript (строго говоря), это способ форматирования или кодирования объектов JavaScript в виде строк. (J ava S Cript O bject Nation). Итак, ваш файл должен начинаться с { а не переменная настройка. Так что вам просто нужно удалить это var json = немного.

Если вы проверите var_dump($array2); это, вероятно, скажет NULL и если вы проверите echo json_last_error_msg() сразу после выполнения json_decode это вероятно скажет что-то вроде Syntax error invalid JSON так далее..

Это можно воспроизвести так:

 var_dump(json_decode('var json={"foo":"bar"}', true)); 
 echo json_last_error_msg();

Выход:

NULL
Syntax error

песочница

Если вы удалите var json = из моего слишком простого примера, вы получите это:

array(1) {
   ["foo"]=> string(3) "bar"
}
No error

Ура!

Во-первых, выделите данные JSO N, которые следует сразу var json = и заканчивается } за которым сразу следует ;,

Затем исправьте строку json, заключив все ключи в двойные кавычки.

Наконец, преобразуйте данные в массив, чтобы вы могли выполнить процесс запроса с помощью questions Подмассивы.

* Примечание, я не рекомендую вам использовать mysqli_multi_query() потому что это нестабильно / небезопасно. Я рекомендую вам использовать подготовленное заявление, чтобы вставить ваши данные. Я воздержусь от объяснения этой задачи, потому что есть много примеров того, как это сделать в Stackru.

Код: ( PHP Demo) ( Regex 1 Demo) ( Regex 2 Demo)

if (preg_match('~^var json = \K{.*?}(?=;)~ms', $js_file_contents, $match)) {  // cut away extra
    $json = preg_replace('~^\s*\K\w+~m', '"\0"', $match[0]);  // quote-wrap the keys
    var_export(json_decode($json, true));  // convert json string to array and display
}

Выход:

array (
  'questions' => 
  array (
    0 => 
    array (
      'name' => 'name',
      'type' => 'text',
      'title' => 'Please enter your name:',
      'placeHolder' => 'Jon Snow',
      'isRequired' => true,
    ),
    1 => 
    array (
      'name' => 'birthdate',
      'type' => 'text',
      'inputType' => 'date',
      'title' => 'Your birthdate:',
      'isRequired' => true,
    ),
    2 => 
    array (
      'name' => 'color',
      'type' => 'text',
      'inputType' => 'color',
      'title' => 'Your favorite color:',
    ),
    3 => 
    array (
      'name' => 'email',
      'type' => 'text',
      'inputType' => 'email',
      'title' => 'Your e-mail:',
      'placeHolder' => 'jon.snow@nightwatch.org',
      'isRequired' => true,
      'validators' => 
      array (
        0 => 
        array (
          'type' => 'email',
        ),
      ),
    ),
  ),
)
Другие вопросы по тегам