Vous recherchez un moyen efficace de gérer un grand nombre de vérifications répétées de l'instruction If
P粉421119778
P粉421119778 2024-04-03 19:20:08
0
1
613

Lorsque j'essayais de créer un outil de recherche pour une base de données que j'avais créée pour ma thèse de premier cycle, je devais faire beaucoup de vérification des valeurs saisies par l'utilisateur et générer et exécuter les MySQL查询 appropriées en fonction de ces valeurs. Les exemples sont les suivants :

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>

Comme une autre partie du même tableau, j'ai un bouton qui permet à l'utilisateur de créer une deuxième ligne de saisie pour une recherche plus spécifique, avec 2 attributs, en utilisant une instruction AND ou OR. <button type="button" id="new_row_btn" onclick="addRow()" name="new_row">添加额外行</button>

Je souhaite garder cet article organisé pour recevoir des réponses, donc je n'inclurai pas la fonction JavaScript addRow(), mais si c'est nécessaire veuillez le commenter et je le modifierai dès que possible.

Mon problème est le suivant, j'ai ces deux entrées et je souhaite vérifier si l'utilisateur a entré quelque chose sur la deuxième ligne (dans l'entrée "Avancé") puis effectuer l'action appropriée en fonction de la nouvelle valeur de la requête.

Le code PHP actuel ressemble à ceci :

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

L'instruction if ci-dessus durera environ 20 fois... à chaque fois, elle vérifiera la relation d'une propriété à une autre propriété. Name+newIDID+newNameEmail+newSex Évidemment, je sais que je n'ai pas encore fini et qu'il existe des centaines de combinaisons possibles de ces propriétés, mais je me demande s'il existe un moyen d'éviter tout cela et de rendre les choses plus faciles...

Désolé d'avoir posé une si longue question ! Tous les commentaires sur la façon d'améliorer cette question sont les bienvenus.

Merci d'avance pour votre temps.

P粉421119778
P粉421119778

répondre à tous(1)
P粉239089443

Peut-être combiner les mêmes conditions IF ensemble ?

Voici ce que je recommande :

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

Moins de répétition :

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)) {
            //...
        }
    }
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal