當我嘗試為我在本科論文中建立的資料庫建立搜尋工具時,我需要對使用者輸入的值進行大量檢查,並根據這些值產生並執行適當的MySQL查詢
。範例如下:
HTML程式碼
(part of the whole table) <tr id="tablerow" class=""> <th id="selectth"> <select class="selection" name="Attributes" id="Attributes"> <!-- List of all the available attributes for the user to select for the searching queries --> <option disabled>Options</option> <option value="Name" id="p_Name">Name</option> <option value="ID" id="p_Id">Patient ID</option> <option value="Sex" id="p_Sex">Sex</option> <option value="Email" id="p_Email">Patient Email</option> <option value="Age" id="p_Age">Age ></option> <option value="Agesmaller">Age < </option> <option value="Race" id="p_Race">Race</option> <option value="PhoneNumber" id="p_Phonenum">Phone Number</option> <option value="Comorbidities" id="p_Comorbidities">Comorbidities</option> <option value="EDSS" id="p_eddsscore">EDSS Score</option> <option value="Pregnant" id="p_Pregnant">Is Pregnant</option> <option value="Onsetlocalisation" id="p_Onsetlocalisation">Onset Localisation</option> <option value="Smoker" id="p_Smoker">Is a Smoker</option> <option value="onsetsymptoms" id="p_onsetsymptoms">Onset Symptoms</option> <option value="MRIenhancing" id="p_MRIenhancing">MRI Enhancing Lesions</option> <option value="MRInum" id="p_MRInum">MRI Lesion No.</option> <option value="MRIonsetlocalisation" id="p_MRIonsetlocalisation">MRI Onset Localisation</option> </select> </th>
作為同一個表的另一部分,我有一個按鈕,允許使用者建立第二行輸入,以便進行更具體的搜索,具有 2 個屬性,使用 AND 或 OR 語句。
<button type="button" id="new_row_btn" onclick="addRow()" name="new_row">新增額外行</button>
我想保留這篇文章的排序以便收到答案,所以我不會包含 addRow() JavaScript 函數,但如果有必要請評論它,我會盡快編輯。
我的問題如下,我有這兩個輸入,我想檢查使用者是否在第二行輸入(在「進階」輸入中)輸入了任何內容,然後根據新值執行適當的操作查詢。
目前的 PHP 程式碼看起來像這樣:
PHP程式碼
if($option == 'Name' && $newoption == 'Email' && !empty($newEmail)){ $sql = "SELECT patients.Patient_id,patients.Patient_name,patients.DOB,patients.Phonenum,patients.Email,MSR.Sex FROM patients,MSR WHERE patients.Patient_id = MSR.NDSnum AND Doctor_ID = $usersid AND patients.Email = '$newEmail' $and_or patients.Patient_name LIKE '%$entry%' ORDER BY Patient_id"; $result = $pdo->query($sql); if ($result->rowCount() > 0) { while ($row = $result->fetch()) { ?> <table id="standard"> <tr> <th>Patient ID</th> <th>Name</th> <th>Date of Birth</th> <th>Phone Number</th> <th>Email</th> <th>Sex</th> <th>Previous Visits</th> </tr> <tr> <td><?php echo $row['Patient_id']; ?></td> <td> <?php echo $row['Patient_name']; ?> </td> <td><?php echo $row['DOB']; ?></td> <td><?php echo $row['Phonenum']; ?></td> <td><?php echo $row['Email']; ?></td> <td><?php echo $row['Sex']; ?></td> <td><?php echo "<a href='/application/previousvisit-bootstrap.php?id=" . $row['Patient_id'] . "'>Previous Visits</a>"; ?></td> </tr> </table> <div class="line"></div> <?php } } else { echo "No patient exists with this information. Name+Email"; } } if ($option == 'Name' && $newoption == 'Age' && !empty($newAge)){ $sql = "SELECT * FROM patients WHERE timestampdiff(year,dob,curdate()) > '$entry' $and_or patients.Patient_name LIKE '%$entry%' AND Doctor_ID = $usersid ORDER BY Patient_id"; $result = $pdo->query($sql); if ($result->rowCount() > 0) { while ($row = $result->fetch()) { ?> <table id="standard"> <tr> <th>Patient Id</th> <th>Patient Name</th> <th>Date of Birth</th> <th>Phone Number</th> <th>Email</th> <th>Previous Visits</th> </tr> <tr> <td><?php echo $row['Patient_id']; ?></td> <td> <?php echo $row['Patient_name']; ?> </td> <td><?php echo $row['DOB'] ?></td> <td><?php echo $row['Phonenum']; ?></td> <td><?php echo $row['Email']; ?></td> <td><?php echo "<a href='/application/previousvisit-bootstrap.php?id=" . $row['Patient_id'] . "'>Previous Visits</a>"; ?></td> </tr> </table> <div class="line"></div> <?php } } else { echo "No patient exists with this information. Name+Age"; }
上面的 if 語句會持續約 20 次...每次都會檢查一個屬性與另一個屬性的關係..例如
Name newID
或 ID newName
或 Email newSex
顯然我知道我還沒有完成,並且這些屬性有數百種可能的組合,但我想知道是否有某種方法可以避免這一切並使其變得更容易......
很抱歉問了這麼長的問題! 歡迎任何有關如何使這個問題變得更好的註解。
提前感謝您抽出時間。
也許可以將相同的 IF 條件組合在一起?
這是我推薦的東西:
少一點重複: