Update PHP query werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mohamed nvt

Mohamed nvt

25/08/2017 21:53:39
Quote Anchor link
Hallo allemaal,

Onderstaande code gebruik ik om de waarde van een kolom bij te werken naar het getal 2, nadat een gebruiker op de verzendknop heeft gedrukt.
En, helaas werkt het niet en ik krijg allemaal foutmelding.
De foutmelding zijn o.a.:

med_expire.php' on line 111: mysqli_affected_rows() expects parameter 1 to be mysqli, null given



Bizar genoeg, wanneer ik binnen PHPMyAdmin de query "UPDATE medicines SET verwijderd = 2 WHERE ID = 55; uitvoer, dan werkt het wel.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$query = "UPDATE medicines SET verwijderd = 2 WHERE id={$_POST['id']}";
Gewijzigd op 25/08/2017 21:57:59 door Mohamed nvt
 
PHP hulp

PHP hulp

26/01/2021 21:49:38
 
Obelix Idefix

Obelix Idefix

25/08/2017 21:56:45
Quote Anchor link
En wat zegt de foutafhandeling?
 
- SanThe -

- SanThe -

25/08/2017 21:58:04
Quote Anchor link
Query uitvoeren.
Foutafhandeling checken.
 
- Ariën -
Beheerder

- Ariën -

25/08/2017 22:03:21
Quote Anchor link
En ik zie meteen een SQL-injection.

Ikzelf gebruik MySQLi-OO en heb een extended class gemaakt die de query() overschrijft mét foutafhandeling erbij.

Misschien een tipje als niet steeds systematisch foutafhandeling erbij wilt schrijven.
Gewijzigd op 25/08/2017 22:04:45 door - Ariën -
 
Mohamed nvt

Mohamed nvt

25/08/2017 22:07:55
Quote Anchor link
Hallo - SanThe -,

Via foutafhandeling krijg ik o.a bovenstaande foutmelding en:

Undefined variable: dbc

En de DBC variabel klopt wel, maar eerder werkt het wel in het script.
Via de dump krijg ik:

[query] => UPDATE medicines SET verwijderd = 2 WHERE id=55
[r] =>
Maar ook hierin zie ik geen foutmelding eigenlijk...En de kolomnamen kloppen reeds wel, want in PHPMyAdmin werkt deze query wel en zonder problemen.

@- Ariën -,

Zie je een SQL injectie bij where id? Dit heb ik net ook ontdekt, nadat ik eerst op het net ging zoeken voor 'n oplossing voor mijn probleem. En jah ik programmeer in procedure, want ik ben nog niet toe aan OOP. Ooit wil ik wel overgaan, maar eerst de applicatie moet af zijn.. ;-)
Gewijzigd op 25/08/2017 22:12:03 door Mohamed nvt
 
- Ariën -
Beheerder

- Ariën -

25/08/2017 22:10:21
Quote Anchor link
mysqli_affected_rows() expects parameter 1 to be mysqli, null given

Je parameter mist, en dat is de connectie-identifier.
 
Ben van Velzen

Ben van Velzen

25/08/2017 22:10:22
Quote Anchor link
En waar is $dbc voor? Is dat heel toevallig je databaseverbinding? Dan ben ik niet erg verbaasd dat het niet zou werken. Maar pas eens correcte foutafhandeling toe, zoals je in zoveel eerdere topics ook al verteld is.
Gewijzigd op 25/08/2017 22:10:57 door Ben van Velzen
 
Mohamed nvt

Mohamed nvt

25/08/2017 22:18:53
Quote Anchor link
Hallo Ben,

Ja de $dbc is voor de verbinding naar mysql-database.
En kun je dan verklaren waarom de $dbc eerder wel werkte in het script?
Indien nodig kan ik hier het hele script laten zien?
En jah ik pas ook de correcte foutafhandeling, want ik krijg elke keer een mail wanneer iets fout gaat plus dump van het script..
 
- Ariën -
Beheerder

- Ariën -

