Login Retreive lost passwordRegister
Search

Forum Index / NL Forum / setValue textfield in viewmode

[ This topic is solved ]

  Cees van Beek 31 August 09 / 23:06  
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:
$dimValue = getDBValue('em_unit', $form->getValue('unit'), 'dim');
$form->setValue('dim', $dimValue, true);
$form->textField('Dimensie', 'dim');
$form->setFieldViewMode('dim', true)

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.

Wat doe ik fout??

Bij voorbaat dank,
Cees van Beek

  Johan Wiegel (Admin) 01 September 09 / 08:16  
Cees,

even iets meer info aub.

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?

  Cees van Beek 01 September 09 / 08:28  
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);

if (isset(
$var_id)) {
    
$id $var_id;
} else {
    unset(
$id);
}

if (isset(
$id)) $form->_action .= '&id='.$id;

$form->hiddenField('object');
$form->setValue('object'$obj_idtrue);
$form->initFirstColumn();

$fieldmask="<div class=form_field>".
            
"%title%&nbsp;%help%<br />\n".
            
'<span class="field_data">%field%&nbsp;&nbsp;<br />'."\n".
            
'%error% </span><br />'."\n".
            
"</div>\n";

$form->setMask('<div>'.$fieldmask.'</div>');
$form->textField'Naam energiestroom *''name'FH_STRING3050);
//$form -> setHelpText("name",'Deze tekst wordt gebruikt in het navigatiemenu en bij rapportages.');

$form->textField'Code *''code'FH_STRING2020);
//$form -> setHelpText("code",'Deze tekst wordt gebruikt als identificatie bij berekeningen. Binnen een gebouw mag een code maar &eacute;&eacute;n keer gebruikt worden.');

$form->setMask('<div style="float:left; ">'.$fieldmask."\n</div>\n");

$units getDBLijst('em_unit');
$form ->selectField("Eenheid""unit"$units"gtNul"true);

//if (!$form->isPosted()) 
$dimValue getDBValue('em_unit'$form->getValue('unit'), 'dim');
$form->setValue('dim'$dimValuetrue);
$form->textField('Dimensie''dim');
$form->setFieldViewMode('dim'true);

$form->addHTML'<div style="clear:left;"></div>');

$form->setMask('<div>'.$fieldmask.'</div>');
$form->textField('Aantal decimalen *''decimals'FH_INTEGER16null'class="getal"');

$form->closeFirstColumn(); 

$form->secondColumn();

$form -> flush(); 

?>


Vriendelijke groet van Cees

  Johan Wiegel (Admin) 01 September 09 / 10:08  
Changed at 01 September 09 / 10:09
onderstaande werkt bij mij gewoon, kun je zoiets simpels ook even proberen?
<?php
function doRun$id$aData )
{
    
print_r$aData );
}

include(
"includes/FH3/class.dbFormHandler.php");

$form = new dbFormHandler('addCustomer');
$form->dbInfo'database''tbl_fhtest''mysql' );
$form->dbConnect'localhost''username''password' );

$dimValue 'test';
$form->setValue('dim'$dimValuetrue);
$form->textField('Titel''titel');
$form->textField('Dimensie''dim');
$form->setFieldViewMode('dim'true);
$form->OnSaved'doRun' );
$form->submitButton("Opslaan");
$form->Flush();
?>

  Cees van Beek 01 September 09 / 16:16  
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:
<?php
function doRun$id$aData )
{
    
print_r$aData );
    return 
false;
}

include(
"FH3/class.dbFormHandler.php");

$form = new dbFormHandler('addCustomer');
$form->dbInfo'energie_manager''em_var''mysql' );
$form->dbConnect'localhost''user''password' );

$dimValue 'test';
$form->hiddenField('object'13);
$form->hiddenField('unit'2);
$form->setValue('dim'$dimValuetrue);
$form->textField('Code''code');
$form->textField('Naam''name');
$form->textField('Dimensie''dim');
$form->setFieldViewMode('dim'true);
$form->OnSaved'doRun' );
$form->submitButton("Opslaan");
$form->Flush();
?>

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     :     
        

Weet jij de oorzaak?

Groeten van Cees

  Johan Wiegel (Admin) 01 September 09 / 16:21  
Nee de oorzaak weet ik niet, bij mij werkt het nl naar behoren ook in edit mode.

Probeer eens gewoon letterlijk wat ik heb gepost op een andere tabel.
welke versie FH gebruik je?

  Cees van Beek 01 September 09 / 17:16  
Changed at 01 September 09 / 23:28
Johan,

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).

Misschien nog andere suggesties?

Groeten van Cees

  Cees van Beek 01 September 09 / 23:34  
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?

Groeten van Cees

  Johan Wiegel (Admin) 02 September 09 / 07:42  
Je kunt via header location terug gaan naar het formulier met dezelfde regel.

  Cees van Beek 02 September 09 / 09:12  
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?

  Johan Wiegel (Admin) 02 September 09 / 09:23  
Cees,

ik denk dat het nooit goed kan werken, FH vereist dat je terug komt in formhandler na een post, ik zie niet hoe je dit op zou moeten lossen.

Wij zijn overigens wel erg benieuwd naar je ajax_dbFormhandler class.

  Cees van Beek 02 September 09 / 14:15  
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.

Groeten van Cees

  Johan Wiegel (Admin) 02 September 09 / 14:23  
Cees,

we zijn als je gereed bent erg benieuwd naar wat je gemaakt hebt en houdens ons aanbevolen.

  Top


powered by PHP-GLOBE   © 2004 - 2012 FormHandler. All rights reserved.   -   Open source license