Validatie van update formulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mohamed nvt

Mohamed nvt

09/09/2017 14:51:51
Quote Anchor link
Hallo allemaal,

Momenteel heb ik een formulier waarmee ik gegevens inlaad om vervolgens ze weer aan te passen.
En dit werkt zonder problemen, alleen ik zou het validatie proces ook in het formulier willen laten zien. En tot nu toe heb ik geen idee hoe ik dat kan doen, want het proces gaat als volgt:

Gegevens worden opgehaald
Gegevens worden in het formulier weergegeven
Validatie wordt uitgevoerd
Nieuwe gegevens worden ingevoerd

Onderstaande code gebruik ik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
require('includes/config.inc.php');
$page_title = 'Overview of all medicines saved to the database';
include('includes/header.php');

// If no user_id session variable exists, redirect the user:
if (!isset($_SESSION['user_id'])) {
                    
                $url = BASE_URL . 'index.php'; // Define the URL.
                ob_end_clean(); // Delete the buffer.
                header("Location: $url");
                exit(); // Quit the script.
                
        }
// Need the database connection:
require(MYSQL);
// op basis van een id worden gegevens van de vorige pagina geselecteerd en hieronder in het form weergegeven
if (isset($_GET['id']) && !empty($_GET['id']) && is_numeric($_GET['id'])) {
                
                // Define the query.
                $query = "SELECT id, medicinename, genericname, expiredate, quantity, sellingprice, purchaseprice FROM medicines WHERE id='" . mysqli_real_escape_string($dbc, $_GET['id']) . "'";
                
                if ($result = mysqli_query($dbc, $query)) { // Run the query.
                    
                    $row = mysqli_fetch_array($result);// Retrieve the information.
                    ?>

                    <form action="med_edit.php" method="post">
                        <h2>Medicine Edit Form</h2>
                        <table>
                            
                                <input type="hidden" name="id" value="<?php echo htmlentities($row['id']);?>">
                            
                            <tr>
                                <td><label for="medicinename"><b>Medicine Name:</b></label></td>
                                <td><input type="text" name="medicinename" id="medicinename" value="<?php echo htmlentities($row['medicinename']); ?>" /></td>
                                <td>error gedeelte</td>
                            </tr>
                            <tr>
                                <td><label for="genericname"><b>Generic Name:</b></label></td>
                                <td><input type="text" name="genericname" id="genericname" value="<?php echo htmlentities($row['genericname']); ?>" /></td>
                                <td>error gedeelte</td>
                            </tr>
                            <tr>
                                <td><label for="expiredate"><b>ExpireDate:</b></label></td>
                                <td><input type="text" name="expiredate" id="expiredate" value="<?php echo htmlentities($row['expiredate']); ?>" /></td>
                                <td>error gedeelte</td>
                            </tr>
                            <tr>
                                <td><label for="quantity"><b>Quantity:</b></label></td>
                                <td><input type="text" name="quantity" id="quantity" value="<?php echo htmlentities($row['quantity']); ?>" /></td>
                                <td>error gedeelte</td>
                            </tr>
                            <tr>
                                <td><label for="sellingprice"><b>SellingPrice:</b></label></td>
                                <td><input type="text" name="sellingprice" id="sellingprice" value="<?php echo htmlentities($row['sellingprice']); ?>" /></td>
                                <td>error gedeelte</td>
                            </tr>
                            <tr>
                                <td><label for="purchaseprice"><b>PurchasePrice:</b></label></td>
                                <td><input type="text" name="purchaseprice" id="purchaseprice" value="<?php echo htmlentities($row['purchaseprice']); ?>" /></td>
                                <td>error gedeelte</td>
                            </tr>
                            <tr>
                                <td></td>
                                <td colspan="2"><input type="submit" name="submit" value="Update Medicine" class="btn"></td>
                            </tr>
                        </table>
                    </form>
            <?php        
                } else { // Couldn't get the information.
                        echo '<p style="color: red;">Could not retrieve the medicine ID</p>';
        }
    }
elseif (isset($_POST['id']) && is_numeric($_POST['id'])) { // Handle the form.
    
        // Validate and secure the form data:

    $problem = FALSE;
    if (!empty($_POST['medicinename']) && !empty($_POST['genericname']) && !empty($_POST['expiredate']) && !empty($_POST['quantity']) && !empty($_POST['sellingprice']) && !empty($_POST['purchaseprice'])) {
        $medicinename = mysqli_real_escape_string($dbc, trim(strip_tags($_POST['medicinename'])));
        $genericname = mysqli_real_escape_string($dbc, trim(strip_tags($_POST['genericname'])));
        $expiredate = mysqli_real_escape_string($dbc, trim(strip_tags($_POST['expiredate'])));
        $quantity = mysqli_real_escape_string($dbc, trim(strip_tags($_POST['quantity'])));
        $sellingprice = mysqli_real_escape_string($dbc, trim(strip_tags($_POST['sellingprice'])));
        $purchaseprice = mysqli_real_escape_string($dbc, trim(strip_tags($_POST['purchaseprice'])));
        
    }
else {
        print '<p style="color: red;">Please fill in all fields</p>';
        $problem = TRUE;
    }


    if (!$problem) {

        // Define the query.
        $query = "UPDATE medicines SET medicinename='$medicinename', genericname='$genericname', expiredate='$expiredate', quantity='$quantity', sellingprice='$sellingprice',  purchaseprice='$purchaseprice' WHERE id={$_POST['id']}";
        $r = mysqli_query($dbc, $query); // Execute the query.

        // Report on the result:

        if (mysqli_affected_rows($dbc) == 1) {
            header ('Refresh:3; url=medicines.php');
            echo '<p class="addmedtext">This medicine has been updated.</br><br>
            Within 3 seconds you will redirected to Medicines page...
            </p>'
;
            include ('includes/footer.php'); // Include the HTML footer.
            exit(); // Stop the page.
        } else {
            echo '<p style="color: red;">Could not update this medicine</p>';
        }

    }
// No problem!

} else { // No ID set.
    print '<p style="color: red;">This page has been accessed in error.</p>';
}
// End of main IF.

mysqli_close($dbc); // Close the connection.
?>

<?php
include "includes/footer.php";
?>
 
PHP hulp

PHP hulp

28/03/2024 16:10:48
 
- Ariën  -
Beheerder

- Ariën -

09/09/2017 16:42:04
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$quantity = mysqli_real_escape_string($dbc, trim(strip_tags($_POST['quantity'])));

Dit viel mij even op. Deze trim en striptags moet op de uitvoer.
 
Mohamed nvt

Mohamed nvt

09/09/2017 20:25:41
Quote Anchor link
Hallo - Ariën -,

Bedoel je in het insert query? Want, ik snap niet helemaal precies wat je bedoelt met uitvoer.

Is het verder mogelijk dat ik de validatie van het formulier in het "errors gedeelte" kan plaatsen? Zo, jah hoe kan ik dit aanpakken?
 
- Ariën  -
Beheerder

- Ariën -

09/09/2017 20:40:51
Quote Anchor link
De invoer is de plek waar de data de database in gaat, en de uitvoer is de plek waar je het eruit haalt. Dus waar je het toont. Het beste is om juist daar alle data te 'sanitizen'. Zo kan je ook makkelijker XSS voorkomen, en sloop je niet je data.

En verder om op je vraag terug te komen over je validatie. Je kan met het vergelijken met een lege string in combinatie met trim controleren of iets ingevuld is. Als dat niet zo is, dan toon je een error.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

10/09/2017 18:12:16
Quote Anchor link
Er komen nogal wat dingetjes kijken voordat alles goed en veilig gaat.

- Gebruik zoveel mogelijk het utf-8 karakterset. Zie deze tutorial

- laat de browsers weten dat je utf-8 gebruikt door dit in de header te zetten.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
header('Content-type: text/plain; charset=utf-8');
?>


