使用Mysql PDO,jQuery,AJAX和PHP 7.0进行内联编辑

时间:2019-03-10 21:26:09

标签: php jquery ajax pdo

我找不到有关此问题的任何信息来专门解决该问题, 而且我花了两个星期研究这个问题。我会尝试证明 支持该问题的代码。 下面是有效的代码。 目标是使用<td contenteditable="true"内联编辑表数据 和onBlur元素属性。 我可以使用mysqli来完成这项工作,但不能使用PDO准备好的语句。

此代码运行完美。这个例子来自印度的Vincy,  如预期的那样,可以完美地使用我的所有数据库。但是我想要  在可能的情况下使用PDO,但是我在所有尝试中都失败了  将此过程一起转换为PDO和AJAX。我对此怀疑  指出使用PDO时,字符串必须经过json编码/解码为  工作,以便可以处理正确的PDO更新查询。我希望  这样也可以帮助别人。

index.php上的HTML表

<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>

HTML表下面的AJAX jQuery函数。使用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>

用于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编码或解码进行任何其他处理。它只是按应有的方式工作。

<?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中的类似代码也会失败,并且在两种情况下,网络都将'columneditvalueid作为字符串传递。在mysqli实例中,AJAX作为字符串发送并作为字符串处理。 PDO过程

在PDO实例中,我怀疑它现在必须作为json数组作为字符串发送,使用json解码功能(???)在处理页面上进行解码,以便可以通过以下方式设置和使用变量: PDO更新查询。我很可能可以解决此问题,但是,在两周后不久,我想知道是否有可能。我有模板,我已经完成了90%的工作,我刚刚在这个项目中碰壁。我非常想进行内联编辑,因为我认为用户非常喜欢它, 而且我喜欢PDO的安全性,但是如果无法使用jQuery和 具有准备好的语句的异步事件,我必须重新考虑我对应用程序的整个方法。 1.我的假设是否正确,即PDO必须使用发送页面上AJAX代码中编码的json数组? 2.是否有一个示例,说明如何在AJAX代码中执行此操作,然后在接收页面上对其进行解码,以便接收页面可以使用它,然后将成功字符串发送回接收页面? 谢谢

0 个答案:

没有答案