2014-12-05 4 views
0

저는 MySQL 데이터베이스와 PHP를 사용하는 완벽한 초보자입니다레코드 목록에서 단일 레코드가있는 페이지로드. [PHP]

링크를 클릭하여 레코드 목록이있는 페이지에서 단일 레코드를로드하려고합니다.

나는 작업 기록의 목록을 가지고하고 링크를 클릭 할 때이 URL로 페이지에 사용자를 취합니다

/view.php?v=1 (with 1 being the ID of the record I clicked on the menu) 

가 어떻게 관련 기록 (1 '과 함께 하나를로드 할 'ID로) 페이지에? 그것은 단순한 것처럼 보이지만 어디서나 그것을 할 수있는 방법을 찾을 수 없습니다.

분명히 데이터베이스에서 콘텐츠를 가져 오기 위해 SQL 문을 사용해야하지만 무엇을 넣어야합니까? 같은 뭔가 : $_GET

$topic_id = $_GET['v']; 

에 의해

$sql = "SELECT * FROM Topics WHERE TopicID=v"; 
+2

테이블에서 하나의 레코드 값을 얻기 위해 우는 코드를 사용할 수 있습니다. 본질적으로'$ _GET [ 'v']'를 사용하여 쿼리 문자열에서 값을 가져 와서 (사용자 입력 값이므로 암시 적으로 신뢰할 수는 없으므로) 값을 확인하고 SQL 쿼리의 매개 변수로 사용합니다 'mysqli' 또는'PDO'와 같은 것). – David

+0

@David가 말했듯이이 데이터는'$ _GET' "수퍼 글로벌"을 봐야합니다. 안전을 위해 값을 정수로 변환 할 가치가 있습니다. 페이지에서 값을 가져 오는 방법은 [여기 예제] (https://github.com/halfer/php-tutorial-project/blob/rebase4/view-post.php)를 참조하십시오. – halfer

답변

1

사용 URL's 변수는 당신은 변수 투기가 아니라 해당 쿼리에 매개 변수를 전달할 수 있습니다 :

$query = $PDO->prepare(SELECT * FROM Topics WHERE TopicID=:topic_id); 
$query->bindValue(':topic_id', $topic_id); 

이 문서는 더 여러분을 안내 할 것입니다. 이제

// Establish your database connection, replace credentials with yours:  
$dbc = new PDO('mysql:host=' . MYSQL_HOST . ';dbname=' . DB_NAME, MYSQL_USER, MYSQL_PW, array(PDO::ATTR_PERSISTENT => true)); 

// Get the id from the URL: 
$id = filter_input(INPUT_GET, 'v'); 

// Set up the sql query: 
$q = "SELECT * FROM Topics WHERE TopicID = $id"; 

// Execute the query and get the result: 
$result = $dbc->query($q); 

// Fetch the only row for your result: 
$row = $result->fetch(); 

, 당신은 당신이 레코드 ($ 행)을 원하는대로 수행 할 수 있습니다 http://php.net/manual/en/ref.pdo-mysql.php

+4

초보 개발자에게 SQL 주입 코드를 제공하는 것이 최선의 방법이 아닌가? – David

+0

답변을 수정했습니다. 나를 조종 해줘서 고마워. –

+1

두 번째 줄은 노출 된 쿼리이므로 변수에 보관하고 데이터베이스 호출로 전달해야합니다. 어쩌면 코드 란 무엇이며 의사 코드 란 무엇입니까? (이제 혼란 스럽기 때문에 맨 처음 쿼리를 제거 할 수 있습니다. – halfer

-2

그래서 이것은 당신의 PHP 스크립트 것입니다. 그것은 배열입니다. 예를 들어, 'date'컬럼이나 무엇을 가지고 싶다면 $ row [ 'date']가됩니다. 주제 테이블의 구조가 어떻게되어 있는지 모르겠지만 그곳에있는 열이 있다면 $ row [ '']이고 값을 얻을 수있는 곳입니다.

또한 유효성 확인 지원을 제공하지 않았습니다. 따라서 입력 내용을 직접 확인해야합니다. 이 코드는 기본이며 $ _GET 변수의 데이터가 유효하다고 가정합니다.

/view.php?v=fuckyou는 작동하지 않으며 오류가 발생합니다.

+0

''은 $ _GET 변수의 데이터가 유효하다고 가정합니다. "- 이것은 SQL injection이라고합니다. 일반적으로 SQL 주입 코드를 작성하지 않는 것이 가장 좋습니다. – David

+1

이것은 가족 친화적 인 사이트는 아니지만 공격적이고 악의적 인 쿼리 문자열은 필요하지 않습니다. 그것을 고치시겠습니까? – halfer

-2

당신이이 PHP와 다른 입문 튜토리얼을 많이 적용해야

URL :- www.abc.com/view.php?v=1 // Your url  

$id = $_GET['v']; // get these value  

$conn = mysql_connect("localhost", "mysql_user", "mysql_password"); // connect the database with your credentials  

$sql = mysql_query("SELECT * FROM `Topics` where TopicID = $id limit 1 "); // sql query  

while ($row = mysql_fetch_assoc($sql)) {  
    echo $row["TopicID"];  
    echo $row["TopicName"];  
}  
+1

이 코드는 더 이상 사용되지 않는 MySQL 라이브러리를 사용하며 SQL 주입 취약점이 있습니다. – David

관련 문제