- Gebruik prepared statements om data in je database op te slaan.

- escape output (tutorial). Voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$tekst
= '<p>Dit is een paragraaf</p>';
echo htmlspecialchars($tekst, ENT_COMPAT, 'UTF-8');
 
Mohamed nvt

Mohamed nvt

10/09/2017 20:14:15
Quote Anchor link
Hallo - Ariën - & Frank Nietbelangrijk,

Bedankt voor jullie suggesties. Inmiddels heb ik de code aangepast en validatie toegevoegd en nu wil ik graag de uitkomst van validatie weergeven, maar waar precies?
Ik heb het geprobeerd in het formulier weer te geven, maar er gebeurde niets. En, volgens mij is dit logisch, want het formulier staat boven de afhandeling ervan.
Moet het soms in de if () weer geven?

Code ziet er nu als volgt uit voor een validatie input field:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Check for a suppliername:
    if(!empty($trimmed['suppliername'])){
        $suppliername = $trimmed['suppliername'];
        } else {
            $errors['suppliername'] = "<p class='error'>Please select a supplier name from the list</p>";
        }
    

    if (count($errors) == 0) {

        // Define the query.
        $query = "UPDATE medicines SET medicinename='$medicinename', genericname='$genericname', expiredate='$expiredate', quantity='$quantity', sellingprice='$sellingprice',  purchaseprice='$purchaseprice' WHERE id={$_POST['id']}";
        $r = mysqli_query($dbc, $query); // Execute the query.

        // Report on the result:
        if (mysqli_affected_rows($dbc) == 1) {
            header ('Refresh:3; url=medicines.php');
            echo '<p class="addmedtext">This medicine has been updated.</br>
            Within 3 seconds you will redirected to Medicines page...
            </p>';
            include ('includes/footer.php'); // Include the HTML footer.
            exit(); // Stop the page.
        } else {
            echo '<p style="color: red;">Could not update this medicine</p>';
        }

    } // No problem!

} else { // No ID set.
    print '<p style="color: red;">This page has been accessed in error.</p>';
} // End of main IF.

Ook zou ik graag willen dat wanneer er niets aangepast is in het formulier en de gebruiker drukt op verzendknop, dan moet ik geen foutmelding krijg maar een bericht dat er niets is aangepast en een redirect naar een ander pagina. Moet ik soms een switch statement hier gebruiken?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
else {
            echo '<p style="color: red;">Could not update this medicine</p>';
        }
Gewijzigd op 10/09/2017 20:17:25 door Mohamed nvt
 
Frank Nietbelangrijk

Frank Nietbelangrijk

10/09/2017 20:39:38
Quote Anchor link
(Daar gaan we weer) PHP logica bovenin en output onderin!! (sorry maar dit is toch al diverse malen verteld)

Een simpel formulier met validatie ziet er zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php

// functie die de formuliervelden valideert en foutmeldingen aanmaakt
function validate($naam, $email)
{

    $errors = array();
    
    // validatieregels voor de naam
    if(strlen($naam) < 2)
        $errors[] = 'U heeft geen naam ingevuld.';
    
    // validatieregels voor het mailadres
    if(!strlen($email))
        $errors[] = 'U heeft geen email adres ingevuld.';
    else if(!filter_var($email, FILTER_VALIDATE_EMAIL))
        $errors[] = 'U heeft een ongeldig email adres ingevuld.';
    
    // geef de array met foutmeldingen terug
    return $errors;
}


// initialisatie van de variabelen (zorgt er voor dat variabelen altijd bestaan en een standaardwaarde hebben).
$naam = '';
$email = '';
$errors = array();

// indien het formulier verstuurd is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // overschrijf de standaardwaarden voor de waarden die ge-POST zijn
    $naam = $_POST['naam'];
    $email = $_POST['email'];
    
    // valideer de ingevulde gegevens
    $errors = validate($naam, $email);
    
    // als er dan geen fouten zijn stuur de gebruiker door naar een bedank pagina
    if(!count($errors))
    {

        // Verwerk hier je formulier, bijvoorbeeld een email versturen of de gegevens opslaan in de database
        
        // Na verwerking formulier altijd redirecten om opnieuw indienen van dezelfde gegevens te voorkomen!

        header('Location: bedankt.html');
        exit;
    }
}

