2016-08-21 4 views
1

Ich habe eine Datenbank namens "Gäste" mit zwei Spalten: Sitz und Name. Ich möchte diese Datenbank in einer PHP-Seite zeigen, wo der Benutzer auf den Wert "Name" doppelklicken und es bearbeiten kann, die Datenbank aktualisieren, wenn er irgendwo anders klickt (es verwischt).Editierbare Datenbanktabelle mit PHP + Ajax + jQuery

Die PHP:

<?php 
include "connect.php"; 
$result = mysqli_query($con, "SELECT * FROM guests"); 
echo "<table>"; 
while($row = mysqli_fetch_assoc($result)){ 

echo "<tr><td contenteditable='true' onClick='showEdit(this);' onBlur='saveToDatabase(this,'Name','".$row['seat']."')'>" . $row['Name'] . "</td> 

<td>" . $row['seat'] . "</td></tr>"; 
} 
echo "</table>"; 
?> 

Die jQuery:

<script> 
function saveToDatabase(editableObj,what,where) { 
    $(editableObj).css("background","#FFF url(loaderIcon.gif) no-repeat right"); 
    $.ajax({ 
     url: "handle.php", 
     type: "POST", 
     data:'what='+what+'&newvalue='+editableObj.innerHTML+'&where='+where, 
     success: function(data){ 
      $(editableObj).css("background","#FDFDFD"); 
     } 
    }); 
} 
</script> 

Die Server-Seite (handle.php):

<?php 
include "connect.php"; 
$what = $_POST["what"]; 
$newvalue = $_POST["newvalue"]; 
$where = $_POST["where"]; 
$sql = "UPDATE guests SET $what='$newvalue' WHERE seat='$where'"; 
if ($con->query($sql) === TRUE) { 
    header("Location: success.php"); 
} else { 
    header("Location: error.php"); 
} 
?> 

Derzeit, nachdem der Benutzer bearbeiten die "name" Wert und klicken Sie irgendwo anders, nichts passiert, und die Datenbank wird nicht aktualisiert.

+0

Was ist '$ was' in Ihrer Update-Abfrage? –

+0

Haben Sie überprüft, wie die $ sql-Anweisung aussieht? Gibt es ein Fehlerprotokoll? – RGriffiths

+0

Zain Farooq - "was" ist welche Spalte zu ändern (in diesem Fall "Name"), "wo" ist in welcher Zeile. In diesem Test gibt es nur Name und Sitz, aber ich plane, andere Spalten wie E-Mail, Telefon, etc. hinzuzufügen. Und das ist, wo $ nützlich ist. Das System muss wissen, was der Benutzer gerade bearbeitet. – Jonhz

Antwort

1

Sie müssen onBlur nicht verwenden, wenn Sie einen Trigger mit einer onClick Funktion ausführen. Also, dieser Code sollte Ihre Verbindung ist in Ordnung gegeben:

<?php 
include "connect.php"; 
$result = mysqli_query($con, "SELECT * FROM guests"); 
echo "<table>"; 
while($row = mysqli_fetch_assoc($result)){ 

echo "<tr><td contenteditable='true' onClick='saveToDatabase(this,'Name','".$row['seat']."')'>" . $row['Name'] . "</td> 

<td>" . $row['seat'] . "</td></tr>"; 
} 
echo "</table>"; 
?> 

<script> 
function saveToDatabase(editableObj,what,where) { 
    $(editableObj).css("background","#FFF url(loaderIcon.gif) no-repeat right"); 
    $.ajax({ 
     url: "handle.php", 
     type: "POST", 
     data:'what='+what+'&newvalue=&where='+where, 
     success: function(data){ 
      $(editableObj).css("background","#FDFDFD"); 
     } 
    }); 
} 
</script> 

<?php 
//handle.php 
include "connect.php"; 
$what = $_POST["what"]; 
$newvalue = $_POST["newvalue"]; 
$where = $_POST["where"]; 
$sql = "UPDATE guests SET $what='$newvalue' WHERE seat='$where'"; 
if ($con->query($sql)) { 
    header("Location: success.php"); 
} else { 
    header("Location: error.php"); 
} 
?>