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.
Ik neem aan dat je Engels spreekt?

De error luidt:

"mysqli_error() expects exactly 1 argument, 0 given in C:\wamp\www\modellenEdit.php on line 44"

Hier staat precies wat er aan de hand is. De functie mysqli_error() verwacht 1 argument, maar er zijn 0 argumenten doorgegeven. Dat klopt, want in jouw code staat:

or die("Wijzigen is niet gelukt.<br />" . mysqli_error() ... => mysqli_error bevat geen argument

Op deze manier kun je een heleboel errors dus zelf oplossen. Gewoon even goed lezen wat er in de foutmelding staat.
Ik raad sowieso eens aan om je te verdiepen in SQL-injection. Want je query is zo lek als een mandje en een walhalla voor hackers. Ook met goede bedoelingen zal een woord zoals O'Gara Coach zal je query laten vastlopen.
Ik ben niet dom, hoor, Ozzie. Jouw toon vind ik een beetje laatdunkend.
Dat de functie 1 argument verwacht, dat zie ik ook wel. Maar welk argument??? That's the question.

Eén minuut eerder had ik het edit-formulier ingevuld, de update verliep probleemloos, en als ik dezelfde "kaart" (of rij) oproep om te bewerken staan de meeste data er weer, maar sommige zijn weer weg. Daar gaat dus iets fout.
Neem ik een andere rij, ik roep die op om te bewerken (edit) maar laat hem omgewijzigd, dan krijg ik dezelfde foutmelding. Aan het script heb ik echter niets veranderd. Dus ik snap het niet. Where is the problem?

En, Ariën, het heeft ook niet de bedoeling kraaksafe te zijn. Puur hobby-matig. Blijft op localhost, gaat niet internet op. Als zelfs de politie-database niet safe bleek te zijn ... wat verwacht je dan wel niet van een amateur? Meer dan dit was ik niet van plan te maken. Ik verwachtte een andere toon op dit forum dan meteen waarschuwen voor het allerergste. Sorry hoor, dat moest me even van hart.
Guus Wiegerinck op 21/10/2024 15:08:13

Ik ben niet dom, hoor, Ozzie. Jouw toon vind ik een beetje laatdunkend.

We houden het toch wel gezellig hier, hé? :-)

Dat de functie 1 argument verwacht, dat zie ik ook wel. Maar welk argument??? That's the question.

Het argument die mysql_error() verbindt met de connectie. Zie ook [php]mysqli_error[/php] voor verdere uitleg over deze functie.


En, Ariën, het heeft ook niet de bedoeling kraaksafe te zijn. Puur hobby-matig. Blijft op localhost, gaat niet internet op. Als zelfs de politie-database niet safe bleek te zijn ... wat verwacht je dan wel niet van een amateur? Meer dan dit was ik niet van plan te maken. Ik verwachtte een andere toon op dit forum dan meteen waarschuwen voor het allerergste. Sorry hoor, dat moest me even van hart.

Als je goed leest kan je ook met goede bedoelingen je query vast laten lopen door tekens te gebruiken die niet ge-escaped worden. Dus daarom raad ik met klem aan om naar [php]mysqli_real_escape_string[/php] te kijken. Of anders kan je ook verdiepen in 'prepared statements'.
- Ariën - op 21/10/2024 15:12:10


Als je goed leest kan je ook met goede bedoelingen je query vast laten lopen door tekens te gebruiken die niet ge-escaped worden. Dus daarom raad ik met klem aan om naar [php]mysqli_real_escape_string[/php] te kijken. Of anders kan je ook verdiepen in 'prepared statements'.



Dank voor je reactie. Je wijst me op iets wat best zou kunnen gebeuren, en waar ik dus alert op moet zijn.
Geldt dat ook voor tekens die we in een eerder topic over collatie hebben ondervangen??? Zoals woorden als Märklin of vóór of geel/wit? Die destijds, ruim 4 jaar geleden, bij het maken van een nieuwe rij probleemloos uit de database zijn gehaald en met INSERT zijn verzonden, maar nu met UPDATE een probleem zouden kunnen worden / zijn?
Dit heeft niks met collaties te maken, maar met tekens die in queries gebruikt worden, zoals de apostrof en nog een paar.
- Ariën - op 21/10/2024 15:12:10

Het argument die mysql_error() verbindt met de connectie. Zie ook [php]mysqli_error[/php] voor verdere uitleg over deze functie.


Verbinden ... hmm. Komt de verbinding met de database niet tot stand bij het UPDATEn?
Op regel 2 van edit-script staat:
include  'inc\inc_connect_db.php';

In dat inc_connect_db.php staat dan:

$db = mysqli_connect("localhost", "root", "knip", "mijntreinenverzameling");
    $db->set_charset("utf8mb4");
    $db->query("SET NAMES utf8mb4 COLLATE utf8mb4_general_ci");


Op regel 44 van het edit script staat o.a.

	$resultEdit = mysqli_query($db, $queryUpdate) or die("Wijzigen is niet gelukt.<br />" . mysqli_error() . "<br /> Query: " . $queryUpdate);

Die $db, mag ik aannemen of die dezelfde waarde heeft als op regel 2??
Of moet die dan opnieuw gedefinieerd worden?

Dat is inderdaad $db wat je moet toepassen in je mysqli_error( ).
Guus Wiegerinck op 21/10/2024 15:08:13

Ik ben niet dom, hoor, Ozzie. Jouw toon vind ik een beetje laatdunkend.

Zucht, waarom nou weer op deze manier reageren? Je geeft zelf aan dat er een error is waar je, gezien de opmerking die je plaatst, niks van begrijpt. Je plaatst een compleet overbodige lap code. Ik leg je vervolgens netjes uit hoe je zelf een errormelding kunt leren begrijpen, iets waar je de rest van je leven wat aan hebt. Krijg ik zo'n reactie. Erg jammer. Daar laat ik het maar bij.

Ozzie PHP op 21/10/2024 16:24:38

[quote="Guus Wiegerinck op 21/10/2024 15:08:13"]
Ik ben niet dom, hoor, Ozzie. Jouw toon vind ik een beetje laatdunkend.

Zucht, waarom nou weer op deze manier reageren? Je geeft zelf aan dat er een error is waar je, gezien de opmerking die je plaatst, niks van begrijpt. Je plaatst een compleet overbodige lap code. Ik leg je vervolgens netjes uit hoe je zelf een errormelding kunt leren begrijpen, iets waar je de rest van je leven wat aan hebt. Krijg ik zo'n reactie. Erg jammer. Daar laat ik het maar bij.
[/quote]

De vraag of ik Engels ken, bijvoorbeeld. Dat vond ik laatdunkend.
En waar ik niks van begrijp ... Ik was misschien niet helder met wat ik bedoelde - ik begreep best dat er een argument miste, maar wélk argument? Wát er ineens fout zou kunnen zijn aan mijn script? Het scripte werkte al jaren goed, en nu ineens ... dát begreep ik niet.
Maar goed, zand erover. Tekst en gevoelens, dat is soms lastig.

Reageren