/*
 * Boven deze regel staat het programma waarin GEEN output te vinden is. (behalve bij fatale fouten als het programma dan toch stopt.)
 * Onder deze regel staat ALLEEN output.
 */

?>

<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>een titel</title>
    </head>
    <body>
        
        <?php
            if(count($errors)) {
                echo '<ul id="errors">';
                foreach($errors as $error) {
                    echo '<li>' . $error . '</li>';
                }

                echo '</ul>';
            }

        ?>

        <form action="" method="post">
            <input type="text" name="naam" value="<?php echo htmlspecialchars($naam); ?>" />
            <input type="text" name="email" value="<?php echo $email; ?>" />
            <button type="submit">Verzenden</button>
        </form>
    </body>
</html>
Gewijzigd op 10/09/2017 20:46:07 door Frank Nietbelangrijk
 
Mohamed nvt

Mohamed nvt

10/09/2017 20:50:11
Quote Anchor link
Hallo Frank Nietbelangrijk,

Ik weet niet of je dit topic vanaf het begin heb gelezen, maar dit is een edit formulier en geen insert formulier, vandaar dat ik in de war ben wat betreft logica zoals ik hierboven aan vermeld en zal het nogmaals hier aangeven ;-)

1. Op basis van een ID worden gegevens gehaald uit DB en vervolgens ingeladen in het formulier
2. Dit is toch logica ;-)
3. Daarna wordt het edit proces uitgevoerd om vervolgens nieuwe gegevens op te slaan in de DB.
4. Het enige wat ik nu wel is dat ik een validatie wil uitvoeren op de nieuwe gegevens voordat ik de nieuwe gegevens opslaan in de DB.

Hopelijk is nu alles duidelijk ;-)

Toevoeging op 10/09/2017 22:10:53:

Update 1:

Ik heb nu de logica/afhandeling van het form bovenaan het pagina gezet.
Vervolgens wordt aan de hand van een ID gegevens opgehaald uit een DB en gegevens worden gewijzigd en nieuwe gegevens worden opgeslagen in DB. Tot zover gaat het goed.
Maar helaas werkt de validatie nog steeds niet.
Wanneer ik alle input fields leeg maak en ik klik op verzenden, dan krijg ik geen foutmelding en het hele formulier is weg. Ik krijg dus een lege content. Dit krijg ik ook te zien wanneer ik de bron bekijk van HTML.

Mijn code ziet nu als volgt uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
<?php
require('includes/config.inc.php');
$page_title = 'Overview of all medicines saved to the database';
include('includes/header.php');

// If no user_id session variable exists, redirect the user:
if (!isset($_SESSION['user_id'])) {
                    
                $url = BASE_URL . 'index.php'; // Define the URL.
                ob_end_clean(); // Delete the buffer.
                header("Location: $url");
                exit(); // Quit the script.
                
        }
    
// Need the database connection:
require(MYSQL);
if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Handle the form.
    
    //creating veriables for medicinescompany, medicinescountry, medicinetype_id and supplier_id

    $medicinescompany_id = $_POST['companyname'];
    $medicinescountry_id = $_POST['medicinescountry'];
    $medicinetype_id = $_POST['medicinetypename'] ;
    $supplier_id = $_POST['suppliername'];
    
    // Trim all the incoming data:
    $trimmed = array_map('trim', $_POST);
    // Validate and secure the form data:
    $errors = array();
    
    // Check for a medicine name:
    if (!empty($trimmed['medicinename'])) {
        $medicinename = mysqli_real_escape_string ($dbc, $trimmed['medicinename']);
        }
