【问题标题】:Updating database with jEditable & mysqli使用 jEditable 和 mysqli 更新数据库
【发布时间】:2015-05-27 15:07:23
【问题描述】:

首先,jEditable 对我有用——我可以输入一个值,按 Enter 键,然后就可以看到表格中的新值了。但是,该值永远不会插入到数据库中。 据我了解,来自 jEditable 网站的 jQuery 代码

$(document).ready(function() {
     $('.edit').editable('http://www.example.com/save.php');
 });

我已更改为链接到我的 update.php 脚本

error_reporting(E_ALL ^ E_NOTICE);
session_start();

$servername = "localhost";
$username = "root";
$password = "";
$database = "database";

$conn = new mysqli($servername, $username, $password, $database);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$value = $_POST['value'];
$id = $_POST['id'];

echo $value;

$updateTest=$conn->query("UPDATE table SET column='".$value."' WHERE ID='".$id."'");

应该更新数据库,但没有任何反应。查看火狐的网络日志功能,可以看到并没有提交ID(我一开始不知道这个ID应该是从哪里来的,例子里什么都没有),但是值是那里。但是,服务器似乎没有响应。

也许表本身就是问题:

while($row = $results->fetch_assoc()) {
$ID = $row["ID"];

print '<tr>';
print '<td><div class="edit" data-pk="'.$ID.'">'.$row["column"].'</div></td>';
print '</tr>';

(我省略了 SELECT 语句,因为其他所有内容都显示正确)

遗憾的是,没有解释为什么 div 应该有一个 id - 这显然不是 POST 请求中提交的内容。

我用谷歌搜索了一下,但我找不到答案。这可能很明显,但我就是找不到。自从我将原来的准备好的语句更改为此之后,我也不再出现错误。

如果您能向我解释我的错误,我将非常感谢您的帮助,这样我以后就不再重复了。


如果互联网上有任何地方有 Jeditable 文档中提到的 save.php 文件的实际完整 (mysqli) 示例,并且您有链接(我当然没有找到它...) ,我也愿意。

【问题讨论】:

  • 首先,使用准备好的语句!其次,id 应该在pk(代表primary key)中。第三,您的元素需要设置属性data-pk。第四,删除id。这是无效的 HTML,因为 id 值不能只是一个数字。
  • 好吧,我的目标是在我让它工作后返回到准备好的语句。而且我从来没有意识到 ids 不能是数字,我通常对所有东西都使用类,这很高兴知道。无论如何,这是一些非常有用的信息,我会试试的,谢谢!但是..我会把pk放在哪里? data-pk 就是这个意思吗?
  • 在 HTML5 中,id 可以是一个数字 html.spec.whatwg.org/multipage/dom.html#the-id-attribute
  • @KaloyanDoichinov 对不起。我想我应该在说话之前读过。该死,我现在有很多坏代码!
  • 从技术上讲,您是正确的,但根据 4.01 规范 :)

标签: php jquery mysqli jeditable


【解决方案1】:

这是不正确的:

print '<td><div class="edit" data-pk="'.ID.'">'.$row["column"].'</div></td>';
                                        ^^

没有$,所以ID 是一个未定义的常量。 PHP 可能会尽量保持礼貌并假设您的意思是 'ID' istead(包含字母 ID 的字符串),这意味着您的所有行都将在客户端显示为 data-pk=ID,并且不是data-pk=1data-pk=2 等...

【讨论】:

  • 哦,是的,这是示例中的错字。现在解决这个问题。
【解决方案2】:

由于似乎没有解决方案(或者,更准确地说,我已经没有时间完成这个项目了),所以我切换到了模态。如果有人遇到这种情况并认为模态是一个可行的选择,这就是我所做的:

我正在使用一个 GET 表单和一个更新页面,它根据请求来自哪个页面来更新不同的表 - 这就是“ref”的用途。

更新.php:

$updateID=$_GET['id']; 
$updateRef=$_GET['ref'];

$col1=$_GET['col1'];
$col2=$_GET['col2'];

if($updateRef == "refpage"){
    $updateTable=$conn->query("UPDATE my_table SET col1='".$col1."', col2='".$col2."' WHERE ID='".$updateID."'");
    header("Location: refpage.php");
    die();
}

我的模态是使用表格行生成的,这可能是任何人用于任何事情的最丑陋的解决方案,但它确实有效......(但无法在表格中显示表格,因为表格中的 div 中的表格是一个糟糕的主意。)

$results = $conn->query("SELECT col1, col2 ID FROM my_table");
while($row = $results->fetch_assoc()) {
    $ID = $row["ID"];
    $modalID = $modalID + 1;

    print '<tr>';
    print '<td>'.$row["col1"].'</td>';
    print '<td>'.$row["col2"].'</td>';
    print '<td><a href="#" data-toggle="modal" data-target="#editModal'.$modalID.'"><span class="glyphicon glyphicon-pencil" style="float: right !important"></span></a></td>';
    print '</tr>';

    echo '<div class="modal fade" id="editModal'.$modalID.'" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
    <div class="modal-content">
    <div class="modal-header">
        <h2 class="modal-title">Delete</h2>
    </div>
    <div class="modal-body">
        <form action="update.php" method="get">
        <div class="row">
            <div class="col-xs-6">
            col1:
            </div>
            <div class="col-xs-6">
            <input type="text" value="'.$row["col1"].'" id="col1" name="col1" />
            </div>
        </div>

        <div class="row">
            <div class="col-xs-6">
            col2:
            </div>
            <div class="col-xs-6">
            <input type="text" value="'.$row["col2"].'" id="col2" name="col2" />
            </div>
        </div>
        <input type="hidden" id="ref" name="ref" value="refpage" />
        <input type="hidden" name="id" value="'.$ID.'" />
        <input class="btn btn-md" type="submit" id="update" name="update" value="Update" />
    </form>

    </div>          
    <div class="modal-footer">
    <button type="button" class="btn btn-md" data-dismiss="modal">Cancel</button>
    </div>
    </div>
    </div>
    </div>';}

希望这对某人有所帮助。如果有人知道我最初的想法有什么问题,我很乐意阅读答案。我仍然认为就地更新会更酷。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 2013-05-04
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    相关资源
    最近更新 更多