2016-03-26 5 views
0

Итак, после того, как я нажму кнопку «Отправить», в моей базе данных с идентификатором пользователя будет создана новая строка, но имя пользователя не будет отправлено в базу данных. В настоящее время моя таблица loginInfo, которую я представляю, имеет два столбца: userID (автоматически сгенерированный и увеличенный), имя пользователя и пароль. Я считаю, что моя ошибка в файле newuser.php. Я не уверен, что с ней делать.Вставка новой записи: Строка создается в базе данных, но значения не отправляются

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

?> 

В моем светлячок под чистой консоли я вижу этот результат, который является значением I entere d в текстовое поле имени

Parameters 
name  
testing 

Source 
name=testing 

документов с сайта: 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);' show? – Barmar

+0

Я только заметил, что я оставил аргумент '$ con'' mysqli_prepare', поэтому попробуйте исправленный синтаксис. – Barmar