2011-11-21 5 views
1

이 페이지를 설정하는 방법에 대한 도움이 필요합니다. 5 개 정도의 데이터 필드 (예 : ID, 이름, 성, 좋아하는 색, 즐겨 찾기 번호)가있는 mysql 테이블이 있다고 가정 해 보겠습니다. 사용자가 테이블을 검색 할 수있는 기능을 제공하여 "검색"페이지를 만듭니다.mysql "검색"페이지 설정

페이지에는 ID, 성 및 이름에 대한 텍스트 입력란이 있습니다. 여기에서 사용자는 검색 할 데이터를 삽입합니다. 내가 헷갈 른 것은 텍스트 필드와 다른 검색 기준을 사용하고 공백으로 남겨진 필드를 무시하는 스크립트를 작성하는 방법입니다. 예를 들어, 사용자가 성 또는 이름 만 입력하면 성/이름이 같은 모든 항목이 표시됩니다. ID 만 삽입하면 (고유 할 것입니다) 해당 사용자의 모든 콘텐츠가 표시됩니다. 성 및 성 모두 입력하면 이름과 성을 가진 항목의 모든 데이터가 나타납니다.

기본 사항이지만이 기능을 처음 사용하는 사람은이 기능을 설정하는 방법에 대한 도움을 주시면 대단히 감사하겠습니다.

코드 업데이트 : '검색'페이지입니다 어떤 언어에서

<?php 
//Connect and select database 

//if user wants to search 
if(isset($_POST['submit'])) 
{ 

$sqlConditions = array(); 

if(isset($_POST['id'])){ 
$id = filter_var($_POST['id'], FILTER_VALIDATE_INT); 
$sqlConditions[] = 'id = ' . $id; 
} else { 
$id = 0; 
} 

if(isset($_POST['firstname'])){ 
$firstName = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING); 
$sqlConditions[] = 'firstname = ' . $firstName; 
} else { 
$firstName = ''; 
} 

if(isset($_POST['lastname'])){ 
$lastName = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING); 
$sqlConditions[] = 'lastname = ' . $lastName; 
} else { 
$lastName = ''; 
} 

$query = 'SELECT * FROM students WHERE ' . join (' AND ', $sqlConditions); 

//print query 
while ($row = $query->fetch_row()) 
{ 
    print "LastName = " . $row[0] . " FirstName = " . $row[1]. 
"Favorite Color = " . $row[2] . " Favorite Number = " . $row[3] . "<br /><br />\n"; 
} 

} 
?> 


<html> 
<body> 
<form method = "POST" action = "<?php echo $_SERVER['PHP_SELF']; ?>"> 
<p>ID:<input type = "id" id="id" name="id" size="20" maxlength="40" /></p> 
<p>First Name:<input type = "firstname" id="firstname" name="firstname" size="20" maxlength="40" /></p> 
<p>Last Name:<input type = "lastname" id="lastname" name="lastname" size="20" maxlength="40" /></p> 
<input type="submit" id="submit" name ="submit" value="Search" /> 

</form> 
</body> 
</html> 

답변

0

다음과 같은 접근하려고 할 수 있습니다 :

1 단계 : 유효성을 검증, POST 데이터를 얻고 미래 SQL 조건을

$sqlConditions = array(); 

if(isset($_POST['Id'])){ 
    $id = filter_var($_POST['Id'], FILTER_VALIDATE_INT); 
    $sqlConditions[] = 'Id = ' . $id; 
} else { 
    $id = 0; 
} 

if(isset($_POST['FirstName'])){ 
    $firstName = filter_var($_POST['FirstName'], FILTER_SANITIZE_STRING); 
    $sqlConditions[] = 'FirstName = ' . $firstName; 
} else { 
    $firstName = ''; 
} 

if(isset($_POST['LastName'])){ 
    $lastName = filter_var($_POST['LastName'], FILTER_SANITIZE_STRING); 
    $sqlConditions[] = 'LastName = ' . $lastName; 
} else { 
    $lastName = ''; 
} 

2 단계 구성 : 쿼리를 작성

$query = 'SELECT * FROM your_table WHERE ' . join (' AND ', $sqlConditions); 

물론 mysql_real_escape_string을 사용하거나 PDO로 현대적인 접근 방식을 사용해야합니다. SQL 주입을 피할 수 있습니까?

+0

이는 위대하다! 이 방법을 시도했지만 (위의 업데이트 된 코드 참조) 결과를 페이지에 인쇄 할 수없는 것 같습니다. 내가 뭘 잘못하고 있니? 감사합니다 :) –

+0

$ 쿼리는 단지 문자열입니다. 쿼리를 실행해야만 결과를 가져올 수 있습니다. 읽으십시오 : http://php.net/PDO –

+0

도와 주셔서 감사합니다. 나는 읽기 시작했고 혼란 스럽긴했지만 다음과 같이 결론을 내 렸습니다. $ result = $ connection-> query ($ query); $ row = $ result-> fetch (PDO :: FETCH_ASSOC); print_r ($ row); ... 이것이 내가 필요한 것입니까? 이것을 시도했지만 빈 페이지로 전달되었습니다. –

1

?

일반적으로 사용자가 어떤 요소를 완료했는지 먼저 알아야합니다. 즉, 비어 있지 않습니다. 웹 페이지에 관해 이야기하는 경우 자바 스크립트를 사용하여 필드가 비어 있는지 확인할 수 있습니다.

그런 다음 쿼리를 실행하고 결과를 얻으려면 PHP로 작성된 필드 조합에 따라 다른 쿼리를 사용해야합니다.

if (lastnameStr!=null) 
{ 
    <?php 
    $result = mysql_query('SELECT lastname FROM tableName); 
    if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
    ?> 
} 
else 
{ 
.... 
} 
} 
2

저는 PHP를 방금 시작한 사람들에게이 글을 쓰고 있습니다. 그들이 PHP 전문가라면 나는 OP에 사과하지만,이 사이트는 모두를위한 것입니다!

  1. connect 할 수있는 간단한 스크립트를 작성하고 인구 테이블/디스플레이 정보를 선택

    그래서, 여기에 내가 당신이 제안하는 것이다.
  2. 어떻게 작동하는지 이해했으면 prepared statements을 사용하는 방법을 배우십시오. 이 두 가지 작동 방식을 이해하면이 SQL injections   *

  3. 같은 것들을에서 당신을 보호 할 것입니다. HTML 양식을 작성하면됩니다 (Sir Google에서 도움을 얻을 수 있음). $ _GET 또는 $ _POST를 사용하여 사용자의 입력에 액세스하고 정보를 얻으십시오. (GET과 POST의 차이점을 이해하지 못한다면, 그것도 살펴보십시오!)

이러한 것을 배울 수 있다면 잘 할 수있을 것입니다. 또한, 알고 너무 당신에게 좋은 작업을 수행하는 방법을 작품 LIKE :

SELECT stuff FROM myTable WHERE someCondition LIKE '%Me%'

* (이 답변에서 한 일을 배운다면 하시기 바랍니다가 본 기억)