2012-07-22 2 views
0

나는 당신이 늑대의 이름을 클릭하면 있도록 설정 약간의 테스트 프로젝트, 그것은 나는 그들이 클릭에 관한 정보 중 늑대를 개인화하는 데 사용할 페이지에 소요 있습니다. 이 페이지는 wolf.php라고합니다. 나는 URL을 늑대의 ID, 즉 www.testsite.com/wolf.php?id=1을 할당 통과 변수에게 $ _GET 방법을 사용하여 시도하고 있지만 페이지는 내가 오류가 발생하지 않더라도 아무 것도 표시되지 않습니다.없음 오류하지만 페이지가 통과 변수를 빈 상태로

여기 (또는 ID가 있었다 무엇이든) www.testsite.com/wolf.php?id=1 나에게 걸리는이 링크를 클릭 홈 페이지 (home.php)

<?php 
$username = $_SESSION['username']; 
$result = @mysql_query("SELECT * FROM wolves WHERE owner = '$username'"); 
while($wolf = mysql_fetch_array($result)) 
{ 
echo "<a href= wolf.php?id=$wolf[id]>$wolf[name]</a>"; 
}; 
?> 

입니다. 나는이 가지고 wolf.php에 : 내가 잘못하지만이 작동하지 않을 경우

<?php 
$id = $_GET['id']; 
$result = @mysql_query("SELECT name FROM wolves WHERE id = '$id'") or die("Error: no 
such wolf exists"); 
echo .$result['name']. 
; 
?> 

을 잘 모르겠어요. 늑대의 이드에 관한 정보는 나타나지 않습니다. 도움에 미리 감사드립니다. 당신이 당신의 코드에서 치명적인 구문 오류를 볼 수 있도록 개발 error_reporting(E_ALL); ini_set('display_errors', 1);으로 오류보고에

+1

- 연관 배열

$result = mysql_fetch_assoc($result); echo $result['name']; 

변형 2 (값은 필드 명 등에 avialable이다) injection] (http://php.net/manual/en/security.database.sql-injection.php)을 참조하십시오. 데이터베이스 라이브러리 의 적절한 방법을 사용하여 쿼리를 만들기 전에 데이터를 이스케이프 처리해야합니다. – Lix

답변

3

켭니다. 또한 mysql_*() 호출에서 @ 오류 제거 연산자를 제거하는 것이 좋습니다.

당신은 마지막 줄에 구문 문제가있다. 예기치 않은 . 연결 연산자 :

// Wrong: 
// Parse error: syntax error, unexpected '.' 
echo .$result['name']. 
; 

// Should be: 
echo $result['name']; 

다음으로, 당신은 당신의 쿼리에서 행을 페치하지 않은 :이 스크립트는 SQL 주입에 활짝 열려 있음을

// mysql_query() won't error if there are no rows found. Instead you have to check mysql_num_rows() 
$result = mysql_query("SELECT name FROM wolves WHERE id = '$id'") or die("Query error: " . mysql_error()); 
// Zero rows found, echo error message. 
if (mysql_num_rows($result) < 1) { 
    echo "No such wolf."; 
} 
else { 
    // Row found, fetch and display. 
    $row = mysql_fetch_assoc($result); 
    echo $row['name']; 
} 

참고. 쿼리 입력 변수에 대해 최소한 mysql_real_escape_string()으로 전화하십시오. 그들은 수동으로 탈출 변수를 통해 더 큰 보안을 위해 준비된 명령문을 지원하기로

$id = mysql_real_escape_string($_GET['id']); 

궁극적으로, 기존의 mysql_*() 기능을 대신 PDO 또는 MySQLi를 사용하는 방법에 대해 생각합니다. mysql_*() 기능은 더 이상 사용되지 않을 예정입니다.

+0

구문 문제가 해결되었지만 여전히 빈 페이지가 나타납니다. SQL 인젝션에 대해 경고 해 주셔서 감사합니다. – Sunden

+0

@Sunden 위의 내용을 참조하면 결과 집합에서 행을 가져 오지 못했습니다. –

+0

감사합니다. – Sunden

0
<?php 
$username = $_SESSION['username']; 
$result = @mysql_query("SELECT * FROM wolves WHERE owner = '$username'"); 

처음에는 session_start();을 잊어 버렸습니다. $username은 ""이고 sql은 아마도 0 개의 레코드를 반환 할 것입니다. 이 배열처럼 두 번째 조각에서

0

당신은 $result을 처리 할 수 ​​없습니다; 자원 식별자입니다. 배열을 얻으려면 다음을 수행하십시오.

$row = mysql_fetch_assoc($result); 
echo $row['name']; 

SQL 주입 취약점에 대해서도 읽으십시오.

1

첫째 결과 행을 인출해야합니다.

변형 1 - 내 코드 [SQL 취약 (인덱스 0에서 시작)에 열거 배열

$result = mysql_fetch_row($result); 
echo $result[0]; 
관련 문제