else {
            $errors['medicinename'] = "<p class='error'>Medicine name can't be empty</p>";
        }

    
    // Check for a generic name:
    if (!empty($trimmed['genericname'])) {
        $genericname = mysqli_real_escape_string ($dbc, $trimmed['genericname']);
        }
else {
            $errors['genericname'] = "<p class='error'>Generic name can't be empty</p>";
        }

    //check for a medicine type name
    if(isset($trimmed['medicinetypename']) && $trimmed['medicinetypename'] > 0){
        $medicinetypename = $trimmed['medicinetypename'];
        }
else {
            $errors['medicinetypename'] = "<p class='error'>Please select a medicine type name from the list</p>";
        }

    // Check for a expiration date name:
    if (!empty($trimmed['expiredate'])) {
        $expiredate = mysqli_real_escape_string ($dbc, $trimmed['expiredate']);
        }
else {
            $errors['expiredate'] = "<p class='error'>Please select a date from the calendar</p>";
        }

    // Check for quantity:
    if (!empty($trimmed['quantity'])) {
        $quantity = mysqli_real_escape_string ($dbc, $trimmed['quantity']);
        }
else {
            $errors['quantity'] = "<p class='error'>Quantity can't be empty</p>";
        }

    $sellingprice = mysqli_real_escape_string ($dbc, $trimmed['sellingprice']);
    
    $purchaseprice = mysqli_real_escape_string ($dbc, $trimmed['purchaseprice']);
    //check for medicine companyname
    if (!empty($trimmed['companyname'])) {
        $medicinecompany = mysqli_real_escape_string ($dbc, $trimmed['companyname']);
        }
else {
            $errors['companyname'] = "<p class='error'>Please select a company name from the list</p>";
        }

    //check for medicine countryname
    if (!empty($trimmed['medicinescountry'])) {
        $country = mysqli_real_escape_string ($dbc, $trimmed['medicinescountry']);
        }
else {
            $errors['medicinescountry'] = "<p class='error'>Please select a medicine country from the list</p>";
        }
        
    // Check for a suppliername:
    if(!empty($trimmed['suppliername'])){
        $suppliername = $trimmed['suppliername'];
        }
else {
            $errors['suppliername'] = "<p class='error'>Please select a supplier name from the list</p>";
        }

    

    if (count($errors) == 0) {

        // Define the query.
        $query = "UPDATE medicines SET medicinename='$medicinename', genericname='$genericname', expiredate='$expiredate', quantity='$quantity', sellingprice='$sellingprice',  purchaseprice='$purchaseprice' WHERE id={$_POST['id']}";
        $r = mysqli_query($dbc, $query); // Execute the query.

        // Report on the result:

        if (mysqli_affected_rows($dbc) == 1) {
            header ('Refresh:3; url=medicines.php');
            echo '<p class="addmedtext">This medicine has been updated.</br>
            Within 3 seconds you will redirected to Medicines page...
            </p>'
;
            include ('includes/footer.php'); // Include the HTML footer.
            exit(); // Stop the page.
        } else {
            echo '<p style="color: red;">Could not update this medicine</p>';
        }

    }
// No problem!

}

