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