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.
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:
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.
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?
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.)
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!