Разрыв массива базы данных

У меня есть эта строка в базе данных

и я хочу иметь возможность изменять значения в каждом блоке (например, [license_civ_driver,1]) через страницу на веб-сайте. Полную ячейку в базе можно увидеть здесь.

"[[`license_civ_driver`,1],[`license_civ_boat`,0],[`license_civ_pilot`,1],[`license_civ_advpilot`,1],[`license_civ_trucking`,1],[`license_civ_gun`,1],[`license_civ_hunting`,0],[`license_civ_dive`,0],[`license_civ_home`,0],[`license_civ_platinum`,1],[`license_civ_oil`,1],[`license_civ_diamond`,0],[`license_civ_salt`,0],[`license_civ_sand`,0],[`license_civ_iron`,0],[`license_civ_copper`,1],[`license_civ_cement`,0],[`license_civ_rubber`,0],[`license_civ_meth`,0],[`license_civ_cocaine`,0],[`license_civ_heroin`,0],[`license_civ_marijuana`,0],[`license_civ_rebel`,0],[`license_civ_advrebel`,0]]"

(У меня уже настроены все подключения к базе данных, мне просто нужен запрос и код PhP, чтобы сделать то, что я упоминал).

Я также хочу, чтобы каждый блок переводился в текст (например, license_civ_driver будет водительскими правами).

Кроме того, я хочу отображать каждый блок как div и менять цвет фона в зависимости от числа в блоке.

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

Заранее спасибо!

I just need the query and PhP code to do as I mention).-> нет, мы не можем этого сделать. Вы должны написать свой собственный, а затем вернуться обратно, если возникнут какие-либо проблемы.
Anant Kumar Singh 19.10.2018 12:49

SO - это не служба кодирования, она здесь, чтобы помочь, когда ваш код идет не так

treyBake 19.10.2018 12:49
but I have tried everything to my knowledge - но вы не показали ни одной попытки этого
Professor Abronsius 19.10.2018 12:50

@ThisGuyHasTwoThumbs, поэтому я прошу о помощи

Josh Lisher 19.10.2018 12:56

@RamRaider pastebin.com/aUrUj2Jw

Josh Lisher 19.10.2018 13:00

@JoshLisher тогда где твой код в посте?

treyBake 19.10.2018 13:02

@ThisGuyHasTwoThumbs Этого не было в сообщении. Если вы прочтете мой последний комментарий, то увидите мой код.

Josh Lisher 19.10.2018 13:10

@JoshLisher, и поэтому вы оставили нам комментарий - код должен быть в сообщении, а не в комментированной ссылке

treyBake 19.10.2018 13:11

ваш php-код потенциально уязвим для внедрения sql из-за прямого использования данных строки запроса, предоставленных пользователем. несмотря на включение кода PHP и ссылок на снимки экрана, неясно, какое поле в таблице db содержит эти данные, а также неясно, почему данные изначально находятся в таком формате в таблице. Должен быть способ лучше структурировать данные?

Professor Abronsius 19.10.2018 13:24

это столбец, который показывают снимки экрана. название поля - civ_licenses. на данный момент sql-инъекция не является проблемой, плохо разбирается в том, что позже по строке

Josh Lisher 19.10.2018 13:34

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

misorude 19.10.2018 14:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
11
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я заметил в вашем коде, что вы включаете много файлов внутри цикла - некоторые внутри других циклов ... я бы сказал, что это NOT. Также я считаю ошибкой говорить "I'll sort that ( sql injection ) out later", учитывая "...obviously I want to learn so I'd rather be helped.". Было бы лучше внедрить передовой опыт на раннем этапе, сделать это правильно и потом не возвращаться.

Тем не менее, возможно, следующее может быть полезно на основе комментариев в вопросе, а не на глубоком изучении php.


Обновить: После прочтения вашего комментария я добавил наспех написанный код javascript (и внес небольшие изменения в сгенерированный php html) - он не тестировался более простым щелчком мыши, но должен дать механизм, с помощью которого вы можете достичь заявленной цели. Используйте запрос для запуска некоторого кода PHP (та же страница или другой скрипт ...) - проверьте отправленные параметры / данные, создайте подготовленный sql оператор и выполните.

/* some rudimentary styles for demo purposes */
echo "
<style>
    .class_low{padding:1rem;width:100%;background:rgba(255,0,0,0.25);}
    .class_medium{padding:1rem;width:100%;background:rgba(0,0,255,0.25);}
    .class_high{padding:1rem;width:100%;background:rgba(0,255,0,0.25);}
    .unknown{padding:1rem;width:100%;background:yellow}}
</style>
<script>
    const buildparams=function(p){
        if ( p && typeof( p )==='object' ){
            p=Object.keys( p ).map(function( k ){
                return typeof( p[ k ] )=='object' ? buildparams( p[ k ] ) : [ encodeURIComponent( k ), encodeURIComponent( p[ k ] ) ].join('=')
            }).join('&');
        }
        return p;
    };

    const ajax=function(url,params,callback){
        let xhr=new XMLHttpRequest();
        xhr.onload=function(){
            if ( this.status==200 && this.readyState==4 )callback.call( this, this.response )
        };
        xhr.onerror=function(e){
            alert(e)
        };
        xhr.open( 'POST', url, true );
        xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        xhr.setRequestHeader('X-Requested-With','XMLHttpRequest');
        xhr.send( buildparams( params ) );
    };

    const evtcallback=function(r){
        alert(r);
    };

    const evtbindclicks=function(div){
        div.addEventListener( 'click', evtclickhandler, false );
    };

    const evtclickhandler=function(e){
        let url=document.location.href;
        let params = { licence:this.innerHTML, value:this.dataset.value };

        ajax.call( this, url, params, evtcallback );
    };

    document.addEventListener('DOMContentLoaded',function(){
        Array.prototype.slice.call( document.querySelectorAll('.class_low, .class_medium, .class_high, .unknown') ).forEach( evtbindclicks );
    },false );

</script>";

/* a lookup object to choose correct style based upon integer value */
$matrix=array(
    0   =>  'class_low',
    1   =>  'class_medium',
    2   =>  'class_high'
);

/* fudge around with the database column data. It would be so much easier if the data were originally json in the db!  */
function makejson( $colval, $arr ){
    $colval=str_replace( array( '"', '`','_' ),array('',"#",' ' ), $colval );
    return json_decode( str_replace( $arr,'', str_replace( '#', '"', $colval ) ) );
}


/* words to replace in data */
$arrchrs=array('civ','license');

/* source data - ie: column data from db */
$colval = "[[`license_civ_driver`,1],[`license_civ_boat`,2],[`license_civ_pilot`,15],[`license_civ_advpilot`,0],[`license_civ_trucking`,1],[`license_civ_gun`,1],[`license_civ_hunting`,0],[`license_civ_dive`,0],[`license_civ_home`,0],[`license_civ_platinum`,1],[`license_civ_oil`,1],[`license_civ_diamond`,0],[`license_civ_salt`,0],[`license_civ_sand`,0],[`license_civ_iron`,0],[`license_civ_copper`,1],[`license_civ_cement`,0],[`license_civ_rubber`,0],[`license_civ_meth`,0],[`license_civ_cocaine`,0],[`license_civ_heroin`,0],[`license_civ_marijuana`,0],[`license_civ_rebel`,0],[`license_civ_advrebel`,0]]";

/* attempt to make the above usable */
$json=makejson( $colval, $arrchrs );




/* process the data, create a new div per item and assign class using matrix */
foreach( $json as $arr ){
    $class = isset( $matrix[ $arr[1] ] ) ? $matrix[ $arr[1] ] : 'unknown';
    $name = $arr[0];

    printf( '<div class = "%s" data-value = "%d">%s Licence</div>', $class, $arr[1], ucwords( $name ) );
}

Это даст что-то вроде этого: example output

Спасибо! Вы знаете, как я могу сделать так, чтобы когда я нажимал на одно из тех полей, в которых указано имя лицензии, это изменяло значение в базе данных? поэтому [license_civ_driver,1], когда я нажимаю на водительские права, оно меняется на [license_civ_driver,0]

Josh Lisher 19.10.2018 15:30

установите обработчики событий click для каждого из этих созданных элементов DIV с помощью javascript (ajax) - отправьте (ajax) запрос на некоторый внутренний скрипт php с помощью POST и используйте обратный вызов для обновления DOM для клиента, если это необходимо.

Professor Abronsius 19.10.2018 20:17

Не буду лгать, возможно, вы говорите на другом языке. Какой бит я изменяю в этом запросе?

Josh Lisher 19.10.2018 22:15

Я возился, пытаясь понять, что должно происходить - собрать пасту, которая может помочь pastebin.com/dvJdEur6. Я настоятельно рекомендую лучшее хранилище данных, чем это, хотя в базе данных, но это только мое мнение. удачи

Professor Abronsius 20.10.2018 10:40

Как только я нажимаю лицензию, которую хочу изменить с помощью этого ссылка, он устанавливает ячейку БД на этот ссылка, в котором отсутствует "[с начала и]" в конце @RamRaider

Josh Lisher 25.10.2018 13:23

Я не знаю, что вы имеете в виду ... Я сегодня по большей части занят другим делом, но вы должны быть в состоянии решить любые нерешенные вопросы, учитывая объем уже предложенной помощи ?! '-)

Professor Abronsius 25.10.2018 15:06

Я ценю помощь, и я пытался решить эту проблему, но не могу заставить ее работать должным образом. Когда jquery обновляет БД, он должен выглядеть как "[[license_civ_driver,1]]", но он просто обновляет БД как [[license_civ_driver,1]], что приводит к некорректному чтению данных в игре.

Josh Lisher 25.10.2018 15:29

Можете ли вы повторить оператор sql и позволить мне его увидеть - возможно, добавьте запись pastebin, но НЕ только снимок экрана

Professor Abronsius 25.10.2018 15:50

С предоставленным вами кодом повторение оператора sql не отображается.

Josh Lisher 25.10.2018 16:13

вам нужно проверить консоль

Professor Abronsius 25.10.2018 16:21

Не знаю, откуда взялась дата [25-Oct-2018 14:22:04 UTC], но если вы полностью скопируете фактический оператор SQL и выполните его в своем клиенте / графическом интерфейсе mysql, он будет работать правильно? Вы знаете, что обычно обратная кавычка используется для окружения таблиц, столбцов, функций и т.д. в mysql и на самом деле не должна быть частью данных в целом ??

Professor Abronsius 25.10.2018 16:29

Я буду использовать это в будущем, но я заставил его работать так, как я хотел, используя это как мой запрос joshlisher.phy.sx/ss/images/Code_2018-10-25_16-00-36.png

Josh Lisher 25.10.2018 17:01

Другие вопросы по теме