Как ссылаться на JSON, используемый с PHP и хранящий surveyjs в mysql - PullRequest
0 голосов
/ 24 октября 2018

Мой 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 ]

0 голосов
/ 24 октября 2018

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

//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 N otation).Таким образом, ваш файл должен начинаться с {, а не с переменной.Так что вам просто нужно удалить этот 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

Cheers!

0 голосов
/ 24 октября 2018

Сначала выделите данные json, которые следуют сразу за var json = и заканчиваются }, за которым сразу следует ;.

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

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

* Примечание. Я НЕ РЕКОМЕНДУЮ использовать mysqli_multi_query(), посколькуэто нестабильно / небезопасно.Я рекомендую вам использовать подготовленное заявление для вставки ваших данных.Я воздержусь от объяснения этой задачи, потому что существует множество примеров того, как это сделать в StackOverflow.

Код: ( 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',
        ),
      ),
    ),
  ),
)
0 голосов
/ 24 октября 2018

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

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

employee_data.json

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

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