2013-04-08 2 views
-2

를 사용하는 경우 :

$query = " 
    SELECT 
     id, 
     full_name, 
     address, 
     email, 
     telephone, 
     prescription 
    FROM patients 
    WHERE id 
    LIKE '%" . $patient_id . "%'"; 

문제가있을 때마다 PHP는 그 통지 : 정의되지 않은 인덱스 :

해결 방법 내가 찾고있는 유일한 방법은 양식 입력에서 오히려 테이블에서 발생하는 데이터를 사용하여 묘사하는 것입니다. . 따라서 발견 된 예제에는 $ _POST 또는 $ _GET이 포함되어 있습니다.

환호, 이안

+2

제공된 코드에'isset ('처방전')을 사용하는 것을 보지 못했습니다. 또한, 'Notice : Undefined index'는 일반적으로 배열을 가리키며 여기서도 배열을 사용하는 것을 보지 못합니다. – Steve

+2

isset()을 사용하면 변수가 하드 코딩 된 문자열이 아닌지 테스트 할 수 있습니다 :'if (isset ('prescription')) { '처방'}'은 의미가 없습니다 –

+1

** 읽기. 배우다. http://en.wikipedia.org/wiki/SQL_injection** – SecurityMatt

답변

0

내가 여기 사지에 나가 갈 당신은 빈 결과 집합에서 값을 읽으려고하고 추측하고 있습니다. 먼저 유효한 결과를 확인해야합니다. 다음은 PDO를 사용한 예입니다.

$pdo = new PDO('mysql:host=localhost;dbname=yourdb;charset=utf8', 'username', 'password'); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

// I've changed your query to remove the LIKE comparison 
// Seemed incorrect for an ID lookup 
$stmt = $pdo->prepare('SELECT 
    id, full_name, address, email, telephone, prescription 
    FROM patients WHERE id = ?'); 

$stmt->bindParam(1, $patient_id); 
$stmt->execute(); 

$results = $stmt->fetchAll(PDO::FETCH_ASSOC); 

// Check for any results 
if (0 === count($results)) { 
    throw new Exception('No results found'); 
} 

foreach ($results as $result) : ?> 

<dl> 
    <dt>ID</dt> 
    <dd><?= htmlspecialchars($result['id']) ?></dd> 

    <dt>Full name</dt> 
    <dd><?= htmlspecialchars($result['full_name']) ?></dd> 

    <!-- and so on --> 
</dl> 

<?php endforeach ?> 
+0

감사 필, 이제 정렬되었습니다! 모두의 도움에 감사드립니다! – hihaho67