2014-11-04 3 views
0

내 데이터베이스 (mysql)에서 데이터를 가져 와서 웹 사이트에 표시하려면 스크립트를 저장해야합니다.mysql에서 html 입력 데이터 검색

/includes 
    db_connect.php 
    functions.php 
    getdata.php 
    logout.php 
    process_login.php 
    psl-config.php 
    register.inc.php 
/js 
    forms.js 
    sha512.js 
login.php 
protected_page.php 
register.php 
register_success.php 
seach.php 

지금 중요한 파일 다음과 같습니다 :

내가 이미 가지고있는 파일의 struture입니다 PSL-config.php를

<?php 
/** 
* Das sind die Login-Angaben für die Datenbank 
*/ 
define("HOST", "localhost");  // Der Host mit dem du dich verbinden willst. 
define("USER", "sec_user"); // Der Datenbank-Benutzername. 
define("PASSWORD", "eKcGZr59zAa2BEWU"); // Das Datenbank-Passwort. 
define("DATABASE", "secure_login"); // Der Datenbankname. 

define("CAN_REGISTER", "any"); 
define("DEFAULT_ROLE", "member"); 

define("SECURE", FALSE); // NUR FÜR DIE ENTWICKLUNG!!!! 
?> 

db_connect.php을

<?php 
include_once 'psl-config.php'; // Da functions.php nicht included ist 
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE); 
?> 

이것은 내 search.php입니다

<?php 
include_once 'includes/db_connect.php'; 
include_once 'includes/functions.php'; 

sec_session_start(); 
?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Secure Login: Protected Page</title> 
     <link rel="stylesheet" href="styles/main.css" /> 
    </head> 
    <body> 
     <?php if (login_check($mysqli) == true) : ?> 
      <p>Welcome <?php echo htmlentities($_SESSION['username']); ?>!</p> 

      <h3>Search Contacts Details</h3> 
      <p>You may search either by first or last name</p> 
      <form method="post" action="search.php?go" id="searchform"> 
       <input type="text" name="name"> 
       <input type="submit" name="submit" value="Search"> 
      </form> 
     <?php else : ?> 
      <p> 
       <span class="error">You are not authorized to access this page.</span> Please <a href="login.php">login</a>. 
      </p> 
     <?php endif; ?> 
    </body> 
</html> 

내 웹 사이트를 안전하게 검색하기 위해 텍스트 입력란을 어디에 배치해야합니까? 내 코드를 사용해도 안전합니까?

이 내 SQL 명령입니다 : 나는 검색 웹 사이트의 결과를 인쇄 할 SELECT * FROM produckte WHERE beschreibung = $search LIMIT 100;

.

+0

그것은만큼 완벽하게 안전합니다. mysqli를 사용하기 때문에 준비된 문장을 사용할 수있다. [prepared statements mysqli] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) 또는 PHP를 사용하여 스트레이트 업 SQL에서 사용하기 전에 문자열을 지울 수 있습니다. 그러나 첫 번째 옵션이 더 좋습니다. – arma

답변

1

나는이 같은 것을 사용하는 것이 좋습니다 것입니다 : 당신은 준비된 문을

을 가지고 %가 쿼리에 당신이 검색하는 경우처럼 검색 키워드를 가지고 모든 것을 반환합니다 경우

SELECT * FROM produckte WHERE beschreibung LIKE '%".$search."%'; 이 쿼리의 안전을 : "hello" 데이터베이스에 "1hello", "hello2382"가 있습니다. %를 사용하지 않고 쿼리를 사용하면 결과는 "1hello"및 "hello2382"가됩니다. More Info

이 트릭해야한다 : 당신의 search.php에서

$query = "SELECT * FROM produckte WHERE beschreibung LIKE '%".$search."%';"; 

if ($result = $mysqli->query($query)) { 

    /* fetch associative array */ 
    while ($row = $result->fetch_assoc()) { 
     printf ("%s (%s)\n", $row["Name"], $row["column name"]); 
     //You could echo a div in here with the data you want to be displayed 
    } 

    /* free result set */ 
    $result->free(); 
} 

이 작업을 수행해야합니다

//your form submit button name 
if(isset($_POST['submit'])){ 
    //your form textfield name 
    $search = $_POST['name']; 

    //execute the while query here. 

} 
+0

이 부분은 이해했지만 어떻게하면 $ 검색을받을 수 있습니까? 텍스트 상자의 데이터로 나에게 보여줄 수 있습니까? –

+0

@FabianHarmsen 내 게시물을 편집하겠습니다. –

+0

감사합니다. –

0

먼저 검색 '에 입력 검색의 이름을 변경 ':

<input type="text" name="search"> 

'POST'방법을 사용하여 양식을 동일한 .php 파일로 보내고 있습니다. 이것은 $ _POST 변수에 액세스하여 페이지에 전송 된 정보에 액세스 할 수 있음을 의미합니다.

<?php ?> 태그 내부에, 당신의 search.php 파일의 맨 위에이 추가 :

if (isset($_POST['search']) { 
    echo $_POST['search']; 
} 

이 당신에게 <form>의 데이터되는 게시물을 처리하는 방법의 아이디어를 줄 것이다.

양식 처리와 관련하여 PHP doc을 살펴보십시오.

mysqli을 사용하면 사용자 입력을 데이터베이스 쿼리에 전달하는 안전한 방법 인 prepared-statements을 사용할 수 있습니다.

준비가 문에서도 함께 DB를 조회하는 방법에 대한 예 : 제대로 데이터베이스에 대한 정보를 준비

if (isset($_POST['search']) { 
    $stmt = $mysqli->prepare("SELECT * FROM produckte WHERE beschreibung = ? LIMIT 100;") 
    $stmt->bind_param("s", $_POST['search']); 
    $stmt->execute(); 

    $result = $stmt->get_result(); 
    while ($row = $result->fetch_array(MYSQLI_NUM)) 
    { 
    .....handle your data here.... 
    } 
    $stmt->close(); 
}