// op basis van een id worden gegevens van de vorige pagina geselecteerd en hieronder in het form weergegeven
if (isset($_GET['id']) && !empty($_GET['id']) && is_numeric($_GET['id'])) {
                
                // Define the query.
                $query = "SELECT id, medicinename, genericname, expiredate, quantity, sellingprice, purchaseprice FROM medicines WHERE id='" . mysqli_real_escape_string($dbc, $_GET['id']) . "'";
                
                if ($result = mysqli_query($dbc, $query)) { // Run the query.
                    
                    $row = mysqli_fetch_array($result);// Retrieve the information.
                    ?>

                    <form action="med_edit.php" method="post">
                        <h2>Medicine Edit Form</h2>
                        <table>
                            
                                <input type="hidden" name="id" value="<?php echo htmlentities($row['id']);?>">
                            
                            <tr>
                                <td><label for="medicinename"><b>Medicine Name:</b></label></td>
                                <td><input type="text" name="medicinename" id="medicinename" value="<?php echo htmlentities($row['medicinename']); ?>" /></td>
                                <td><?php if(isset($errors['medicinename'])) echo $errors['medicinename']; ?></td>
                            </tr>
                            <tr>
                                <td><label for="genericname"><b>Generic Name:</b></label></td>
                                <td><input type="text" name="genericname" id="genericname" value="<?php echo htmlentities($row['genericname']); ?>" /></td>
                                <td><?php if(isset($errors['genericname'])) echo $errors['genericname']; ?></td>
                            </tr>
                            <tr>
                                <td><label for="medicinetypename"><b>Select medicine type:</b></label></td>
                                <td><select name="medicinetypename">
                                <option value="">---Select---</option>
                                <?php
                                require_once (MYSQL);
                                $query = "SELECT * from medicinestype";
                                $result = mysqli_query($dbc,$query);
                                if(!$result){
                                    die ("query failed" . mysqli_error($dbc));    
                                }

                                while ($row = mysqli_fetch_assoc($result)){
                                        $medicinetype_id = $row['id'];
                                        $medicinetypename = $row['medicinetypename'];
                                    echo "<option value='$medicinetype_id'>{$medicinetypename}</option>";
                                }

                                ?>

                                </select></td>
                                <td><?php if(isset($errors['medicinetypename'])) echo $errors['medicinetypename']; ?></td>
                            </tr>
                            <tr>
                                <td><label for="expiredate"><b>ExpireDate:</b></label></td>
                                <td><input type="date" name="expiredate" id="expiredate" value="<?php echo htmlentities($row['expiredate']); ?>" /></td>
                                <td><?php if(isset($errors['expiredate'])) echo $errors['expiredate']; ?></td>
                            </tr>
                            <tr>
                                <td><label for="companyname"><b>This medicine belgons to company:</b></label></td>
                                <td>
                                    <?php
                                    require_once (MYSQL);
                                    $query = "SELECT * from medicinescompany where userid= '{$_SESSION['user_id']}'";
                                    $result = mysqli_query($dbc,$query);
                                    if(!$result){
                                        die ("query failed" . mysqli_error($dbc));    
                                    }

                                    if(mysqli_num_rows($result) == 0){
                                        echo "Before adding any medicine to the database, please add a <a href='medcom_insert.php'>Medicine Company</a>";
                                        }
else {?>

                                        <select name="companyname">
                                        <option value="">---Select---</option>
                                        <?php while ($row = mysqli_fetch_assoc($result)){
                                            $medicinescompany_id = $row['id'];
                                            $companyname = $row['companyname'];
                                        echo "<option value='$medicinescompany_id'>{$companyname}</option>";
                                        }
                                    }

                                    ?>

                                </select></td>
                                <td><?php if(isset($errors['companyname'])) echo $errors['companyname']; ?></td>
                            </tr>
                            <tr>
                                <td><label for="medicinescountry"><b>This medicine is made in country:</b></label></td>
                                <td>
                                <?php
                                $query2
= "SELECT * from medicinescountry where userid= '{$_SESSION['user_id']}'";
                                $result2 = mysqli_query($dbc,$query2);
                                if(!$result2){
                                    die ("query failed" . mysqli_error($dbc));    
                                }

                                if (mysqli_num_rows($result2) == 0){
                                    echo "Before adding any medicine to the database, please add a <a href='medcountry_insert.php'>Medicine Country</a>";    
                                    }
else { ?>

                                        <select name="medicinescountry">
                                        <option value="">---Select---</option>
                                        <?php while ($row = mysqli_fetch_assoc($result2)){
                                        $medicinescountry_id = $row['id'];
                                        $countryname = $row['countryname'];
                                            echo "<option value='$medicinescountry_id'>{$countryname}</option>";     
                                     }
                                }

                                ?>

                                </select>
                                </td>
                                <td><?php if(isset($errors['medicinescountry'])) echo $errors['medicinescountry']; ?></td>
                            </tr>
                            <tr>
                                <td><label for="quantity"><b>Quantity:</b></label></td>
                                <td><input type="text" name="quantity" id="quantity" value="<?php echo htmlentities($row['quantity']); ?>" /></td>
                                <td><?php if(isset($errors['quantity'])) echo $errors['quantity']; ?></td>
                            </tr>
                            <tr>
                                <td><label for="sellingprice"><b>SellingPrice:</b></label></td>
                                <td><input type="text" name="sellingprice" id="sellingprice" value="<?php echo htmlentities($row['sellingprice']); ?>" /></td>
                                <td></td>
                            </tr>
                            <tr>
                                <td><label for="purchaseprice"><b>PurchasePrice:</b></label></td>
                                <td><input type="text" name="purchaseprice" id="purchaseprice" value="<?php echo htmlentities($row['purchaseprice']); ?>" /></td>
                                <td></td>
                            </tr>
                            <tr>
                                <td><label for="suppliername"><b>This medicine is brought to you by supplier:</b></label></td>
                                <td>
                                <?php
                                $querysupplier
= "SELECT * from suppliers where userid= '{$_SESSION['user_id']}'";
                                $resultsupplier = mysqli_query($dbc,$querysupplier);
                                if(!$resultsupplier){
                                    die ("query failed" . mysqli_error($dbc));    
                                }

                                if (mysqli_num_rows($resultsupplier) == 0){
                                    echo "Before adding any medicine to the database, please add a <a href='medsuppliers_insert.php'>Medicine Supplier</a> first!";    
                                    }
else { ?>

                                        <select name="suppliername">
                                        <option value="">---Select---</option>
                                        <?php while ($row = mysqli_fetch_assoc($resultsupplier)){
                                        $supplier_id = $row['id'];
                                        $suppliername = $row['suppliername'];
                                    echo "<option value='$supplier_id'>{$suppliername}</option>";
                                    }
                                }

                                ?>

                                </select></td>
                                <td><?php if(isset($errors['suppliername'])) echo $errors['suppliername']; ?></td>
                            </tr>
                            <tr>
                                <td></td>
                                
                                <td colspan="2"><input type="submit" name="submit" value="Update Medicine" class="btn"></td>
                            </tr>
                        </table>
                    </form>
            <?php        
                } else { // Couldn't get the information.
                    echo '<p style="color: red;">Could not retrieve the medicine ID</p>';
        }
}
// End of main IF.

