Я не могу найти информацию по этому вопросу, которая бы конкретно касалась этой проблемы, и я потратил 2 недели на изучение вопроса.Я постараюсь показать код для поддержки вопроса.Ниже приведен код, который работает.Целью является встроенное редактирование данных таблицы с использованием свойств элемента <td contenteditable="true"
и onBlur.Я могу сделать это, используя mysqli, но не подготовленные операторы PDO.
Этот код работает отлично.Пример от Vincy в Индии, и он работает со всеми моими базами данных, как и ожидалось, отлично.Я, однако, хочу использовать PDO, если это возможно, но мне не удалось все попытки перенести этот процесс в PDO и AJAX вместе.На данный момент я подозреваю, что для PDO строка должна быть закодирована / декодирована с помощью json, чтобы можно было обработать соответствующий запрос на обновление PDO. Я надеюсь, что это поможет кому-то еще.
Таблица HTML в index.php
<tr class="table-row">
<td><?php echo $k+1; ?></td>
<td contenteditable="true"onBlur="saveToDatabase(this,'question','<?php echo $faq[$k]["id"]; ?>')"onClick="showEdit(this);"><?php echo $faq[$k]["question"]; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'answer','<?php echo $faq[$k]["id"]; ?>')"onClick="showEdit(this);"><?php echo $faq[$k]["answer"]; ?></td>
</tr>
AJAX jQuery работает под таблицей HTML.Использование CDN версии 3.3.1 jQuery
<script>
function showEdit(editableObj) {
$(editableObj).css("background","#FFF");
}
function saveToDatabase(editableObj,column,id) {
$(editableObj).css("background","#FFF url(loaderIcon.gif)no-repeat right");
$.ajax({
url: "saveedit.php",
type: "POST",
data:'column='+column+'&editval='+$(editableObj).text+'&id='+id,
success: function(data){
$(editableObj).css("background","#FDFDFD");
}
});
}
</script>
db соединение для mysqli: это прекрасно работает
<?php
class DBController {
private $host = "localhost";
private $user = "root";
private $password = "";
private $database = "crosscon";
private $conn;
function __construct() {
$this->conn = $this->connectDB();
}
function connectDB() {
$conn = mysqli_connect($this->host,$this->user,$this->password,$this->database);
return $conn;
}
function runQuery($query) {
$result = mysqli_query($this->conn,$query);
while($row=mysqli_fetch_assoc($result)) {
$resultset[] = $row;
}
if(!empty($resultset))
return $resultset;
}
function numRows($query) {
$result = mysqli_query($this->conn,$query);
$rowcount = mysqli_num_rows($result);
return $rowcount;
}
function executeUpdate($query) {
$result = mysqli_query($this->conn,$query);
return $result;
}
}
?>
Страница обработки mysqli работает отлично.Обработка php страницы. Ошибок нет.Mysqli работает и обновляет базу данных.AJAX передает строку в запрос на обновление без какой-либо дополнительной обработки с помощью json encode или decode.It просто работает как надо.
<?php
require_once("dbcontroller.php");
$db_handle = new DBController();
$result = $db_handle->executeUpdate("UPDATE blogs set " . POST["column"] . " = '".$_POST["editval"]."' WHERE id=".$_POST["id"]);
?>
page: process.php
<?php
require_once("dbPDO.php");
$column = $_POST['column'];
$editval = $_POST['editval'];
$id = $_POST['id'];
$sql = "UPDATE accounts SET column=?, editval=? WHERE id=?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$column, $editval, $id]);
var_dump($stmt);
?>
Это приводит к ошибке mysql: C: \ wamp64 \ www \ ajax5 \ editAccounts.php: 10: null, поэтому я не передаю никакие значения в process.php.Тот же код прекрасно работает в mysqli, обрабатывая его объект подключения mysli.Тот же язык, так что это логично.Тем не менее, аналогичный код в PDO дает сбой, даже несмотря на то, что таблица базы данных отображается, и в обоих случаях сеть передает 'column
, editvalue
и id
в виде строки.В экземпляре mysqli AJAX отправляется как строка и обрабатывается как строка.Процесс PDO
В экземпляре PDO я подозреваю, что теперь он должен быть отправлен в виде массива json в виде строки, декодированной на странице обработки с помощью функции декодирования json (???), чтобы переменные моглибыть установленным и потребленным запросом на обновление PDO.Скорее всего, я смогу проработать это, но через две недели я бы хотел узнать, возможно ли это вообще.У меня есть шаблон, у меня 90% этой работы, я только что ударил стену в этом проекте.Я очень хочу сделать inline-редактирование, так как я думаю, что пользователям действительно это нравится, и мне нравится безопасность PDO, но если невозможно использовать jQuery и асинхронные события с подготовленными операторами, я должен переосмыслить весь свой подход кмое заявление.1. Верно ли мое предположение о том, что PDO должен использовать массив json, закодированный из кода AJAX на странице отправки?2. Есть ли пример того, как сделать это в коде AJAX, а затем декодировать его на принимающей странице, чтобы он мог быть использован принимающей страницей, а затем строка успеха отправлена обратно на принимающую страницу?Спасибо