2015-05-27 2 views
0

Прежде всего, jEditable работает для меня - я могу ввести значение, нажать Enter и получить вид нового значения в таблице. Однако это значение никогда не вставляется в базу данных. Насколько я понимаю, код JQuery с сайта jEditableОбновление базы данных с помощью jEditable и mysqli

$(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>'; 

(я ушел из ЗЕЬЕСТА, потому что все остальное отображаются правильно)

К сожалению, нет никакого объяснения, почему ДИВ должен иметь идентификатор - это, по-видимому, не то, что представлено в запросе POST.

Я немного искал походы, но я не мог найти ответ на этот вопрос. Это, вероятно, очевидно, но я просто не могу его найти. С тех пор, как я изменил свое первоначальное подготовленное заявление, я больше не получаю ошибок.

Я был бы очень признателен за любую помощь, особенно если вы могли бы объяснить мою ошибку, чтобы я не повторил ее в будущем.


Если есть место в Интернете с фактическим полным (MySQLi) примером того, что save.php файл упоминается в Jeditable документации выглядит как и у вас есть ссылка (я, конечно, не нашел ...), я бы тоже это воспринял.

+0

Во-первых, ** использование подготовленные заявления **! Во-вторых, 'id' должен находиться в' pk' (который обозначает 'первичный ключ'). В-третьих, ваш элемент должен иметь атрибут 'data-pk' set. Forth, удалите этот 'id'. Это недопустимый HTML, так как значения 'id' не могут быть просто числом. –

+0

Ну, моя цель - вернуться к подготовленному заявлению, как только я получу это для работы. И я никогда не понимал, что идентификаторы не могут быть числами, я обычно использую классы для всего, это здорово знать. Во всяком случае, это очень полезная информация, я попробую, спасибо! Но .. где бы я положил 'pk'? Это то, что вы имеете в виду с 'data-pk'? – Rehlyihmah

+0

В HTML5 'id' * can * может быть числом https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute –

ответ

0

Это неверно:

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 и т. Д.

+0

О, да, это опечатка в примере. Фиксация этого сейчас. – Rehlyihmah

0

Поскольку, похоже, нет решения для этого (или, точнее, у меня заканчивается время для этого проекта), я переключился на модалы. Если кто-то натолкнется на это и считает модальность жизнеспособным вариантом, вот что я сделал:

Я использую форму 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(); 
} 

Мои модальности генерируются с помощью таблицы строк, что, вероятно, самый уродливый любой решение когда-либо использовали для чего-нибудь, но это работает ... (Не удается отобразить форму в таблица, тем не менее, потому что таблицы внутри divs внутри таблиц - ужасная идея.)

$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>';} 

Надеюсь, это поможет кому-то. И в случае, если кто-то имеет представление о том, что не так с моей оригинальной идеей, я был бы рад прочитать ответ. Я все еще думаю, что обновления будут намного круче.

Смежные вопросы