Suchen Sie nach einer effizienten Möglichkeit, eine große Anzahl wiederholter If-Anweisungsprüfungen durchzuführen
P粉421119778
P粉421119778 2024-04-03 19:20:08
0
1
627

Als ich versuchte, ein Suchtool für eine Datenbank zu erstellen, die ich für meine Bachelorarbeit erstellt hatte, musste ich viele vom Benutzer eingegebene Werte überprüfen und auf der Grundlage dieser Werte geeignete MySQL查询 generieren und ausführen. Beispiele sind wie folgt:

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>

Als weiteren Teil derselben Tabelle habe ich eine Schaltfläche, mit der der Benutzer mithilfe einer UND- oder ODER-Anweisung eine zweite Eingabezeile für eine spezifischere Suche mit zwei Attributen erstellen kann. <button type="button" id="new_row_btn" onclick="addRow()" name="new_row">添加额外行</button>

Ich möchte diesen Beitrag organisiert halten, um Antworten zu erhalten, daher werde ich die JavaScript-Funktion addRow() nicht einbinden, aber wenn es nötig ist kommentieren Sie ihn bitte und ich werde ihn so schnell wie möglich bearbeiten.

Mein Problem ist wie folgt: Ich habe diese beiden Eingaben und möchte überprüfen, ob der Benutzer in der zweiten Zeile (in der Eingabe „Erweitert“) etwas eingegeben hat, und dann die entsprechende Aktion basierend auf dem neuen Wert der Abfrage ausführen.

Der aktuelle PHP-Code sieht so aus:

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";
                }

Die obige if-Anweisung dauert etwa 20 Mal ... jedes Mal wird die Beziehung einer Eigenschaft zu einer anderen Eigenschaft überprüft. z. B. Name+newIDID+newNameEmail+newSex Natürlich weiß ich, dass ich noch nicht fertig bin und es Hunderte von möglichen Kombinationen dieser Eigenschaften gibt, aber ich frage mich, ob es eine Möglichkeit gibt, das alles zu vermeiden und es einfacher zu machen ...

Entschuldigung, dass ich eine so lange Frage stelle! Alle Kommentare zur Verbesserung dieser Frage sind willkommen.

Vielen Dank im Voraus für Ihre Zeit.

P粉421119778
P粉421119778

Antworte allen(1)
P粉239089443

也许可以将相同的 IF 条件组合在一起?

这是我推荐的东西:

if ($option == 'Name') {
    if ($newoption == 'Email' && !empty($newEmail)) {
        //...
    }
    if ($newoption == 'Age' && !empty($newAge)) {
        //...
    }
}

少一点重复:

if ($option == 'Name') {
    // use this 'if', if $newoption correlates to which child if is populated...
    if ($newoption == 'Email' || $newoption == 'Age') {
        if (!empty($newEmail)) {
            //...
        }
        if (!empty($newAge)) {
            //...
        }
    }
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage