Changed at 31 August 09 / 23:08
Hallo,
Ik heb een probleem als ik setValue gebruik van een textfield. Omdat ik de waarde opzoek in een tabel kan de gebruiker dit textveld niet veranderen en daarom zet ik dit veld in de viewmode.
Bij het laten zien van de data (als ik ze ophaal uit de database) gaat alles goed. Op het moment dat ik iets in het record verander en dit opsla krijg ik een waarschuwing:
"Warning (8): class.Field.php at 470 Undefined index: dim" en het betreffende veld blijft leeg. De naam van het veld is "dim"
Mijn code:
Wanneer ik de laatste regel weglaat (het veld staat dan niet meer in viewmode) gaat alles goed, maar dat wil ik niet wat dat geeft de gebruiker de suggestie dat hij iets kan veranderen.
gebruik je dbFormHandler, op een tabel waar dit veld op deze regel al een waarde heeft?
Kun je misschien de rest van het formulier posten, welke versie van FH gebruik je?
Changed at 01 September 09 / 08:29
Johan,
Ik gebruik inderdaad dbFormhandler of beter gezegd ik heb er een nieuw type van afgeleid dat overweg kan met het posten van het form en terugsturen van het form via AJAX. Dit gebruik ik inmiddels bij een heleboel andere formulieren en dat gaat zonder problemen.
Er is verder geen ander veld in deze tabel met de naam "dim".
Het hele php-file voor dit formulier hieronder opgenomen:
<?php
// create a new form
$form = new ajax_dbFormHandler("em_var", "main_form", './ajaxresponse.php?file='.$filename);
$form->setMask('<div>'.$fieldmask.'</div>');
$form->textField( 'Naam energiestroom *', 'name', FH_STRING, 30, 50);
//$form -> setHelpText("name",'Deze tekst wordt gebruikt in het navigatiemenu en bij rapportages.');
$form->textField( 'Code *', 'code', FH_STRING, 20, 20);
//$form -> setHelpText("code",'Deze tekst wordt gebruikt als identificatie bij berekeningen. Binnen een gebouw mag een code maar één keer gebruikt worden.');
Haalo Johan,
Ik heb het met jouw bestand na kunnen doen.
Ik heb wel op onderdelen jouw voorbeeld wat uitgebreid/aangepast om het goed werkend te krijgen:
het gaat goed als ik een nieuw record toevoeg, maar als ik dan in de adresbalk een bestaand record oproep door het id als get-parameter mee te geven: http://localhost/energie_manager/test.php?id=160 en ik druk dan op "opslaan" dan krijg ik weer dezelfde foutmelding:
Array ( [object] => 13 [unit] => 2 [code] => test1 [name] => Test2 [dim] => test ) Warning (8): class.Field.php at 470 Undefined index: dim
Code :
Naam :
Dimensie :
Ik heb het nog een keer op de user tabel uitgeprobeerd (deze heeft geen foreign keys naar andere tabellen). Helaas zelfde resultaat: gaat wel goed in insert-mode en gaat fout na opslaan vanuit edit-mode.
Ik gebruik de laatste versie:
FH3 v1.2.9, update van 25 aug. j.l.
Ik gebruik wel InnoDB als engine in MySQL (om te kunnen werken met relaties tussen tabellen).
Johan,
Ik heb nog een paar testen uitgevoerd:
Ik heb een nieuwe tabel aangemaakt met alleen de velden "id" en "titel" en met MyIsam als engine. Ik jouw code nu helemaal overgenomen. Als ik in de function "DoRun" "return false;" weglaat gaat alles goed, maar de fout komt weer in beeld als ik die regel weer toevoeg. Maar die regel wil ik ook, want ik wil het opgeslagen record default laten zien.
Zijn er andere manier dan "return false;" om het betreffende record te laten zien?
Dat gaat helaas niet werken met een formulier dat via AJAX wordt gepost en opgehaald.
Ik begrijp dat ik in deze situatie een andere work-around moet zien te verzinnen bijv met de functie addHTML?
Hallo Johan,
Ik heb het inmiddels aan de praat, zoals ik al had gemeld m.b.v. een addHTML. Ik haal het betreffende tekstveld (dimensie) op (uit de tabel waar ik ook de id en de naam uit ophaal voor het selectveld "unit" en dat laat ik zien in een stuk HTML-code via addHTML.
De class ajax_dbFormHandler is afgeleid van dbFormHandler daarin heb ik de volgende uitbreidingen aangebracht (nog in beta en nog niet uitontwikkeld, werkt al wel):
- knoppenbalken bovenaan (met toevoegen, verwijderen, bladeren vooruit en achteruit,
- ondersteuning van master-detail schermen met knoppen voor wijzigen en opslaan per regel;
- alle commando's gaan als post-parameter mee met de AJAX-call (via jQuery) en die zorgt weer dat de html die terugkomt in de goede div terechtkomt.
Ik heb hiervoor gekozen, omdat:
- het veel sneller werkt dan iedere keer weer die hele pagina opbouwen
- ik nu ook meerdere forms op een pagina kan hebben.
Als jullie willen kan ik dit t.z.t. (als alles goed getest is en de code opgeschoond van allerlei uitgecommentarieerde testregels) opsturen zodat( als jullie het goed genoeg vinden) kunnen opnemen in jullie bibliotheek.