У меня есть эта строка в базе данных
и я хочу иметь возможность изменять значения в каждом блоке (например, [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 и менять цвет фона в зависимости от числа в блоке.
Я знаю, что это, вероятно, огромный вопрос, но я перепробовал все, что мне было известно, включая использование сайтов, чтобы помочь мне сделать это самому (это моя попытка). Если кто-нибудь может помочь мне в этом, я был бы чрезвычайно признателен. Если кто-то захочет сделать это для меня, я был бы очень признателен за это, но, очевидно, я хочу учиться, поэтому я бы предпочел, чтобы мне помогли.
Заранее спасибо!
SO - это не служба кодирования, она здесь, чтобы помочь, когда ваш код идет не так
but I have tried everything to my knowledge - но вы не показали ни одной попытки этого
@ThisGuyHasTwoThumbs, поэтому я прошу о помощи
@RamRaider pastebin.com/aUrUj2Jw
@JoshLisher тогда где твой код в посте?
@ThisGuyHasTwoThumbs Этого не было в сообщении. Если вы прочтете мой последний комментарий, то увидите мой код.
@JoshLisher, и поэтому вы оставили нам комментарий - код должен быть в сообщении, а не в комментированной ссылке
ваш php-код потенциально уязвим для внедрения sql из-за прямого использования данных строки запроса, предоставленных пользователем. несмотря на включение кода PHP и ссылок на снимки экрана, неясно, какое поле в таблице db содержит эти данные, а также неясно, почему данные изначально находятся в таком формате в таблице. Должен быть способ лучше структурировать данные?
это столбец, который показывают снимки экрана. название поля - civ_licenses. на данный момент sql-инъекция не является проблемой, плохо разбирается в том, что позже по строке
Первое, что вам нужно сделать, это идентифицировать и найти человека, который заполнил данные в базу данных в таком дерьмовом формате для начала, чтобы вы могли влезть в них соответствующим образом :-) ... Но если вы удалите внешний ", а затем замените ` с ", вы должны иметь возможность анализировать его как JSON, что должно немного упростить работу и управление его частями.






Я заметил в вашем коде, что вы включаете много файлов внутри цикла - некоторые внутри других циклов ... я бы сказал, что это 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 ) );
}
Спасибо! Вы знаете, как я могу сделать так, чтобы когда я нажимал на одно из тех полей, в которых указано имя лицензии, это изменяло значение в базе данных? поэтому [license_civ_driver,1], когда я нажимаю на водительские права, оно меняется на [license_civ_driver,0]
установите обработчики событий click для каждого из этих созданных элементов DIV с помощью javascript (ajax) - отправьте (ajax) запрос на некоторый внутренний скрипт php с помощью POST и используйте обратный вызов для обновления DOM для клиента, если это необходимо.
Не буду лгать, возможно, вы говорите на другом языке. Какой бит я изменяю в этом запросе?
Я возился, пытаясь понять, что должно происходить - собрать пасту, которая может помочь pastebin.com/dvJdEur6. Я настоятельно рекомендую лучшее хранилище данных, чем это, хотя в базе данных, но это только мое мнение. удачи
Как только я нажимаю лицензию, которую хочу изменить с помощью этого ссылка, он устанавливает ячейку БД на этот ссылка, в котором отсутствует "[с начала и]" в конце @RamRaider
Я не знаю, что вы имеете в виду ... Я сегодня по большей части занят другим делом, но вы должны быть в состоянии решить любые нерешенные вопросы, учитывая объем уже предложенной помощи ?! '-)
Я ценю помощь, и я пытался решить эту проблему, но не могу заставить ее работать должным образом. Когда jquery обновляет БД, он должен выглядеть как "[[license_civ_driver,1]]", но он просто обновляет БД как [[license_civ_driver,1]], что приводит к некорректному чтению данных в игре.
Можете ли вы повторить оператор sql и позволить мне его увидеть - возможно, добавьте запись pastebin, но НЕ только снимок экрана
С предоставленным вами кодом повторение оператора sql не отображается.
вам нужно проверить консоль
Не знаю, откуда взялась дата [25-Oct-2018 14:22:04 UTC], но если вы полностью скопируете фактический оператор SQL и выполните его в своем клиенте / графическом интерфейсе mysql, он будет работать правильно? Вы знаете, что обычно обратная кавычка используется для окружения таблиц, столбцов, функций и т.д. в mysql и на самом деле не должна быть частью данных в целом ??
Я буду использовать это в будущем, но я заставил его работать так, как я хотел, используя это как мой запрос joshlisher.phy.sx/ss/images/Code_2018-10-25_16-00-36.png
I just need the query and PhP code to do as I mention).-> нет, мы не можем этого сделать. Вы должны написать свой собственный, а затем вернуться обратно, если возникнут какие-либо проблемы.