выборка данных из базы данных mysql с использованием php, отображение их в форме WYSIWYG для редактирования

#php #html #mysql #twitter-bootstrap

#php #HTML #mysql #twitter-bootstrap

Вопрос:

Я работаю над проектом cms, который имеет отношение к bootstrap форме WYSIWYG для вставки и извлечения из базы данных. Код вставки работает должным образом, и код извлечения также работает хорошо, но не работает, когда я хочу отредактировать статью. Когда я нажимаю на ссылку редактирования, которая является <a href='index.php?page=editamp;id=".$row['id']."'><span data-placement='top' data-toggle='tooltip' title='Edit'><button class='btn btn-primary btn-xs' data-title='Edit' ><span class='glyphicon glyphicon-pencil'></span></button><span></a> , она отсылает меня к моей странице редактирования. На моем edit.php страница, на которой у меня есть этот код для выбора из базы данных, которая работает хорошо

 <?php
include("dbconnect.php");

if(isset($_GET['id']))

$id = strip_tags($_GET['id']);
$sql = "SELECT * FROM berita WHERE id=$id" ;
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($result))  
{
    $image= $row['gambar'];
    $title = $row['judul'];
    $description = ( $row['konten']);
    $time = $row['tanggal'];
}
?>
  

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

 <?php
include("dbconnect.php");


if(isset($_GET['id']))    
    $id = strip_tags($_GET['id']);

$sql = "SELECT * FROM berita WHERE id=$id";
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($result))      
{
    $image= $row['gambar'];
    $title = $row['judul'];
    $description = ( $row['konten']);
    $time = $row['tanggal'];
}
?>
<link href="plugins/WYSIWYG/editor.css" type="text/css" rel="stylesheet"/>
<script src="plugins/WYSIWYG/editor.js"></script>

<script type="text/javascript">
    $(document).ready(function () {
        $("#txtEditor").Editor();
    });
</script>

<form name="my_form" action="action.php" method="POST"  enctype="multipart/form-data">
    <div class="form-group">
        <label for="exampleInputEmail1">Date</label>
        <input type="text" class="form-control" id="time" name="time"  value="<?php echo date('d-m-Y'); ?>" disabled>
            <small id="emailHelp" class="form-text text-muted"></small>
    </div>
    <div class="form-group">
        <label>Article Title</label>
        <input type="text" class="form-control" id="title" name="title" value="<?php echo $title; ?>" placeholder="title" required />
    </div>
    <div class="form-group">
        <label >select categories</label>
        <select class="form-control" id="cat" name="cat">
            <option value="World">World</option>
            <option value="Sport">Sport</option>
            <option value="Politics">Politics</option>
            <option value="Business">Business</option>
            <option value="Technology">Technology</option>
            <option value="Entertainment">Entertainment</option>
            <option value="Fashion">Fashion</option>
            <option value="Gist">Gist</option>    </select>
    </div>

    <div class="form-group">
        <label>Write Article </label>
        <textarea class="form-control" id="txtEditor" name="txtEditor"><?php echo  htmlspecialchars($description) ;?></textarea>
    </div>
    <div class="form-group">
        <label for="exampleInputFile">upload image</label>
        <input type="file" accept="image/*" name="myimage" id="myimage" class="form-control-file" id="exampleInputFile" aria-describedby="fileHelp">
            <small id="fileHelp" class="form-text text-muted"></small>

    </div>

    <button onclick=" $('#txtEditor').val($('.Editor-editor').html());" type="Publish" id="Publish" name="Publish" class="btn btn-primary">Publish</button>
</form>
  

Пожалуйста, любая помощь?

Комментарии:

1. SQL-инъекции не выполняются с тегами, поэтому strip_tags не помогает. Вы должны использовать параметризованные запросы. Есть ли ошибки консоли при попытке вывода в WYSIWYG?

2. какой плагин wysiwyg вы используете?

3. Есть ли у вас jQuery также в тегах <script>? $(document).ready() требуется jQuery. Когда вы открываете инструменты разработчика (загуглите «инструменты разработчика», если вы не уверены), вы получаете какие-либо ошибки в консоли — если у вас нет jQuery, вы получите сообщение, что значение $ не определено.