mysqli_close($dbc); // Close the connection.
?>

<?php
include "includes/footer.php";
?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

10/09/2017 22:51:46
Quote Anchor link
Ha Mohamed,

Het maakt echt niet uit wat voor formulier of pagina je gaat maken. Om de zaken overzichtelijk en logisch te houden doe je gewoon ALTIJD de output als laatste. Overigens zijn er ook technische redenen om dat te doen. Bijvoorbeeld omdat je voor een redirect met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php header('Location: login.php'); ?>
geen output verzonden mag hebben. En zo zijn er nog wel wat dingen te benoemen.

Gelukkig heb je je wel iets aangetrokken van mijn commentaar en heb je al een en ander naar boven verplaatst.
Maar dit is nog niet genoeg. Ook de code voor het vullen van je <select>s moet naar boven. Je zou hier een heel handige functie voor kunnen schrijven want de vier? selects komen in grote lijnen met elkaar overeen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<form action="med_edit.php" method="post">


verander dat eens naar
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<form action="" method="post">





Toevoeging op 10/09/2017 22:56:15:

uit mijn hoofd gezegd blijven je $_GET variabelen dan bewaard. En anders zul je die er bij moeten zetten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<form action="med_edit.php?id=<?php echo $_GET['id']; ?>" method="post">


Ook krijg je van mij nog even de opmerking dat ik $_GET en $_POST elementen nooit rechtstreeks zou gebruiken omdat deze variabelen vrijwel zeker niet in alle gevallen bestaan.
 
Mohamed nvt

