2016-07-13 3 views
0

저는 초보 프로그래머로서 웹 사이트에서 구현하기 전에 x 편집 가능 필드가 어떻게 작동하는지 파악하려고합니다. 나는 웹 주위에 몇 가지 예제를 보았고 여기서도 발견했다. 그러나 내가 찾은 해결책은 나를 위해 일하지 않았다. 두 개의 샘플 필드 (텍스트 및 드롭 다운 선택기)를 제공하는 테스트 페이지가있는 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)가 올바르게 표시됩니다. 필드를 클릭하면 인라인 편집 가능 필드가됩니다. 그것은 내가 만든 변경 사항을 유지할 것이지만, 페이지를 다시로드하고 데이터베이스 테이블에서 업데이트되지 않을 때 그렇게 유지되지 않습니다. 나는 문제가 내 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'"; 
 

 
?>

내가 여기에 제공 한 버전입니다. 나는 적어도 12 가지의 다른 것들을 시도해 본 다음 다시 시도하려고 삭제했다. 저는 이것이 어려운 일이 아니라는 것을 알고 있습니다. 프로그래밍 언어와 그 기능을 완전히 이해하지 못하기 때문에 아직 보지 않을 것입니다. 그래서 이것을 통해 알아낼 수 있습니다. 결국 이것은 웹 사이트를위한 더 큰 프로젝트에서 구현 될 것입니다. 먼저 보안 문제에 대해 걱정할 것입니다. 우선 먼저 보안 문제를 해결해야합니다.

답변

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 (내부 서버 오류)의 상태로 응답 함"입니다. –