Встроенное редактирование с использованием Mysql PDO, jQuery, AJAX и PHP 7.0 - PullRequest
0 голосов
/ 11 марта 2019

Я не могу найти информацию по этому вопросу, которая бы конкретно касалась этой проблемы, и я потратил 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, а затем декодировать его на принимающей странице, чтобы он мог быть использован принимающей страницей, а затем строка успеха отправлена ​​обратно на принимающую страницу?Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...