2013-04-08 68 views
-2

使用if(isset( '處方')){ '處方'}在下面的代碼有困難:

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

問題是,每當PHP處方有時是空的,有時與信息..因此,此通知顯示:注意:未定義的索引:

我發現的解決方案只使用isset對錶單輸入進行描述,而對來自表的數據進行描述。因此找到的例子包含$ _POST或$ _GET,這對我不起作用。

歡呼聲, 伊恩

+2

我沒有看到你在你提供的代碼中使用'isset('處方')''。另外,'注意:未定義的索引'通常是指一個數組,我在這裏也沒有看到你使用了一個數組。 – Steve 2013-04-08 23:15:22

+2

您使用isset()來測試是否設置了變量,而不是硬編碼的字符串:'if(isset('prescription')){'prescription'}'是無意義的 – 2013-04-08 23:16:36

+1

**閱讀。學習。 http://en.wikipedia.org/wiki/SQL_injection** – SecurityMatt 2013-04-08 23:20:48

回答

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 2013-04-09 05:44:38