25/08/2017 22:21:24
Quote Anchor link
Gebruik je geen eigen functie, waarin je $dbc opeens niet meer werkt?
 
Mohamed nvt

Mohamed nvt

25/08/2017 22:24:06
Quote Anchor link
Nee, maar zou het kunnen zijn dat $dbc niet meer werkt, nadat ik PHP script heb afgebroken en later weer open?
 
- Ariën -
Beheerder

- Ariën -

25/08/2017 22:26:40
Quote Anchor link
Nee, want dan zou je tussentijd ook geen variabelen kunnen gebruiken, in losse PHP-blokken.

unset() je die waarde gewoon niet? Of overschrijf je het ergens met een lege waarde?
 
Mohamed nvt

Mohamed nvt

25/08/2017 22:30:30
Quote Anchor link
Nee dat is het allemaal niet heb ik het gevoel. Ik denk nog steeds een typefout, maar nog niets gevonden helaas.

Dit is het hele script, mocht iemand een fout kunnen detecteren:

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
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
?>

<?php
require ('includes/config.inc.php');
include ('includes/header.php');
?>

<?php
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit(); // Quit the script.
    } ?>

<!--de content van elk nieuwe pagina moet in deze sectie beginnen-->
<?php
if (isset($_GET['id']) && !empty($_GET['id']) && is_numeric($_GET['id'])){
        // Need the database connection:
        require(MYSQL);
        // Define the query.
        $query = "SELECT
                            medicines.id,
                            medicines.medicinename,
                            medicines.genericname,
                            medicines.quantity,
                            medicines.expiredate,
                            medicines.sellingprice,
                            medicines.purchaseprice,
                            medicinescompany.companyname,
                            medicinescountry.countryname,
                            medicinestype.medicinetypename,
                            suppliers.suppliername
                FROM medicines
                            LEFT JOIN users ON users.user_id = medicines.userid
                            LEFT JOIN medicines_medicinescompany ON medicines_medicinescompany.medicine_id=medicines.id
                            LEFT JOIN medicinescompany ON medicines_medicinescompany.medicinecompany_id=medicinescompany.id
                            LEFT JOIN medicines_medicinescountry ON medicines_medicinescountry.medicine_id=medicines.id
                            LEFT JOIN medicinescountry ON medicines_medicinescountry.medicinecountry_id=medicinescountry.id
                            LEFT JOIN medicines_suppliers ON medicines_suppliers.medicine_id=medicines.id
                            LEFT JOIN suppliers ON medicines_suppliers.supplier_id=suppliers.id
                            LEFT JOIN medicines_medicinestype ON medicines_medicinestype.medicine_id=medicines.id
                            LEFT JOIN medicinestype ON medicines_medicinestype.medicinetype_id=medicinestype.id
                where
                            medicines.id='"
. mysqli_real_escape_string($dbc, $_GET['id'])."' AND users.user_id = '{$_SESSION['user_id']}'";
        if ($result = mysqli_query($dbc, $query)) { // Run the query.
        $row = mysqli_fetch_array($result);// Retrieve the information.
                    ?>

        <form action="med_expire.php" method="post">
                        <table>
                                <caption>Expire Insight Form</caption>
                                <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']);?>" readonly/></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']); ?>" readonly/></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']); ?>" readonly/></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']); ?>" readonly/></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']); ?>" readonly/></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']); ?>" readonly/></td>
                            </tr>
                            <tr>
                                <td><label for="companyname"><b>CompanyName:</b></label></td>
                                <td><input type="text" name="companyname" id="companyname" value="<?php echo htmlentities($row['companyname']); ?>" readonly/></td>
                            </tr>
                            <tr>
                                <td><label for="countryname"><b>CompanyName:</b></label></td>
                                <td><input type="text" name="countryname" id="countryname" value="<?php echo htmlentities($row['countryname']); ?>" readonly/></td>
                            </tr>
                            <tr>
                                <td><label for="medicinetypename"><b>MedicineTypeName</b></label></td>
                                <td><input type="text" name="medicinetypename" id="medicinetypename" value="<?php echo htmlentities($row['medicinetypename']); ?>" readonly/></td>
                            </tr>
                            <tr>
                                <td><label for="suppliername"><b>SupplierName:</b></label></td>
                                <td><input type="text" name="suppliername" id="suppliername" value="<?php echo htmlentities($row['suppliername']); ?>" readonly/></td>
                            </tr>
                            <tr>
                                <td><input type="submit" name="submit" value="Remove from Expire View"></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.
    
    $problem = FALSE;
    if (!$problem) {

        // Define the query.
        $query = "UPDATE medicines SET verwijderd = 2 WHERE id={$_POST['id']}";
        $r = mysqli_query($dbc, $query); // Execute the query.

        // Report on the result:

        if (mysqli_affected_rows($dbc) == 1) {
            print '<p>This medicine has been removed from the Expire View.</p>';
        }
else {
            echo '<p style="color: red;">Could not update the entry<br></p>';
        }

    }
