Прежде всего, у меня работает jEditable — я могу ввести значение, нажать клавишу ввода и наслаждаться новым значением в таблице. Однако это значение никогда не вставляется в базу данных.
Насколько я понимаю, код jQuery с сайта jEditable
$(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."'");
следует обновить базу данных, но ничего не происходит. Когда я смотрю на функцию сетевого журнала Firefox, я вижу, что не было отправлено никакого идентификатора (я не знаю, откуда этот идентификатор должен исходить в первую очередь, в примере ничего нет), но значение там. Однако, похоже, что ответа от сервера нет.
Может быть, сама таблица является проблемой:
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 должен быть идентификатор — это, очевидно, не то, что отправлено в запросе POST.
Я немного погуглил, но не смог найти ответ на этот вопрос. Это, вероятно, очевидно, но я просто не могу его найти. С тех пор, как я изменил свое первоначальное подготовленное утверждение на это, я больше не получаю ошибок.
Я был бы очень благодарен за любую помощь, особенно если бы вы могли объяснить мне мою ошибку, чтобы я не повторил ее в будущем.
Если в Интернете есть какое-либо место с актуальным (mysqli) примером того, как выглядит файл save.php, упомянутый в документации Jeditable, и у вас есть ссылка (я, конечно, не нашел ее …), я ‘ Я тоже это принял.
Это неверно:
print '<td><div class="edit" data-pk="'.ID.'">'.$row["column"].'</div></td>';
^^
Нет никаких $
, так ID
является неопределенной константой. PHP, вероятно, попытается быть вежливым и предположить, что вы имели в виду 'ID'
isntead (строка, содержащая буквы I
а также D
), что означает, что ВСЕ ваши строки будут отображаться в клиенте как data-pk=ID
, и не data-pk=1
, data-pk=2
, так далее…
Поскольку, похоже, нет решения этой проблемы (или, точнее, у меня не хватает времени для этого проекта), я переключился на модалы. Если кто-то сталкивается с этим и считает модалы приемлемым вариантом, вот что я сделал:
Я использую форму GET и страницу обновления, которая обновляет разные таблицы в зависимости от того, с какой страницы поступает запрос — вот для чего нужен «ref».
update.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>';}
Надеюсь, это кому-нибудь поможет. И если у кого-то есть идея, что не так с моей первоначальной идеей, я буду рад прочитать ответ. Я все еще думаю, что на месте обновления будет намного круче.