Нажатие кнопки «Обновить» на моей странице редактирования Php, когда поле пустое, удаляет идентификатор из URL. - PullRequest
0 голосов
/ 01 мая 2020

Итак, у меня есть PHP CRUD система, которая добавляет, редактирует и удаляет записи из / в базу данных. Рассматриваемая CMS - таблица лекарств. Я могу добавить лекарства в эту таблицу, используя кнопку добавления и заполнив форму, я также могу удалить лекарства, просто удалив их. Но проблема заключается в редактировании / обновлении системы.

Функция редактирования сама по себе работает нормально, я могу редактировать запись, и она будет публиковаться в базе данных и отображаться в таблице, потому что пользователь перенаправляется обратно на страницу таблицы, где отображаются все лекарства, однако, когда я удаляю текст из поля, оставляя его пустым, и нажимаю кнопку обновления, я получаю сообщение об ошибке, в котором говорится, что текстовое поле пусто, однако также обратите внимание, что идентификатор в верхней части страницы больше не существует, что дает мне неопределенный индекс: ошибка.

Я сузил проблему до того, что она просто потому, что тип ввода "submit" по какой-то причине удаляет ее.

URL-адрес перед нажатием обновления с пустым текстовым полем: php_files / DrugEdit. php? Drug_ID = 23

URL-адрес после нажатия обновления с пустым текстовым полем: eMAR / php_files / DrugEdit. php

Как работает программа (с кодом):

Php переменная, созданная путем получения Drug_ID из URL (в данном случае 23)

$Drug_ID = $_GET['Drug_ID'];

Затем получает данные поля из базы данных и присваивает их переменным

$result = mysqli_query($conn, "SELECT * FROM drugs WHERE Drug_ID=$Drug_ID");

while($res = mysqli_fetch_array($result))
{
    $Drug_Name = $res['Drug_Name'];
    $Allergies = $res['Allergies'];
    $Side_effects = $res['Side_effects'];
    $Type_of_Medication = $res['Type_of_Medication'];
    $Dosage = $res['Dosage'];
}
?>

Затем данные отображаются в форме, в которой я могу редактировать данные

   <form name="form1" method="post" action="DrugEdit.php">
        <table border="0">

            <tr> 
                <td>Drug_Name <?php echo $drug_name_error ?></td>
                <td><input type="text" Name="Drug_Name" value="<?php echo $Drug_Name;?>"></td>
            </tr>
            <tr> 
                <td>Allergies</td>
                <td><input type="text" Name="Allergies" value="<?php echo $Allergies;?>"></td>
            </tr>
            <tr> 
                <td>Side_effects</td>
                <td><input type="text" Name="Side_effects" value="<?php echo $Side_effects;?>"></td>
            </tr>
             <tr> 
                <td>Type_of_Medication</td>
                <td><input type="text" Name="Type_of_Medication" value="<?php echo $Type_of_Medication;?>"></td>
            </tr>
                         <tr> 
                <td>Dosage</td>
                <td><input type="text" Name="Dosage" value="<?php echo $Dosage;?>"></td>
            </tr>
            <tr>
                <td><input type="hidden" Name="Drug_ID" value=<?php echo $_GET['Drug_ID'];?>></td>
                <td><input type="submit" Name="update" value="Update"> </td>
            </tr>
        </table>
    </form>

Если кнопка обновления нажата, запускается блок кода ниже:

$drug_name_error = " ";

if(isset($_POST['update']))
{    
    $Drug_ID = $_POST['Drug_ID'];
    $Drug_Name=$_POST['Drug_Name'];
    $Allergies=$_POST['Allergies'];
    $Side_effects=$_POST['Side_effects'];
    $Type_of_Medication=$_POST['Type_of_Medication']; 
    $Dosage=$_POST['Dosage']; 

    // checking empty fields
    if(empty($Drug_Name) || empty($Allergies) || empty($Side_effects) || empty($Type_of_Medication) || empty($Dosage)) {

        if(empty($Drug_Name)) {
            $drug_name_error = "<font color='red'>Drug_Name field is empty.</font><br/>";
        }

        if(empty($Allergies)) {
            echo "<font color='red'>Allergies field is empty.</font><br/>";
        }

        if(empty($Side_effects)) {
            echo "<font color='red'>Side_effects field is empty.</font><br/>";
        }     

        if(empty($Type_of_Medication)) {
            echo "<font color='red'>Type_of_Medication field is empty.</font><br/>";
        }    
        if(empty($Dosage)) {
            echo "<font color='red'>Dosage field is empty.</font><br/>";
        }    
    } else {    
        //updating the table
        $result = mysqli_query($conn, "UPDATE drugs SET Drug_Name='$Drug_Name' ,Allergies='$Allergies' ,Side_effects='$Side_effects' ,Type_of_Medication='$Type_of_Medication',Dosage='$Dosage' WHERE Drug_ID=$Drug_ID");

        //redirecting to the display page. In our case, it is index.php
        header("Location: ../drug_manager.php");
    }
}

Спасибо, что нашли время, чтобы прочитать мою проблему. Надеюсь, я предоставил вам достаточно информации.

1 Ответ

0 голосов
/ 01 мая 2020

тип ввода "submit" по какой-то причине удаляет его

Поскольку вы отправляете форму, а URL для действия отправки формы определен в элементе <form>:

<form name="form1" method="post" action="DrugEdit.php">

Обратите внимание, что в этом URL нет значения Drug_ID. Однако в коде обработки формы вы не ищете его в URL, вы ищете его в сообщении формы:

$Drug_ID = $_POST['Drug_ID'];

Так что я не совсем уверен, где вы получаете эту ошибку. Но если где-то в вашей форме logi c вы также ищете $_GET['Drug_ID'] или просто хотите, чтобы он был в URL для какой-то последующей потребности, то вы можете просто добавить его в этот URL:

<form name="form1" method="post" action="DrugEdit.php?Drug_ID=<?php echo $_GET['Drug_ID'];?>">
...