PHP Строгие стандарты: только переменные должны передаваться по ссылке в .lib - PullRequest
1 голос
/ 21 марта 2020

Я новичок в PHP, как мне нужно изменить строковые данные? просмотрел много тем, но не смог это исправить, недостаточно знаний

PHP Строгие стандарты: только переменные должны передаваться по ссылке в /var/www/html/lib/event.lib on line 309

    function event_conf() {
    global $session_user,$session;
    $event_artikul_ids = get_hash(event_area_list(array('area_id' => $session_user['area_id']),'','artikul_id'),'artikul_id','artikul_id');
    if (!$event_artikul_ids) return '';
    $event_artikul_ids = get_hash(event_artikul_list(array('id' => $event_artikul_ids),sql_pholder(" AND ((kind = 0) OR (kind = ?)) AND !(flags & ?)",$session_user['kind'], EVENT_FLAG_NO_NOTIFY),'id'),'id','id');
    if (!$event_artikul_ids) return '';
//Line 309
    $event = reset(event_list(array('artikul_id' => $event_artikul_ids), ' AND point_id > 0'));
    if (!$event) return '';
    if (event_track_user_list(array('user_id' => $session_user['id'],'event_id' => $event['artikul_id']), sql_pholder(' AND flags & ?', EVENT_TRACK_USERS_FLAG_HIDE))) return '';
    $event_artikul = event_artikul_get($event['artikul_id']);
    $event_point = event_point_get($event['point_id']);
    $event_point_tasks = make_hash(event_point_task_list(array('point_id' => $event['point_id']),' ORDER BY id'));
    if (!$event_point_tasks) return '';
    $event_point_task_user_hash = get_hash(event_point_task_user_list(array('artikul_id' => $event['artikul_id'], 'user_id' => $session_user['id'])),'task_id','value');
    $event_point_task_value_hash = get_hash(event_point_task_user_list(array('artikul_id' => $event['artikul_id']),' GROUP BY 1','task_id,SUM(value) as value'),'task_id','value');

    $params = array();

PHP Строгие стандарты: только переменные должны передаваться по ссылке в /var/www/html/tpl/rating.tpl on line 155

foreach ($rating_stat as $stat_type => $data_list) {
                    //Line 155
                    echo html_rating_div_str(array_slice($data_list, 0, 10), $users_data, " ID=\"$stat_type" . "_all\" style=\"$style_display\"");
                    $style_display = "display: none;"; // Only first div will be visible
                    $data_kind_list = make_hash($data_list, 'kind', true);

Строгие стандарты: только переменные должны передаваться по ссылке в /var/www/html/user.php on line 87

            if ($mode == 'personage') {
                $group = htmlspecialchars(strval($_REQUEST['group']));
 //Line 87 
                if (!$user_backpack_groups[$group]) $group = reset(array_keys($user_backpack_groups));
                $mode_url .= '&group='.$group;

Пожалуйста, помогите, подскажите как исправить эти ошибки. PHP 5.4.45

1 Ответ

1 голос
/ 21 марта 2020

Эта ошибка возникает из-за того, что некоторые функции не только возвращают значения, но также (пытаются) изменять переданные параметры (эти параметры необходимо передавать по ссылке, потому что в противном случае их значение будет скопировано, и не будет никакого эффекта вне области действия функции).

Например, reset() возвращает первый элемент, но также изменяет внутренний указатель массива (текущий элемент). Если вы передаете массив, не назначенный какой-либо переменной (прямой результат вызова функции), указатель не может быть установлен, поскольку этот массив во внешней области больше не существует. Чтобы исправить строку 309, вам нужно разделить команду на присвоение переменной, а затем передать ее функции сброса:

$event_list = event_list(array('artikul_id' => $event_artikul_ids), ' AND point_id > 0');
$event = reset($event_list);

Та же ошибка в строке 87 (требуется if с фигурными скобками).

Проблема в строке 155 вызвана функцией html_rating_div_str(). По некоторым причинам он также требует ссылки - его определение может выглядеть так:

function html_rating_div_str(&$array, $users_data, $string) {...}

... с & перед одной из переменных. Указанный параметр должен быть сначала изменен на переменную, а затем передан этой функции.

...