Ik wil een update uitvoeren maar dat lukt - ineens - niet meer. Een update een minuut eerder lukte wel en toen niet meer. Ik krijg de foutmelding
"mysqli_error() expects exactly 1 argument, 0 given in C:\wamp\www\modellenEdit.php on line 44"

Eerst dacht ik dat ik verboden tekens wilde plaatsen zoals / of dat ik tekst wilde plaatsen in een kolom voor alleen cijfers, maar dat bleek niet het geval te zijn.

Hieronder een deel van het script regel 6 t/m 44.

 "{ //query samenstellen
	$queryUpdate =
        "UPDATE
            modellen
        SET
            merk = '".$_POST['merk']."',
            artikelnummer = '".$_POST['artikel']."',
            maatschappij = '".$_POST['maatschappij']."',
            soort = '".$_POST['soort']."',
            bedrijf = '".$_POST['bedrijf']."',
            reeks = '".$_POST['reeks']."',
            klasse = '".$_POST['klasse']."',
            asindeling = '".$_POST['asindeling']."',
            lengte = '".$_POST['lengte']."',
            interieur = '".$_POST['interieur']."',
            verlichting = '".$_POST['verlichting']."',
            tijdperk = '".$_POST['tijdperk']."',
            aantal = '".$_POST['aantal']."',
            railsysteem = '".$_POST['railsysteem']."',
            stroomsoort = '".$_POST['stroomsoort']."',
            wielmerk = '".$_POST['wielmerk']."',
            wieldiameter = '".$_POST['wieldiameter']."',
            wielaslengte = '".$_POST['wielaslengte']."',
            motor = '".$_POST['motor']."',
            gemotoriseerd = '".$_POST['gemotoriseerd']."',
            decoder = '".$_POST['decoder']."',
            protocol = '".$_POST['protocol']."',
            adres = '".$_POST['adres']."',
            consist_adres = '".$_POST['consistadres']."',
            bijzonderheden = '".$_POST['bijzonder']."',
            extra_informatie = '".$_POST['extra']."',
            modelinfo = '".$_POST['modelinfo']."',
            categorie = '".$_POST['categorie']."',
            afbeelding = '".$_POST['afbeelding']."',
            OVP = '".$_POST['ovp']."',
            start_set = '".$_POST['set']."'
        WHERE
            id=".$_POST['id'];
	$resultEdit = mysqli_query($db, $queryUpdate) or die("Wijzigen is niet gelukt.<br />" . mysqli_error() . "<br /> Query: " . $queryUpdate);


Is de variabele $queryUpdate leeg? Is de syntaxis van mysqli_query verkeerd?
$db is niet leeg, daar kreeg ik geen error van.
Ja, dat ging prima. De oranje waarschuwingen en errors waren weg. Dank je wel.

Blijft nog wel werk aan de winkel. Update lukt soms nog niet omdat sommige waardes niet passen bij de collatie van betreffende veld.
Guus Wiegerinck op 22/10/2024 15:44:33

Ja, dat ging prima. De oranje waarschuwingen en errors waren weg. Dank je wel.

Graag gedaan.
Guus Wiegerinck op 22/10/2024 15:44:33

Blijft nog wel werk aan de winkel. Update lukt soms nog niet omdat sommige waardes niet passen bij de collatie van betreffende veld.

Lukt de update-query zelf niet, of wordt de data verkeerd geüpdatet?
Vanmorgen lag ik me af te vragen wat die mysqli_error($db)[/db] nou eigenlijk doet. Hij staat er immers nadat de query is uitgevoerd. En ineens had ik een helder moment: Aha, die functie geeft aan waar de kink in de kabel zit. Zoals "Wijzigen is niet gelukt.
Incorrect integer value: '' for column 'start_set' at row 1
". Onder PHP5 kreeg ik dat soort diagnoses ook, maar zonder voorafgaand oranje error/waarschuwing. In mijn herinnering waren die echter niet zó to the point, je moest het verder zelf uitzoeken waar het probleem zat. Nu begreep ik het. :) :)