Ответ №1:

Я нашел это: p Я сделал демонстрацию javascript здесь:https://jsfiddle.net/x14vdkk0/1

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

 $(document).ready(function() {
    $('#txtEditor').Editor();
    $('#txtEditor').Editor('setText', 'My text with <strong>LineControl</strong> :)
  second line !'); // SECOND LINE IN ERROR !
});
  

Вы можете видеть (console.log), что часть second line ошибочна, потому что javascript не распознает это.

введите описание изображения здесь

Решение: избежать возврата каретки

Из базы данных

У вас есть прекрасная функция json_encode , которая защитит вас от всех проблем такого рода и javascriptize вашей переменной.

 $(document).ready(function() {
    $('#txtEditor').Editor();
    $('#txtEditor').Editor('setText', <?php echo json_encode($description); ?>); 
});
  

Я не забыл кавычки вокруг функции php. Почему? Потому что
json_encode функция добавит цитату к вашему тексту. Если вы выполните
json_encode('toto') выводом будет "toto" ; Если вы выполните
json_encode([key' => 'toto']) вывод будет {"key":"toto"}

Вот и все 🙂

Другое решение:

Для текстовой области используйте htmlspecialchars($description)

 <textarea id="txtEditor">
  My text with:
  amp;<strongamp;>LineControl !amp;</strongamp;>
</textarea> 
  

и:

 $(document).ready(function() {
    $el = '#txtEditor';
    $($el).Editor();
    $($el).Editor('setText', $($el).val());
});
  

Комментарии:

1. спасибо, что эта функция json_encode исправила это, но вы пропустили цитату в вашем php, она должна быть $ («#txtEditor»). Editor(«setText», ‘<?php echo json_encode($description) ;?>’);. большие пальцы вверх.

2. ПРИВЕТ 🙂 Гул … странно. json_encode автоматически добавит пропущенные кавычки. Если вы сделаете a, <?php echo json_encode('toto'); ?> результат будет "toto" ; Если вы сделаете a <?php echo json_encode(['key' => 'toto']); ?> , результат будет {"key":"toto"}

Ответ №2:

     $(document).ready(function(){         
        <?php
        if($description){
        ?>
            $('#txtEditor').Editor("setText", "<?php echo addslashes($description);?>");
        <?php
        }
        ?>
    });
  

Ссылка:https://github.com/suyati/line-control/issues/34

Ответ №3:

Это было бы проще, если бы вы указали, какой плагин вы используете для WYSIWYG в bootstrap. Из вашего кода я понял, что это https://github.com/suyati/line-control

В этом случае вам нужно поместить значение с помощью параметра setter, поэтому вам следует переписать код объявления для:

 <script type="text/javascript">
$(document).ready(function () {
    $("#txtEditor").Editor();
    $("#txtEditor").Editor("setText", "<?php echo  htmlspecialchars($description) ;?>");
});
</script>
  

И удалите php echo из вашего текстового поля

Я не понимаю, чего вы пытаетесь достичь с помощью кнопки «Опубликовать», поскольку, похоже, вы хотите заменить ею содержимое в редакторе. Это изменит значение, но оно не будет видно и не отправит форму…

Надеюсь, это поможет

Комментарии:

1. Используйте эту строку вместо htmlspecialchars : — $(‘#txtEditor’). Редактор («setText», «<?php echo addslashes($description);?>»);

2. @Dero3376 исправил код. Вероятно, плагин требует инициализации перед установкой текста

3. или вы можете получить содержимое через ajax и отправить данные ответа в редактор. это асинхронно, и нет необходимости обновлять веб-страницу.

Ответ №4:

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

Ответ №5:

Я сталкиваюсь с этой проблемой с помощью какого-то другого плагина, наконец, я нашел тот, который не создает проблем, вот он:

 <script src="//cdn.ckeditor.com/4.5.11/standard/ckeditor.js"></script>
  

и вот моя часть скрипта для загрузки и сохранения данных в базу данных:
для хранения данных

 $features = htmlentities($_POST['features'],ENT_QUOTES);
  

а для загрузки данных просто echo плагин выполнит декодирование

 <textarea class="form-control" id="features" name="features"><?php echo $data['features']; ?></textarea>