如何使用PHP在sqlite3数据库中包含特殊字符(或html内容)>

问题描述 投票:0回答:1

我在使用PHP,sqlite3和HTML时遇到一些问题。

我想要的是HTML模态,它从sqlite3数据库获取其内容(页眉,正文,页脚)。要访问数据库,我使用PHP。然后,用户可以在模式中编辑内容,更新的文本将发送到数据库。

现在这适用于纯文本(例如,“ Hello world”)。但是一旦我包含特殊字符(例如<>&),它就会失败。控制台上没有错误消息,因此我真的不知道要解决什么。我尝试了SQLite3 :: escapeString,但是没有任何改变。

作为一种潜在的改进,我也可以将完整的html正文保存到sqlite3数据库中,而不是仅将innerHTML保存到sqlite3数据库中,然后我可以做一些更好的布局。

我附上了一些代码,希望在下面增加清晰度。为简单起见,我不包括页眉和页脚部分,因为它与正文部分相同。

这是模式的HTML代码:

    <!-- Body content -->
    <div class="modal-body">
      <input id="editBtn" type="button" , class="editBtn", value="edit" onclick="editFunction();" />
      <p id="modal-body-id"></p>
    </div>

这是用于编辑内容的javascript

function editFunction() {
  var editables_body   = document.querySelectorAll('#modal-body-id');

  if (!editables_body[0].isContentEditable) {
    editables_body[0].contentEditable = 'true';
  } else {
    // Disable Editing
    editables_body[0].contentEditable = 'false';
    // Save the data to database
    for (var i = 0; i < editables_body.length; i++) {
      // console.log(editables_body[0].innerHTML)
      sendData(modal_id)
    }
  }

将数据发送到数据库的JavaScript

function sendData(id){
  var body = document.getElementById("modal-body-id").innerHTML;

  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open("POST", "send2db.php");
  xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xmlhttp.send("id="+id+"&header="+header+"&body="+body+"&footer="+footer);
}

从数据库读取数据的JavaScript

function get_body(id) {
  var body = document.getElementById("modal-body-id");
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open("POST", "get_from_db.php");
  xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xmlhttp.send("id="+id+"&type=body");
  xmlhttp.onreadystatechange = function() {
    if (this.readyState === 4 && this.status === 200) {
      // body.innerHTML = this.responseText;
      body.innerHTML = xmlhttp.responseText;
    } else {
      body.innerHTML = "Loading...";
    };
  }
}

最后是发送和读取数据库的PHP脚本

send2db.php

<?php

// Database name
$database_name = "description.db";

// Database Connection
$db = new SQLite3($database_name);


// Get information
$id = $_POST['id'];
$header = SQLite3::escapeString($_POST["header"]);
$body   = SQLite3::escapeString($_POST["body"]);
$footer = SQLite3::escapeString($_POST["footer"]);

// Create Table of file descriptions into Database if not exists
$db->exec("CREATE TABLE IF NOT EXISTS file_desc(id TEXT, header TEXT, body TEXT, footer TEXT)");

$res = $db->query("SELECT * FROM file_desc WHERE id = '$id' ");
$row = $res->fetchArray();

$db->exec("CREATE UNIQUE INDEX IF NOT EXISTS unique_id ON file_desc (id)");
$db->exec("REPLACE INTO file_desc (id, header, body, footer) VALUES('$id', '$header', '$body', '$footer') ");
// $db->exec("REPLACE INTO file_desc (id, '$type') VALUES('$id', '$body') ");

?>

get_from_db.php

<?php

  // Database name
  $database_name = "description.db";

  // Database Connection
  $db = new SQLite3($database_name);

  // Create empty database if none exists
  $db->exec("CREATE TABLE IF NOT EXISTS file_desc(id TEXT, header TEXT, body TEXT, footer TEXT)");

  // Get information
  $id = $_POST['id'];

  // Get information
  $type = $_POST['type'];

  $res = $db->query("SELECT * FROM file_desc WHERE id = '$id' ");


  while ($row = $res->fetchArray()) {
      echo "{$row[$type]} \n";
  }

  // $row = $res->fetchArray();
  // return "{$row['body']}";

?>

非常感谢您的帮助!

我在使用PHP,sqlite3和HTML时遇到了一些问题。我想要的是HTML模态,它可以从sqlite3数据库获取其内容(页眉,正文,页脚)。要访问数据库,我使用PHP。用户...

javascript php html sqlite
1个回答
0
投票

我能够解决问题。我使用encodeURIComponent对要发送的数据包进行编码。我在新的工作版本中附加了上面提到的相同功能。

© www.soinside.com 2019 - 2024. All rights reserved.