2016-03-26 25 views
0

サブミット・ボタンをクリックすると、データベースにuserIDを持つ新しい行が作成されますが、ユーザー名はデータベースに送信されません。現在私のloginInfoテーブルには、userID(自動生成および増分)、ユーザ名、およびパスワードの3つのカラムがあります。私は自分のエラーがnewuser.phpファイルにあると信じています。私はその中で何をすべきか分かりません。私のFirefoxで新しいレコードの挿入:行はデータベースに作成されますが、値はサブミットされません

<td><a href="#" class="myeditable editable editable-click editable-empty" id="new_username" data-type="text" data-name="name" data-original-title="Enter username">Empty</a></td> 
スクリプトの下に同じファイルでも

$.fn.editable.defaults.mode = 'inline'; 

//init editables 
$('.myeditable').editable({ 
    url: 'post.php' //this url will not be used for creating new user, it is only for update 
}); 

//make username required 
$('#new_username').editable('option', 'validate', function(v) { 
    if(!v) return 'Required field name!'; 
}); 

//automatically show next editable 
$('.myeditable').on('save.newuser', function(){ 
    var that = this; 
    setTimeout(function() { 
     $(that).closest('tr').next().find('.myeditable').editable('show'); 
    }, 200); 
}); 

$('#save-btn').click(function() { 
    $('.myeditable').editable('submit', { 
     url: 'newuser.php', 
     ajaxOptions: { 
      type: 'POST', 
      dataType: 'json' //assuming json response 
     }, 
     success: function(data, config) { 
      if(data && data.id) { //record created, response like {"id": 2} 
       //set pk 
       $(this).editable('option', 'pk', data.id); 
       //remove unsaved class 
       $(this).removeClass('editable-unsaved'); 
       //show messages 
       var msg = 'New user created! Now editables submit individually.'; 
       $('#msg').addClass('alert-success').removeClass('alert-error').html(msg).show(); 
       $('#save-btn').hide(); 
       $(this).off('save.newuser'); 
      } else if(data && data.errors){ 
       //server-side validation error, response like {"errors": {"username": "username already exist"} } 
       config.error.call(this, data.errors); 
      } 
     }, 
     error: function(errors) { 
      var msg = ''; 
      if(errors && errors.responseText) { //ajax error, errors = xhr object 
       msg = errors.responseText; 
      } else { //validation error (client-side or server-side) 
       $.each(errors, function(k, v) { msg += k+": "+v+"<br>"; }); 
      } 
      $('#msg').removeClass('alert-success').addClass('alert-error').html(msg).show(); 
     } 
    }); 
}); 

Post.php

include('connect.php'); 
sleep(1); 
$pk = $_post['pk']; 
$un=$_POST['name']; 
$value1 = $_POST['value']; 

if(!empty($value1)) { 
    $sql =("UPDATE loginInfo 
      SET $un=$value1 
      WHERE userID='$pk'"); 
    mysqli_query($con, $sql); 

    //here, for debug reason we just return dump of $_POST, you will see result in browser console 
    print_r($_POST); 
} 
else { 
    header('HTTP/1.0 400 Bad Request', true, 400); 
    echo "This field is required!"; 
} 

newuser.php

$pk = $_post['pk']; 
$un=$_POST['name']; 
$value1 = $_POST['value']; 

try { 

    $sql =("INSERT INTO loginInfo(username,password) 
      VALUES ('a','b')"); 
    mysqli_query($con, $sql); 


} catch (Exception $e) { 
    print($e->__toString()); 
} 

?> 

私が見るネットコンソールの下でこの出力は値である

Parameters 
name  
testing 

Source 
name=testing 

ドキュメントのWebサイトから名前のテキストボックスにD:それは文字列なのでhttps://vitalets.github.io/x-editable/docs.html#newrecord

答えて

0

あなたは、ユーザ名の前後に引用符を必要としています。

$sql =("UPDATE loginInfo 
     SET $un='$value1' 
     WHERE userID='$pk'"); 

SQLインジェクションを防ぐために、準備されたクエリを使用した方がよいでしょう。カラム名をパラメータ化することはできませんので

$stmt = mysqli_prepare($con, 
         "UPDATE loginInfo 
         SET $un = ? 
         WHERE userID = ?"); 
mysqli_bind_param($stmt, "ss", $value1, $pk); 
mysqli_execute($stmt); 

、クエリで使用する前に$unを検証する必要があります。また、ユーザーが更新できる唯一の列であれば、POSTパラメーターを使用するのではなく、列名をハードコードすることもできます。

+0

私はコードを変更しましたが、まだ動作しません。 post.phpとnewuser.phpのページが正しく設定されているとは思いません。ユーザーが多くの列を更新できるので、列名をハードコードできません。 – noname

+0

クエリにエラーが発生していますか? 'echo mysqli_error($ con);'は何を表示しますか? – Barmar

+0

私はmysqli_prepareに '$ con'引数を付けなかったことに気付いたので、修正された構文を試してみてください。 – Barmar

関連する問題