2016-07-13 4 views
0

Я начинающий программист, и я пытаюсь выяснить, как работают x-редактируемые поля, прежде чем я смогу попытаться реализовать их на веб-сайте. Я видел несколько примеров в Интернете и даже здесь, но найденные решения не сработали для меня. У меня есть файл index.php с тестовой страницей, в которой представлены два поля образца (текст и выпадающий селектор). Мне удалось получить данные из определенной строки таблицы, чтобы они отображались в полях. Вот мой код index.php.X-editable простое обновление базы данных не обновляется

<?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 файл:

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

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

Я до сих пор оберточной мою голову вокруг сценария JS и как она будет использоваться. В строке «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), отображаются просто отлично. Я могу щелкнуть по полю и стать встроенным редактируемым полем. Он будет содержать изменения, которые я делаю, но он не остается таким, когда я перезагружаю страницу и не обновляется в таблице базы данных. Я уверен, что проблема заключается в моем save.php файле:

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

 
?>

версия, что я предусмотрел здесь, где я нахожусь. Я пробовал по крайней мере дюжину разных вещей, а затем удалил их, чтобы повторить попытку. Я знаю, что это не сложно сделать, но я еще не вижу этого, потому что я не полностью понимаю язык программирования и его функции, поэтому я и так понял это. В конце концов, это будет реализовано в более крупном проекте для веб-сайта. Я буду беспокоиться о проблемах безопасности, прежде чем я доберусь до этого, сначала мне нужно выяснить, как это работает в первую очередь.

ответ

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 (Internal Server Error)» –