2016-07-13 11 views
0

Ich bin ein Anfänger Programmierer und ich versuche herauszufinden, wie die x-editierbaren Felder arbeiten, bevor ich versuchen kann, sie in einer Website zu implementieren. Ich habe ein paar Beispiele im Internet und sogar hier gesehen, aber die Lösungen, die ich gefunden habe, haben nicht für mich funktioniert. Ich habe eine index.php-Datei mit einer Testseite, die zwei Beispielfelder (Text und Dropdown-Selektor) enthält. Ich konnte Daten aus einer bestimmten Tabellenzeile in den Feldern anzeigen. Hier ist mein index.php-Code.X-bearbeitbare einfache Datenbankaktualisierung nicht aktualisiert

<?php 
 
\t $dbCon = mysqli_connect("localhost", "#", "#", "#"); 
 
// Check connection 
 
if (mysqli_connect_errno()) 
 
{ 
 
\t echo "Failed to connect: " . mysqli_connect_error(); 
 
} 
 
\t $sql="SELECT * FROM user WHERE id ='7' "; 
 
\t $records=mysqli_query($dbCon,$sql); 
 
\t $user=mysqli_fetch_assoc($records) 
 
?> 
 
<html lang="en"> 
 
    <head> 
 
    <meta charset="utf-8"> 
 
    <title>X-editable Test Page</title> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
 
    <!-- bootstrap --> 
 
    <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet"> 
 
    <script src="http://code.jquery.com/jquery-2.0.3.min.js"></script> 
 
    <script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script> 
 
    <!-- x-editable (bootstrap version) --> 
 
    <link href="//cdnjs.cloudflare.com/ajax/libs/x-editable/1.4.6/bootstrap-editable/css/bootstrap-editable.css" rel="stylesheet"/> 
 
    <script src="//cdnjs.cloudflare.com/ajax/libs/x-editable/1.4.6/bootstrap-editable/js/bootstrap-editable.min.js"></script> 
 
    <!-- main.js --> 
 
    <script src="main.js"></script> 
 
    </head> 
 
    <body> 
 
    <div class="container"> 
 
     <h1>Sample Editing Page</h1> 
 
     <div> 
 
     <span>Username:</span> 
 
     <a href="#" id="username" data-type="text" data-placement="right" data-url="save.php" data-name="username" data-title="Enter username"><?php echo $user['username'];?> </a> 
 
     </div> 
 
     <div> 
 
     <span>Country:</span> 
 
     <a href="#" id="country" data-type="select" data-placement="right" data-url="save.php" data-name="country" data-title="Select country"><?php echo $user['country'];?></a> 
 
     </div> 
 
    </div> 
 
    </body> 
 
</html>

ich verweisen auf eine connection.php Datei:

<?php 
 
    $dbCon = mysqli_connect("localhost", "#", "#", "#"); 
 

 
    if (mysqli_connect_errno()) { 
 
     echo "Failed to connect: " . mysqli_connect_error(); 
 
    } 
 
?>

ich noch Einwickeln meinen Kopf um die js Skript und wie es verwendet wird. In der Zeile "url:" habe ich auf "save.php" verwiesen, das die Tabellendaten in der Datenbank aktualisieren soll. Hier ist die js Skript, das so ziemlich direkt aus der Beispieldatei von der Website heruntergeladen genommen wird:

$(document).ready(function() { 
 
    //toggle `popup`/`inline` mode 
 
    $.fn.editable.defaults.mode = 'inline'; 
 
\t 
 
    
 
    //make username editable 
 
    $('#username').editable({ 
 
\t \t type: 'text', 
 
\t \t url: 'save.php', 
 
\t \t pk:7 
 
\t \t 
 
    } \t 
 
    ); 
 
    
 
    //make status editable 
 
    $('#country').editable({ 
 
     type: 'select', 
 
     title: 'Select status', 
 
     placement: 'right', 
 
     value: 1, 
 
     source: [ 
 
      {value: 1, text: 'USA'}, 
 
      {value: 2, text: 'Australia'}, 
 
      {value: 3, text: 'Other'} 
 
     ] 
 
     /* 
 
     //uncomment these lines to send data on server 
 
\t \t */ 
 
     ,pk: 7 
 
     ,url: 'save.php' 
 
    }); 
 
});

Alles scheint ganz gut zu funktionieren. Die Daten aus der spezifischen Zeile, die ich anrufe (id = 7), werden gut angezeigt. Ich kann auf das Feld klicken und es wird ein inline editierbares Feld. Es hält die Änderungen, die ich mache, aber es bleibt nicht so, wenn ich die Seite neu lade und sie nicht in der Datenbanktabelle aktualisiert wird. Ich bin mir ziemlich sicher, dass das Problem in meiner save.php Datei liegt:

<?php 
 
include("connection.php"); 
 

 
if(isset($_POST['username'])){ 
 
\t $username=$_POST['username']; 
 
\t $country=$_POST['country']; 
 
} 
 

 
$mysql_query= "UPDATE user SET username=$username WHERE id='7'"; 
 

 
?>

Die Version, die ich zur Verfügung gestellt habe hier ist, wo ich bin. Ich habe mindestens ein Dutzend verschiedene Dinge ausprobiert und dann gelöscht, um es noch einmal zu versuchen. Ich weiß, das ist keine schwierige Sache, ich sehe es noch nicht, weil ich die Programmiersprache und ihre Funktionen nicht vollständig verstehe, weshalb ich das hier durchkomme, um es herauszufinden. Schließlich wird dies in einem größeren Projekt für eine Website umgesetzt werden. Ich werde mich um die Sicherheitsprobleme kümmern, bevor ich dazu komme. Zuerst muss ich herausfinden, ob es funktioniert.

Antwort

0

In Ihrem Code gibt es kein Zitat um $username. Versuchen Sie außerdem, immer prepared statements zu verwenden, wenn Sie vom Benutzer übermittelte Daten verarbeiten.

<?php 
include("connection.php"); 

if(isset($_POST['username'])){ 
    $username=$_POST['username']; 
} 

$stmt = mysqli_prepare($dbCon, "UPDATE user SET username=? WHERE id=?"); 

//'si' stands for String and Integer, respectively for $username and id 7 
mysqli_stmt_bind_param($stmt, 'si', $username, 7); 

mysqli_stmt_execute($stmt); 

?> 
+0

Vielen Dank für die Eingabe. Ich sehe nicht, wo ich Zitate um $ username in meinem Code verpasst habe. Ich habe vorher keine vorbereiteten Aussagen verwendet, daher muss ich etwas darüber erfahren. Auch hier bin ich sehr neu, also bin ich mir noch nicht einmal sicher, was das alles bedeutet. Wie auch immer, ich habe Ihre Vorschläge implementiert, und ich habe einen "internen Serverfehler", wenn ich versuche, das Benutzernamefeld zu aktualisieren. –

+0

Ich nehme an, '$ username' ist eine Zeichenfolge. Sie müssten also Ihre Variable in Anführungszeichen setzen, damit die Datenbank weiß, dass es sich um eine Zeichenfolge handelt. Können Sie die Protokolle überprüfen und mir sagen, was ist der genaue Fehler? :) –

+0

Das einzige, was ich finden kann ist, dass es heißt: "Fehler beim Laden der Ressource: http: // localhost: 8888/edit/save.php der Server antwortete mit einem Status von 500 (Interner Serverfehler)" –

Verwandte Themen