View previous topic :: View next topic |
Author |
Message |
ricklach Smarty Regular
Joined: 27 Aug 2004 Posts: 39
|
Posted: Fri Aug 27, 2004 5:18 am Post subject: SmartyValidate: [validate plugin] form 'default' is not ... |
|
|
When trying SmartyValidate I get the following notice: Notice: SmartyValidate: [validate plugin] form 'default' is not registered. in c:\Smarty\libs\plugins\function.validate.php on line 35
What does this error mean and how can I fix it? |
|
Back to top |
|
mohrt Administrator
Joined: 16 Apr 2003 Posts: 7368 Location: Lincoln Nebraska, USA
|
Posted: Fri Aug 27, 2004 2:42 pm Post subject: |
|
|
make sure you call:
session_start();
SmartyValidate::connect($smarty);
In your PHP application before displaying the template. |
|
Back to top |
|
ricklach Smarty Regular
Joined: 27 Aug 2004 Posts: 39
|
Posted: Fri Aug 27, 2004 3:32 pm Post subject: |
|
|
Yes, I think I have done that. I have a multi-call form and I have put the session_start() at the beginning of the form and this makes me wonder now if that is not the problem. I am thinking that each time I submit the form a new session would start and then that would give me the error. Here is a snippet of the code that I am trying to validate:
$db = db_connect();
if ( DB::isError( $db ) ) {
error_message( $db->getMessage() );
}
$smarty =& new Smarty_gpbc;
SmartyValidate::connect($smarty, true); //initialize SmartyValidate
SmartyValidate::register_form('addDonation.php');
$smarty->clear_cache( "addDonation.tpl" );
if(empty($_POST)) {
$smarty->display( "addDonation.tpl" );
} else {
// validate after a POST
if(SmartyValidate::is_valid($_POST, 'addDonation.php')) {
// no errors, done with SmartyValidate
SmartyValidate::disconnect();
// add the data to the tables
// add some code here to display a success message
$success = "The record was successfully added to the database.";
//echo $success;
$smarty->assign( 'success', $success );
$smarty->assign( 'donation_type', true );
$smarty->display( "success.tpl" );
} else {
// error, redraw the form
$smarty->assign($_POST);
$smarty->assign( 'show_add', true );
$smarty->display('addDonation.tpl');
}
}
Some of the additional SmartyValidate code was added while experimenting.
Rick |
|
Back to top |
|
mohrt Administrator
Joined: 16 Apr 2003 Posts: 7368 Location: Lincoln Nebraska, USA
|
Posted: Fri Aug 27, 2004 3:39 pm Post subject: |
|
|
Did you try connect() without the second parameter "true"? Is session_start() in your script before everything else? |
|
Back to top |
|
ricklach Smarty Regular
Joined: 27 Aug 2004 Posts: 39
|
Posted: Fri Aug 27, 2004 4:04 pm Post subject: |
|
|
Yes, I did try it without "true" first. And, session_start is at the very top of the page as the very first item after the <?php tag.
Rick |
|
Back to top |
|
mohrt Administrator
Joined: 16 Apr 2003 Posts: 7368 Location: Lincoln Nebraska, USA
|
Posted: Fri Aug 27, 2004 5:05 pm Post subject: |
|
|
In your validate tags, you must supply the form name that you registered.
{validate form="addDonation.php" ...}
I'm not sure why you named it with a .php extention, that isn't necessary. |
|
Back to top |
|
ricklach Smarty Regular
Joined: 27 Aug 2004 Posts: 39
|
Posted: Fri Aug 27, 2004 8:11 pm Post subject: |
|
|
OK, I took out the php extension, added the necessary code to the template and now I am getting this error: Notice: SmartyValidate: [validate plugin] form 'addDonation' is not registered. Here is the code where I try to register the form:
$smarty =& new Smarty_gpbc;
SmartyValidate::connect($smarty, true); //initialize SmartyValidate
SmartyValidate::register_form('addDonation', true);
$smarty->clear_cache( "addDonation.tpl" ); |
|
Back to top |
|
mohrt Administrator
Joined: 16 Apr 2003 Posts: 7368 Location: Lincoln Nebraska, USA
|
Posted: Fri Aug 27, 2004 8:34 pm Post subject: |
|
|
Your addDonation form registration is getting reset every invocation with that "true" parameter. Get rid of the "true" parameters, clear out the session (run disconnect() once), then try again. |
|
Back to top |
|
ricklach Smarty Regular
Joined: 27 Aug 2004 Posts: 39
|
Posted: Sat Aug 28, 2004 3:02 am Post subject: |
|
|
Ok, I did what you suggested and I still get the same error message: Notice: SmartyValidate: [validate plugin] form 'addDonation' is not registered. in c:\Smarty\libs\plugins\function.validate.php on line 35
Any other suggestions? BTW I tried the example and it does not seem to work as I would expect - however, I do not get the error message. For example, when you do a SmartyValidate::is_valid($_POST) does it mean that all the name/values in the POST array have to be filled-in because it seems that when I run the test form it starts out with all the validate info in the form, even before I submit the form.
Rick |
|
Back to top |
|
mohrt Administrator
Joined: 16 Apr 2003 Posts: 7368 Location: Lincoln Nebraska, USA
|
Posted: Sat Aug 28, 2004 1:29 pm Post subject: |
|
|
what does your session data look like?
[php:1:6ff7cbe6cd]print_r($_SESSION['SmartyValidate']);[/php:1:6ff7cbe6cd] |
|
Back to top |
|
ricklach Smarty Regular
Joined: 27 Aug 2004 Posts: 39
|
Posted: Sat Aug 28, 2004 5:36 pm Post subject: |
|
|
Here is the session data:
Array ( [default] => Array ( [registered_funcs] => Array ( [criteria] => Array ( ) [transform] => Array ( ) ) [validators] => Array ( ) [is_error] => ) [addDonation] => Array ( [registered_funcs] => Array ( [criteria] => Array ( ) [transform] => Array ( ) ) [validators] => Array ( ) [is_error] => ) )
There is nothing there. Is it critical where the code snippet for the session dump is placed? |
|
Back to top |
|
mohrt Administrator
Joined: 16 Apr 2003 Posts: 7368 Location: Lincoln Nebraska, USA
|
Posted: Sat Aug 28, 2004 6:22 pm Post subject: |
|
|
Do you have any validators on your form? they should get populated into the session data on the first drawing of the form. |
|
Back to top |
|
ricklach Smarty Regular
Joined: 27 Aug 2004 Posts: 39
|
Posted: Mon Aug 30, 2004 3:14 am Post subject: |
|
|
Monte,
I have a validator in the template part of the form. This is a multi-part form:
function donation_type
first part of form with submit to show_add
function show_add
display the main form with the validator information
submit to the database
function do_add
add the stuff to the database after it is validated
The template follows the same logic. The start_session is on the very first line of the of the file that contains the three steps. |
|
Back to top |
|
mohrt Administrator
Joined: 16 Apr 2003 Posts: 7368 Location: Lincoln Nebraska, USA
|
Posted: Mon Aug 30, 2004 3:14 pm Post subject: |
|
|
When you register the form, the empty form container is created in the $_SESSION (which it looks like yours did get created.) Then when you draw the form for the first time, the validator information should get written to the $_SESSION data. I don't see that in your session data.
So example:
[php:1:37e020c5ca]session_start();
$smarty =& new Smarty;
SmartyValidate::connect($smarty);
SmartyValidate::register_form('myform');
$smarty->display('myform.tpl');[/php:1:37e020c5ca]
myform.tpl:
Code: | {validate form="myform" criteria="notEmpty" field="name"}
<form action="{$SCRIPT_NAME}">
<input type="text" name="name">
</form> |
After the script is ran and the form is drawn, the "notEmpty" criteria should be in the $_SESSION data for 'myform'. |
|
Back to top |
|
kills Smarty Elite
Joined: 28 May 2004 Posts: 493
|
Posted: Tue Aug 31, 2004 6:03 pm Post subject: |
|
|
hm i got a similar problem and dont know y?
PHP:
[php:1:7ffd2032a9]
.
.
/* SmartyValidate Objekt initialisieren */
SmartyValidate::connect( $oTpl);
if( !empty( $_POST)) {
// validate after a POST
if( SmartyValidate::is_valid( $_POST)) {
// no errors, done with SmartyValidate
SmartyValidate::disconnect();
$iNewsId = isset( $_GET["id_news"]) ? $_GET["id_news"] : null;
$oNews = new news( $iNewsId);
$oNews->setHeaderDetails( $_POST["id_newscat"], user::getUserId(),$_POST["title"], $_POST["intro"]);
} else {
// error, redraw the form
$oTpl->assign( $_POST);
}
}
[/php:1:7ffd2032a9]
TPL:
Code: |
<form action="{ $smarty.server.PHP_SELF }?{ $smarty.server.QUERY_STRING}" method="post">
<table>
<colgroup>
<col width="70px"/>
<col width="450px"/>
</colgroup>
<tr>
<td>
Kategorie
</td>
<td>
{ validate field="id_newscat" criteria="notEmpty" message="Die Kategorie des Artikels fehlt!"|make_error }
<select class="max" name="id_newscat">
{ html_options options=$aNewsCats selected=$id_newscat }
</select>
</td>
</tr>
<tr>
<td>
Titel
</td>
<td>
{ validate field="title" criteria="notEmpty" message="Der Titel des Artikels fehlt!"|make_error }
<input type="text" style="width:100%" class="text" name="title" value="{ $title }" maxlength="255"/>
</td>
</tr>
<tr>
<td>
Einleitung
</td>
<td>
{ validate field="intro" criteria="notEmpty" message="Die Einleitung des Artikels fehlt!"|make_error }
<textarea style="width:100%" class="text" name="intro">{ $intro }</textarea>
</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2">
<input type="submit" value="Speichern" />
</td>
</tr>
</table>
</form>
|
if i lose one filed the error which should occure occures.
But when all fields where filled and the form will be submitted this error is printed:
Notice: SmartyValidate: [validate plugin] form 'default' is not registered. in E:\wwwroot\html\st-carstyling\bin\classes\Smarty-2.6.3\plugins\function.validate.php on line 35 |
|
Back to top |
|
|