Je vraagt of de update zélf niet lukt. Nee, ik word voorlopig getracteerd op enkele foutjes in het script, die ik vervolgens stuk voor stuk mag repareren.
Eén ervan is deze: Ik wil de waarde NULL toekennen aan een veld. Dat veld mag leeg zijn,standaardwaarde is NULL maar toch meldt mysqli_error($db) dat er sprake is van een incorrect integer value.

Concreet gaat het hier om de vraag of een bepaalde modellocomotief deel uitmaakt van een startset. Er zijn vier startsets, maar deze loc maakt van geen enkele deel uit. Dus de waarde die ik moet invullen luidt dus: "Geen van die vier". ofwel: NULL.

Code in mijn script is als volgt:

if (empty ($set_id)) {$Set[] = "<option SELECTED value=\"\">n.v.t.</option>\n";   }

De paginabron laat het volgende resultaat zien van deze regel:

<select name="set"><option SELECTED value="">n.v.t.</option>

Toelichting.
Bij het openen van de edit-pagina is $set_id leeg, want toen ik de loc invoerde heb ik het veld 'startset' leeg gelaten. Ik wil dat zo houden, en ga dus verder met wijzigen en niet-wijzigen van de data. Maar dan lukt de UPDATE niet.

Blijkbaar is NULL niet toegestaan. Ik vind op https://www.w3schools.com/mysql/mysql_datatypes.asp: "BOOL Zero is considered as false, nonzero values are considered as true." Hoe los ik dit op?

Eén mogelijkheid is: voeg een vijfde startset toe: "geen" of "neen" geheten, met id=5. Maar misschien zijn er nog leukere, elegantere oplossingen te bedenken.
Hoe voeg je NULL toe aan de database? Kun je de code tonen?
Ozzie PHP op 23/10/2024 17:09:05

Hoe voeg je NULL toe aan de database? Kun je de code tonen?


Zie de 1e code:
 if (empty ($set_id)) {$Set[] = "<option SELECTED value=\"\">n.v.t.</option>\n";   }


Niet dat dat lukt ... dan was dat geen probleem ...
Het veld is leeg ofwel niks ingevuld bij de INSERT. En wil het leeg houden bij een update. Dat is de vraag.
De regel code die jij toont, voegt niet iets toe aan de database. Dat heeft te maken met het tonen van een drop down box.

Ik vermoed dat je een lege string probeert toe te voegen aan het databaseveld. In plaats daarvan moet je NULL toevoegen. (Een lege string is een ander datatype dan NULL.)
[/quote]
Zeker, dat is een drop down box. Maar als je dan 'submit', dan is de waarde die verstuurd wordt "" ofwel "niets" ofwel NULL of een lege string


Ik vermoed dat je een lege string probeert toe te voegen aan het databaseveld. In plaats daarvan moet je NULL toevoegen. (Een lege string is een ander datatype dan NULL.)


Ik heb het geprobeerd met NULL als waarde.

<option SELECTED value=\"\NULL\">n.v.t.</option>\n

Werkt niet. NULL is geen correcte integer. Misschien moet ik het anders schrijven, zó kan het ook string zijn.

Ik had nog een ander idee gekregen: het type van het veld veranderen van INTEGER in VARCHAR.
En dat werkt. De UPDATE is geslaagd.
Nee, dan wordt het als waarschijnlijk als string behandeld.
Het ligt eraan hoe je query in elkaar steekt. Daar zien we helaas niks van.

Maar dan komt het neer op zo'n opzet.


<?php
// Variabele die je wilt gebruiken in de query
$variabele = ''; // Dit kan een lege string zijn

// Controleer of de variabele leeg is, zo ja, gebruik NULL
$variabele_sql = empty($variabele) ? "NULL" : "'" . mysqli_real_escape_string($variabele) . "'";

// Bouw de query
$query = "INSERT INTO tabelnaam (kolomnaam) VALUES ($variabele_sql)";

// Voer de query uit
if (mysqli_query($query) === TRUE) {
    echo "Gegevens succesvol ingevoegd";
} else {
    echo "Fout: " . $mysqli->error;
}
?>


Je kan van een INT veld wel een VARCHAR maken. Maar dan kan je er niet meer handig op sorteren, omdat het als een string (text) wordt behandeld. Ik zou het niet aanraden!

Reageren