2016-07-13 15 views
0

私は初心者のプログラマーです。私はウェブサイトでそれらを実装しようとする前にx編集可能フィールドの仕組みを理解しようとしています。私はウェブ上のいくつかの例を見てきましたが、ここでも私が見つけたソリューションは私のために働いていません。私は2つのサンプルフィールド(テキストとドロップダウンセレクタ)を表示するテストページを持つindex.phpファイルを持っています。特定のテーブル行のデータをフィールドに表示することができました。ここにindex.phpコードがあります。X編集可能な単純なデータベースの更新が更新されない

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

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

が、私はまだJSスクリプトの周り私の頭をラップしていますし、それがどのように使用されます:

<?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>

私はconnection.phpファイルを参照します。 "url:"行で、データベースのテーブルデータを更新するはずの "save.php"を参照しました。ここではほとんどのウェブサイトからダウンロードしたサンプルファイルから直接取得されjsのスクリプトは、です:

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

すべてがうまく動作するようです。私が呼んでいる特定の行のデータ(id = 7)はうまく表示されています。フィールドをクリックすると、インラインで編集可能なフィールドになります。それは私が行う変更を保持しますが、私はページをリロードし、それがデータベーステーブルで更新されない場合、そのままにはなりません。

<?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'"; 
 

 
?>

私がでてるところ私がここで提供されているバージョンがある:私は、問題は私のsave.phpファイルであることをかなり確信しています。私は少なくとも1ダースのものを試してから、もう一度やり直すためにそれらを削除しました。私はこれが難しいことではないことを知っています。プログラミング言語とその機能を完全に理解していないため、まだ見ていないので、これを理解していきます。最終的に、これはウェブサイト用のより大きなプロジェクトに実装されます。私がそれに着手する前のセキュリティ問題については心配します。まず最初にそれを働かせることを理解する必要があります。

答えて

0

コードには、$usernameの引用符はありません。また、ユーザーが提出したデータを処理する場合は、常にprepared statementsを使用してください。入力用

<?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

感謝。私は自分のコードで$ usernameの周りに引用符を見逃した場所を見ていません。私は準備済みのステートメントを実際に使用していないので、それについて学ぶ必要があります。繰り返しますが、私はこれについて非常に新しいので、私はまだそれが何を意味するのかはまだ分かりません。いずれにせよ、私はあなたの提案を実装し、ユーザー名フィールドを更新しようとすると「内部サーバーエラー」が発生します。 –

+0

私は '$ username'が文字列であると仮定しています。だから、変数を引用符で囲む必要があります。そのため、データベースは文字列であることを認識します。 ログを確認して、正確なエラーを教えてください。 :) –

+0

「リソースをロードできませんでした:http:// localhost:8888/edit/save.phpサーバーが500(内部サーバーエラー)のステータスで応答しました」というメッセージが表示されます。 –

関連する問題