(заполнить раскрывающийся список в контактной форме 7, получая эту ошибку - Предупреждение: array_keys () ожидает, что параметр 1 будет массивом, значение NULL указано в - PullRequest
0 голосов
/ 25 января 2019

Хорошо, с чего начать, я постараюсь объяснить как можно больше.

Я использую WordPress с контактной формой 7 и пытаюсь заполнить 3 выпадающих элемента в контактной форме, я нашел несколькоКод, который я смог использовать без проблем, но проблема в том, что он получал информацию из файла Excel, файл теперь слишком большой и больше не будет работать на моем веб-сайте, поэтому я хотел бы получить информацию отмоя база данных сейчас.

Я сделал таблицу в моей базе данных «vehicle_information» с 3 столбцами «vehicle_type», «vehicle_make», vehicle_model »

У меня есть код в файле functions.php и кодв моем нижнем колонтитуле можно использовать короткие коды cf7.

Код из funtions.php

function ajax_cf7_populate_values() {

//MySQLi information

$db_host     = '***';
$db_username = '***';
$db_password = '***';

$vehicles_makes_models = array();


//connect to mysqli database (Host/Username/Password)
$connection = mysqli_connect($db_host, $db_username, $db_password) or die('Error ' . mysqli_error());

//select MySQLi dabatase table
$vehicles_makes_models = mysqli_select_db($connection, 'vehicle_information') or die('Error ' . mysqli_error());

$sql = mysqli_query($connection, 'SELECT * FROM vehicle_type');

while($row = mysqli_fetch_array($sql)) {
$vehicles_makes_models[$row[0]][$row[1]][] = $row[2];   }


}


    // setup the initial array that will be returned to the the client side script as a JSON object.

$return_array = array(
        'vehicles' => array_keys($vehicles_makes_models),
        'makes' => array(),
        'models' => array(),
        'current_vehicle' => false,
        'current_make' => false
    );

    // collect the posted values from the submitted form

$vehicle = key_exists('vehicle', $_POST) ? $_POST['vehicle'] : false;
$make = key_exists('make', $_POST) ? $_POST['make'] : false;
$model = key_exists('model', $_POST) ? $_POST['model'] : false;

    // populate the $return_array with the necessary values

if ($vehicle) {
    $return_array['current_vehicle'] = $vehicle;
    $return_array['makes'] = array_keys($vehicles_makes_models[$vehicle]);
    if ($make) {
    $return_array['current_make'] = $make;
    $return_array['models'] = $vehicles_makes_models[$vehicle][$make];
    if ($model) {
            $return_array['current_model'] = $model;
        }
        }
    }

    // encode the $return_array as a JSON object and echo it

    echo json_encode($return_array);
    wp_die();



 // These action hooks are needed to tell WordPress that the cf7_populate_values() function needs to be called
 // if a script is POSTing the action : 'cf7_populate_values'

 add_action( 'wp_ajax_cf7_populate_values', 'ajax_cf7_populate_values' );
 add_action( 'wp_ajax_nopriv_cf7_populate_values', 'ajax_cf7_populate_values' );

Код из моего нижнего колонтитула

<script>
(function($) {

    // create references to the 3 dropdown fields for later use.

    var $vehicles_dd = $('[name="vehicles"]');
    var $makes_dd = $('[name="makes"]');
    var $models_dd = $('[name="models"]');


    // run the populate_fields function, and additionally run it every time a value changes

    populate_fields();
    $('select').change(function() {
        populate_fields();
    });

    function populate_fields() {

        var data = {

            // action needs to match the action hook part after wp_ajax_nopriv_ and wp_ajax_ in the server side script.

            'action' : 'cf7_populate_values', 

            // pass all the currently selected values to the server side script.

            'vehicle' : $vehicles_dd.val(),
            'make' : $makes_dd.val(),
            'model' : $models_dd.val()
        };

        // call the server side script, and on completion, update all dropdown lists with the received values.

        $.post('<?php echo admin_url( 'admin-ajax.php' ) ?>', data, function(response) {
            all_values = response;

            $vehicles_dd.html('').append($('<option>').text(' -- choose vehicle -- '));
            $makes_dd.html('').append($('<option>').text(' -- choose make  -- '));
            $models_dd.html('').append($('<option>').text(' -- choose model -- '));

            $.each(all_values.vehicles, function() {
                $option = $("<option>").text(this).val(this);
                if (all_values.current_vehicle == this) {
                    $option.attr('selected','selected');
                }
                $vehicles_dd.append($option);
            });
            $.each(all_values.makes, function() {
                $option = $("<option>").text(this).val(this);
                if (all_values.current_make == this) {
                    $option.attr('selected','selected');
                }
                $makes_dd.append($option);
            });
            $.each(all_values.models, function() {
                $option = $("<option>").text(this).val(this);
                if (all_values.current_model == this) {
                    $option.attr('selected','selected');
                }
                $models_dd.append($option);
            });
        },'json');
    }

})( jQuery );

Проблема в том, что я все еще учусь, и мне впервые приходится использовать эту функцию.

, и я получаю сообщение об ошибке на своем веб-сайте

Предупреждение: array_keys () ожидает параметр 1 тбыть массивом, ноль указывается в /customers/4/0/0/motobid.co.uk/httpd.www/wp-content/themes/storevilla-child/functions.php в строке 38 {"vehicle": null, "делает ": []," models ": []," current_vehicle ": false," current_make ": false}

любая помощь будет очень полезной.

Точно так же, какскажем, код был предоставлен BDMW.

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