Mohamed nvt

11/09/2017 09:29:27
Quote Anchor link
Hallo Frank Nietbelangrijk ;-)

Wanneer het nodig is, zal ik zeker de aangegeven feedback opvolgen en toepassen.

Is het echt nodig om de code van de select menu naar boven te plaatsen of is het praktisch om dat te doen? En naar welk deel moet ik het precies plaatsen? In de IF statement?

Na het veranderen van
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<form action="med_edit.php" method="post">

naar

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<form action="med_edit.php?id=<?php echo $_GET['id']; ?>" method="post">

Werkt het edit formulier nu wel zoals ik het wel. Mijn dank is groot! ;-)

Overigens, wil je toelichten waarom na het toevoegen van bovenstaande code aan het formulier werkt het formulier nu wel? Ik heb wel een vermoeden dat alles gebeurt op basis van ID en had ik het probleem niet kunnen oplossen als ik bovenaan van mijn IF statement controleer of een ID isset is?
Gewijzigd op 11/09/2017 09:40:31 door Mohamed nvt
 
Frank Nietbelangrijk

Frank Nietbelangrijk

11/09/2017 09:48:24
Quote Anchor link
Toelichten ga ik proberen.

GET variabelen staan in je URL. Bijvoorbeeld http:/example.com/index.php?id=123&search=blabla

Jouw formulier gebruikt zo een GET variabele. Alleen na het invullen van het formulier wordt je pagina in de browser vervangen door de pagina van de URL die in de action attribuut van je form element staat (<form action="..." method="POST">). In deze URL ontbrak echter die $_GET variabele waardoor je na het verzenden niet op http:/example.com/med_edit.php?id=123 uit kwam maar op http:/example.com/med_edit.php en je dus je id kwijt was.

Toevoeging op 11/09/2017 09:51:47:

>> Is het echt nodig om de code van de select menu naar boven te plaatsen of is het praktisch om dat te doen? En naar welk deel moet ik het precies plaatsen? In de IF statement?

Het is beter maar zolang het werkt dan werkt het. Probeer het jezelf gewoon aan te leren van nu af aan als je aan een nieuwe pagina begint.

Verdiep je ook eens een uurtje in functies. Dat is echt een aanrader. Succes verder.
Gewijzigd op 11/09/2017 09:53:23 door Frank Nietbelangrijk
 
Ward van der Put
Moderator

Ward van der Put

11/09/2017 10:28:31
Quote Anchor link
Hier viel me nog iets op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<tr>
  <td><label for="medicinescountry"><b>This medicine is made in country:</b></label></td>
  <td>
     <?php
     $query2
= "SELECT * from medicinescountry where userid= '{$_SESSION['user_id']}'";
     //...
     ?>

Het land waar een medicijn wordt gemaakt, is afhankelijk van de user-ID? Dus als de gebruiker verhuist van Nederland naar België, worden medicijnen die hij voorschrijft ineens ook in een ander land geproduceerd?

Je zou eerder verwachten dat het land waar een medicijn is geproduceerd, afhankelijk is van het land waar het medicijn is geproduceerd (lijkt me wel zo logisch) of anders bijvoorbeeld van het land waar de producent is gevestigd of de landcode die je uit een of andere barcode op de medicijnverpakking vist.
Gewijzigd op 11/09/2017 10:29:03 door Ward van der Put
 
Mohamed nvt

Mohamed nvt

11/09/2017 13:13:19
Quote Anchor link
Hallo Frank Nietbelangrijk,

Bedankt voor het toelichten ;-)

Hi Ward van der Put,

Eigenlijk zie je het verkeerd ;-). Binnen het systeem hebben de gebruikers de mogelijkheid om een land op te geven waar het medicijn vandaan komt. En dus tijdens het invoeren van een medicijn kan men kiezen uit welk land een medicijn komt. Dat is de achterliggende gedachte.
En met bovenstaande query haal ik enkel die landen op die ingelogde gebruiker heeft toegevoegd.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.