// No problem!

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

<!--ending header-->
<?php
include ('includes/footer.php');
?>
          
 
- Ariën -
Beheerder

- Ariën -

25/08/2017 22:35:21
Quote Anchor link
Waar maak je $dbc dan eigenlijk aan?
 
Mohamed nvt

Mohamed nvt

25/08/2017 22:38:07
Quote Anchor link
$dbc zit in een ander bestand, die ik via invoeg via includes/config.inc.php.
Vandaar require(mysql)
En zoals je ziet, werkt $dbc wel in het script door gegevens uit DB te halen en anders zou $dbc vanaf het begin niet werken, toch?
En daarom denk ik dat het probleem ergens anders in zit. Initieel dacht ik dat het kolomnaam niet klopt, maar die klopt wel en dezelfde script werkt wel in PHPMyAdmin
Gewijzigd op 25/08/2017 22:40:21 door Mohamed nvt
 
Ben van Velzen

Ben van Velzen

25/08/2017 22:44:01
Quote Anchor link
Onzin. Als $dbc niet bestaat zal je query niet werken, omdat mysqli afhankelijk is van de correcte inhoud van deze variabele. Corrigeer dat dus eerst eens. Het feit dat je conditioneel zit te includen zal hier ongetwijfeld een rol in spelen.
Gewijzigd op 25/08/2017 22:44:40 door Ben van Velzen
 
Mohamed nvt

Mohamed nvt

25/08/2017 22:58:44
Quote Anchor link
Onzin of niet, maar het probleem heb ik nu wel opgelost.
Voordat ik de query uitvoer om de waarde van kolom verwijderd aan te passen, heb ik opnieuw require(MYSQL) toegevoerd en nu werkt de script wel en zonder foutmeldingen.
Dit heb ik eerder niet meegemaakt, maar blijkbaar moest ik opnieuw de connectie met DB toe te voegen, nadat ik PHP script had afgebroken en later opnieuw begon.

Bedankt voor het meedenken.
 
- Ariën -
Beheerder

- Ariën -

25/08/2017 23:00:57
Quote Anchor link
Wel heel erg vreemd dat PHP op dat moment zijn variabele vergeet.
Ik zou het toch eens gaan debuggen met var_dump op elke plek, en net zo lang door gaan tot dat de waarde opeens weg is.
 
- SanThe -

- SanThe -

26/08/2017 00:15:34
Quote Anchor link
Als je met require(MYSQL); $dbc aanmaakt dan moet je die regel op regel 8 zetten lijkt mij en niet tussen een if().
 
Ben van Velzen

Ben van Velzen

26/08/2017 03:21:52
Quote Anchor link
Dat was mijn punt over conditionele includes inderdaad. Als je een databaseverbinding nodig hebt zet je die gewoon bovenaan in je script.
 
Mohamed nvt

Mohamed nvt

26/08/2017 21:50:39
Quote Anchor link
Hallo Santhe & Ben,

Weer wat geleerd. Bedankt voor jullie feedback ;-)
 



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.