2016-10-20 19 views
5

Tôi đang làm việc trên một dự án cms có liên quan tới mẫu bootstrap WYSIWYG để chèn và truy xuất từ ​​cơ sở dữ liệu. Mã chèn hoạt động đúng và mã truy xuất hoạt động tốt, nhưng không hoạt động khi tôi muốn chỉnh sửa một bài viết. Khi tôi nhấp vào liên kết chỉnh sửa là <a href='index.php?page=edit&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>, nó đề cập đến trang chỉnh sửa của tôi. Trên trang edit.php của tôi, tôi có mã này để chọn từ cơ sở dữ liệu mà là làm việc tốttìm nạp dữ liệu từ cơ sở dữ liệu mysql bằng cách sử dụng php, Hiển thị nó dưới dạng WYSIWYG để chỉnh sửa

<?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']; 
} 
?> 

Khi Tôi xin nhắc lại giá trị vào loại hình thức tương ứng của họ, nó hoạt động tốt chỉ rằng WYSIWYG Bootstrap dựa không tiếng vang bất kỳ giá trị, nhưng nếu tôi thay đổi nó thành textarea bình thường, nó hoạt động tốt. Đây là mã của tôi trên trang 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> 

Bất kỳ trợ giúp nào?

+2

Việc tiêm SQL không được thực hiện bằng các thẻ để 'strip_tags' không giúp ích gì. Bạn nên sử dụng các truy vấn được tham số hóa. Có lỗi giao diện điều khiển khi cố gắng xuất ra WYSIWYG không? – chris85

+0

chúng không phải là lỗi – Dero3376

+0

plugin wysiwyg nào bạn đang sử dụng? –

Trả lời

1

tôi tìm thấy nó: p tôi đã thực hiện một bản demo javascript đây: https://jsfiddle.net/x14vdkk0/1/

Nếu bạn không thể thiết lập giá trị các nguyên nhân gốc rễ là trên nhiều dòng. Trên thực tế, nó, bạn làm điều gì đó như thế này:

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

Bạn có thể thấy (console.log) phần second line là do lỗi vì javascript không nhận ra điều này.

enter image description here

Giải pháp: thoát khỏi tất cả vận chuyển trở lại

Từ cơ sở dữ liệu

Bạn có một chức năng đẹp json_encode rằng sẽ bảo vệ bạn khỏi tất cả các vấn đề của loại này và javascriptize biến của bạn.

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

Tôi din't quên dấu ngoặc kép quanh php function. Tại sao ? Vì chức năng json_encode sẽ thêm dấu trích dẫn văn bản của bạn. Nếu bạn thực hiện kết quả json_encode('toto') sẽ là "toto"; Nếu bạn làm một đầu ra json_encode([key' => 'toto']) sẽ {"key":"toto"}

Đó là tất cả :)

Một giải pháp:

Đối với textarea, sử dụng htmlspecialchars($description)

<textarea id="txtEditor"> 
    My text with: 
    &lt;strong&gt;LineControl !&lt;/strong&gt; 
</textarea> 

và:

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

nhờ chức năng này json_encode sửa chữa nó, nhưng bạn đã bỏ lỡ trích dẫn của bạn trong php của bạn nên $ ("# txtEditor"). Editor ("setText", '') ;. ngón tay cái lên. – Dero3376

+0

HI :) Hum ... lạ. 'json_encode' sẽ tự động thêm dấu ngoặc kép bị bỏ qua. Nếu bạn thực hiện một ' 'đầu ra sẽ là' "toto" '; Nếu bạn thực hiện một ' 'toto']); ?> 'đầu ra sẽ là' {"key": "toto"} ' –

1

Điều này sẽ dễ dàng hơn nếu bạn giới thiệu bạn đang sử dụng plugin nào cho WYSIWYG trong trình khởi động. Từ mã của bạn, I figured it là https://github.com/suyati/line-control

Trong trường hợp này, bạn cần phải đặt giá trị sử dụng một setter, vì vậy bạn nên tái viết mã khai của bạn cho:

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

Và loại bỏ tiếng vang php từ văn bản của bạn

Tôi không hiểu những gì bạn đang cố gắng đạt được bằng nút 'xuất bản', vì dường như bạn muốn thay thế nội dung trong trình chỉnh sửa bằng nó. Nó sẽ thay đổi giá trị, nhưng nó sẽ không được hiển thị và nó sẽ không gửi biểu mẫu ...

Hy vọng nó giúp

+0

cảm ơn rất nhiều nhưng vẫn không khắc phục được sự cố của tôi – Dero3376

+0

Sử dụng dòng này thay vì htmlspecialchars: - $ ('# txtEditor'). Editor ("setText", ""); – Senthil

+0

@ Dero3376 đã sửa mã. Có lẽ plugin yêu cầu khởi tạo trước khi đặt văn bản – Bolovsky

0

thử mô tả vang vọng ra khỏi textarea và kiểm tra xem nó hiển thị bất cứ điều gì. Nếu không thì bạn không nhận được bất kỳ giá trị nào trong biến của bạn.

0

tôi làm đối mặt vấn đề này với một số plugin nào cuối cùng tôi tìm thấy người ta không làm cho vấn đề ở đây là:

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

và đây là một phần của tôi về kịch bản để tải và lưu trữ dữ liệu vào cơ sở dữ liệu: để lưu trữ dữ liệu

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

an d cho dữ liệu tải chỉ echo cắm sẽ làm giải mã

<textarea class="form-control" id="features" name="features"><?php echo $data['features']; ?></textarea> 
Các vấn đề liên quan