Измените цвет текста, как он отображается с помощью php

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

Мне было интересно, есть ли способ использования Jquery/Javascript/PHP, когда люди загружают заметку из базы данных, а затем проверяют список слов. Например, «ВЫБРАТЬ», «ОТ», «ГДЕ», «ВНУТРЕННЯЯ», «СОЕДИНИТЬ», и если они совпадают, они задают для них определенный цвет?

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

Эти заметки оформляются следующим образом:

if (isset($_POST['noteid'])) 
{
    $showNoteInfo = "SELECT Note, NoteName FROM Notes WHERE NoteID = " . $_POST['noteid'];
    $stmt = sqlsrv_query($conn, $showNoteInfo);
}

if (isset($_POST['noteid'])) 
{
    if (empty($_POST['noteid'])) 
    {
        $notes = 'No Data';
    }
    if (sqlsrv_has_rows($stmt)) 
    {
        $data = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC);

        echo "<div class='custom-font title-container'>
                <div class='expand-button-container fa fa-expand' onclick='expandWindow()'></div>
                <div id='title-container1'><div class='edit-note fa fa-pencil' onclick='editGeneralNote()'>&nbsp;&nbsp;&nbsp;</div>" . "<div data-toggle='modal' data-target='#editNoteNameModal' class='display-inline'>" . $data['NoteName'] . "</div>" . "&nbsp;<div class='save-note fa fa-thumbs-up' onclick='saveGeneralNote(); submitNoteText();'></div></div>
              </div>";
        echo "<textarea spellcheck='false' readonly id='ta1'>" . $data['Note'] . "</textarea>";
    } 
    else 
    {
        echo "No data found";
    }
}

Итак, как мне раскрасить определенные слова, извлеченные из базы данных, когда они отображаются на экране?

Если бы кто-нибудь мог помочь, я был бы признателен.


person user7409253    schedule 01.06.2017    source источник
comment
preg_replace()   -  person Pyromonk    schedule 01.06.2017
comment
О, это выглядит многообещающе, я проведу небольшое исследование и попытаюсь внедрить его в свой код, так как я все еще новичок в PHP. Спасибо за ответ   -  person user7409253    schedule 01.06.2017


Ответы (2)


Я бы сделал это с помощью preg_replace():

$note = preg_replace('%(SELECT|FROM|WHERE)%m', '<span style="color: green;">$1</span>', $data['Note']);
echo $note;

$1 ссылается на первую группу захвата. Дополнительную информацию о регулярных выражениях в PHP и ссылках на регулярные выражения можно найти здесь.

Как использовать это в вашем сценарии:

if (isset($_POST['noteid'])) 
{
    $showNoteInfo = "SELECT Note, NoteName FROM Notes WHERE NoteID = " . $_POST['noteid'];
    $stmt = sqlsrv_query($conn, $showNoteInfo);
}

if (isset($_POST['noteid'])) 
{
    if (empty($_POST['noteid'])) 
    {
        $notes = 'No Data';
    }
    if (sqlsrv_has_rows($stmt)) 
    {
        $data = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC);

        echo "<div class='custom-font title-container'>
                <div class='expand-button-container fa fa-expand' onclick='expandWindow()'></div>
                <div id='title-container1'><div class='edit-note fa fa-pencil' onclick='editGeneralNote()'>&nbsp;&nbsp;&nbsp;</div>" . "<div data-toggle='modal' data-target='#editNoteNameModal' class='display-inline'>" . $data['NoteName'] . "</div>" . "&nbsp;<div class='save-note fa fa-thumbs-up' onclick='saveGeneralNote(); submitNoteText();'></div></div>
              </div>";
        $note = preg_replace('%(SELECT|FROM|WHERE)%m', '<span style="color: green;">$1</span>', $data['Note']);
        echo "<textarea spellcheck='false' readonly id='ta1'>$note</textarea>";
    } 
    else 
    {
        echo "No data found";
    }
}

person Pyromonk    schedule 01.06.2017
comment
Привет @Pyromonk, теперь он выдает неопределенную ошибку индекса для Note в этой строке preg_replace. Спасибо за ответ кстати - person user7409253; 01.06.2017
comment
@ user7409253, эта строка предназначена для использования внутри блока if(sqlsrv_has_rows($stmt)) с последующим echo "<textarea spellcheck='false' readonly id='ta1'>$note</textarea>";. - person Pyromonk; 01.06.2017
comment
Сейчас в этом блоке :( - person user7409253; 01.06.2017
comment
@user7409253 user7409253, я добавил фрагмент кода, чтобы показать, где я должен разместить код. Я заранее протестировал его на своем сервере, поэтому я предполагаю, что вы сделали что-то не так, копируя его. - person Pyromonk; 01.06.2017
comment
Хм, это странно, я переместил его точно так же, как и ваш, и он все еще говорит неопределенный индекс в этой строке preg_replace. gyazo.com/7fc5e3157b4c7a6e3b728ac890757939 это ошибка PHP Примечание: Неопределенный индекс: Примечание в \\HP3-WINC1-SMB2 .HOSTINGP3.LOCAL\DOMAINSY\230\456230\user\htdocs\sqlNoteContent.php в строке 26 - person user7409253; 01.06.2017
comment
Что произойдет, если вы echo data['Note']? Я взял это прямо из вашего исходного кода, поэтому я предположил, что он был определен ... и только сейчас понял, что результат выводится в textarea. Если вы хотите, чтобы слова были окрашены, вам придется изменить текстовое поле на другой тег. Если вам не нужно, чтобы содержимое было редактируемым, что является совершенно новой проблемой. - person Pyromonk; 01.06.2017
comment
У меня это работает, у меня было два идентичных скрипта, только один использует Примечание. Один использует SQLNote, ваш код делает то, что должен, но результат немного отличается от того, что я ожидал, текст на самом деле не зеленый, а вместо этого просто отображает это gyazo.com/d4b31c2780dde26a2515943de41d5f40 - person user7409253; 01.06.2017
comment
Понятно! Я изменил свою текстовую область на div и включил contenteditable="true", тогда ваша preg_replace сработала, большое спасибо - person user7409253; 01.06.2017
comment
@user7409253, отлично! Я рад, что смог помочь. Прошу прощения, что не ответила раньше, надеюсь, это было не слишком невежливо с моей стороны. - person Pyromonk; 02.06.2017

Старый добрый способ:

//Your keywords to be highlighted
$keyWord = array("SELECT", "FROM", "WHERE");
//The string to stlylish
$str = "Select * From db";

foreach(explode(" ", $str) as $word)
{   
    if (in_array(strtoupper($word), $keyWord)) 
    {
        echo '<span class="color">' . $word . '</span>';
    }
}

Если вы предпочитаете получить результат стильного процесса в виде строки, а не простого echo. Вы можете использовать implode. Это противоположность explode. Вам просто нужно будет сохранить эхо-строку в массиве и взорвать массив после цикла. В результате получится что-то вроде этого:

//Your keywords to be highlighted
$keyWord = array("SELECT", "FROM", "WHERE");
//The string to stlylish
$str = "Select * From db";
$result = array();

foreach(explode(" ", $str) as $word)
{   
    if (in_array(strtoupper($word), $keyWord)) 
    {
        array_push($result, '<span class="color">' . $word . '</span>');
    }
    else {
        array_push($result, $word);
    }
}

$str = implode($result, " ");
echo $str;
person Jean-Charbel VANNIER    schedule 01.06.2017
comment
Возможно, было бы еще веселее с strpos и substr ;) Спасибо за предоставление альтернативы без регулярных выражений. - person Pyromonk; 02.06.2017