Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Eduiagami

[Resolvido] validacao de formularios

Recommended Posts

Olá pessoal

sou novo com o cakePHP

e estou tentando validar um formulario

mas nao estou conseguindo, ao inves de validar ele tenta jogar direto para banco

alguem poderia colocar um passo a posso de como validar com cakephp

 

muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhe este exemplo:

var $validate = array(
	'titulo' => array(
		array(
 			'rule' => array('minLength' , 5),
			'message' => 'Este campo deve ter no mínimo 5 caracteres.'
		)
	),
	'texto' => array(
		array(
			'rule' => 'notEmpty',
			'message' => 'Este campo não pode ficar vazio.'
		)
	)
 );

Se você está confuso com a hierarquia do array, você pode suar no beforeValidate():

 

function beforeValidate(){
 $validate = &$this->validate;

 $validate['titulo'][0]['rule'] = array('minLength' , 5);
 $validate['titulo'][0]['message'] = 'Este campo deve ter no mínimo 5 caracteres.';


 $validate['texto'][0]['rule'] = 'notEmpty';
 $validate['texto'][0]['message'] = 'Este campo não pode ficar vazio.';
 }

Lembre-se que você deve inserir isso no Model que você quer que as informações sejam validadas.

Link util:

http://book.cakephp....Data-Validation

Compartilhar este post


Link para o post
Compartilhar em outros sites

OLá lucas

disculpa a demora, tb trabalho com manutenção de micros =D

 

Pow eu até já coloquei issu ai, mas parece que nao está funcionando, não exibe mensagem alguma.

sabe oq pode ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está colocando no Model?

Me mostre seu código.

 

 

Model

 

var $validate = array(
        'titulo' => array(
            'alphaNumeric' => array(
                'rule' => 'alphaNumeric',
                'required' => true,
                'message' => 'Letras e números somente'
                ),
            'between' => array(
                'rule' => array('between', 5, 60),
            'message' => 'Entre 5 e 60 caracteres'
            ),
			'isUnique' => array(
			'rule'=>'isUnique',
			'message'=>'Este titulo já esta cadastrado a um artigo'
			),
			'notEmpty'=>array('rule'=>'notEmpty','message'=>'Este campo não pode ser deixado em branco!')
        ),
		'autor' =>array(
		'alphanumeric'=>array(
		'rule'=>'alphaNumeric',
		'required'=>false,
		'message'=>'Letras e numeros somente'
			)
		),
		'autor_email'=>'email',
		'texto'=> array('rule'=>'notEmpty','message'=>'Este campo não pode ser deixado em branco!')
		
        
    );

 

Ai esta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja que ele não está bem estruturado, preste bem atenção neste:

var $validate = array(
        'titulo' => array(
                array(
                        'rule' => array('minLength' , 5),
                        'message' => 'Este campo deve ter no mínimo 5 caracteres.'
                )
        ),
        'texto' => array(
                array(
                        'rule' => 'notEmpty',
                        'message' => 'Este campo não pode ficar vazio.'
                )
        )
 );

Um atributo $validate que é um array. O primeiro item desse array é "titulo" que também tem como valor um array. E dentro deste outro array (o do "titulo") faz uma regra, ou seja: cada array dentro DO ARRAY de titulo representa uma regra.

 

$validate = array(
       'item' => array(array('regra1'), array('regra2'), array('regraN')), // este é exemplo
       'item2' => array(array('rule'=>'isUnique'), array('rule' => 'notEmpty', 'message' => 'Não pode ser vazio'))
       ....
     );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

coloquei igual você colocou ai em cima mas ele nao valida, ele ja tenta logo cadastrar e da erro.

nao sei oq pode ser.

e você?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste seu Controller, Model, View e a estrutura da base de dados. (Só as partes necessárias).

 

ele ja tenta logo cadastrar e da erro

Que erro?

 

MODEL-----
class Conteudo extends AppModel{
	var $name = "Conteudo";
	var $belongsTo = array('Sessao','Cat');
	//var $validate = array(
	//'titulo'=>'notEmpty'
	//);
	var $validate = array(
				'titulo' => array(   
				         array( 
						 		'rule' => array('minLength' , 5),
								'message' => 'Este campo deve ter no mínimo 5 caracteres.'                			  )
				),        
				'texto' => array(            
					    array(                       
								 'rule' => 'notEmpty',                        
								 'message' => 'Este campo não pode ficar vazio.'                
							 )        
				) 
);

	
	

}


CONTROLLER----
function admin_cadastrar(){
		
		if(!empty($this->data)){
				if($this->Conteudo->save($this->data)){
					$this->Session->setflash('<span class=erro_message>Conteudo (artigo) cadastrado com sucesso!</span>');
					$this->redirect(array('controller'=>'conteudos','action'=>'index','admin'=>true));
				
				}else{
					$this->Session->setflash('<span class=erro_message>Falha ao cadastrar conteudo (artigo), volte e tente novamente!</span>');
					$this->redirect(array('controller'=>'conteudos','action'=>'index','admin'=>true));
					
				}
		}else{
		 $this->set('sessoes',$this->Sessao->find('list',array('fields'=>array('Sessao.id','Sessao.nome'))));
		}
		
		
		
}



VIEW

<? echo $javascript->link('prototype');?>

<script language="JavaScript" type="text/javascript" src="<?php echo $html->url('/js/ckeditor/ckeditor.js'); ?>"></script>


<script id="headscript" type="text/javascript">
	//<![CDATA[

	document.write( '<script type="text/javascript" src="<?=$html->url('/');?>js/ckeditor/lang/_languages.js"><\/script>' );

	//]]>
	</script>
	
<h1 class="titulo">Conteudos (Artigos) - Cadastro</h1>
<p>Cadastre artigos do  site</p>
<div class="formulario">
<?

//formulario

echo $form->create('Conteudo',array('action'=>'cadastrar'));

echo $form->input('sessao_id',array('type'=>'select','label'=>'Sessão','options'=>$sessoes,'selected'=>''));
echo $form->input('cat_id',array('type'=>'select','label'=>'Categoria'));
 //ajax select
 $options = array( 'url' => array('controller' => 'cats' ,'action' => 'buscaCats','admin'=>true),'frequency'=>0.1, 'update' => 'ConteudoCatId');
echo $ajax->observeField('ConteudoSessaoId', $options);

//autor
echo $form->input('autor',array('type'=>'text','label'=>'Autor'));
//email autor
echo $form->input('autor_email',array('type'=>'text','label'=>'E-mail autor'));
//fonte
echo $form->input('fonte',array('type'=>'text','label'=>'Fonte'));
//destaque
echo $form->input('destaque',array('type'=>'select','label'=>'Destaque','options'=>array('sim'=>'sim','nao'=>'nao')));
//Ativo
echo $form->input('ativo',array('type'=>'select','label'=>'Ativo','options'=>array('sim'=>'sim','nao'=>'nao')));
//titulo
echo $form->input('titulo',array('type'=>'text','label'=>'Titulo','size'=>'60'));
//subtitulo
echo $form->input('subtitulo',array('type'=>'textarea','label'=>'Subtitulo','rows'=>'5','cols'=>'60'));

 ?>

 
<br />
<br />

 <label for="ConteudoTexto">Selecione o idioma (Total de :<span id="count"> </span> Idiomas!): </label><select disabled="disabled" id="languages" onchange="createEditor( this.value );">
<script type="text/javascript">
//<![CDATA[

// Pega linguagem da lista de linguens do arquivo _languages.js .
for ( var i = 0 ; i < window.CKEDITOR_LANGS.length ; i++ )
{
document.write(
'<option value="' + window.CKEDITOR_LANGS[i].code + '">' +
window.CKEDITOR_LANGS[i].name +
'</option>' );
}

//]]>
</script>
</select>
				
<textarea cols="200"  id="ConteudoTexto" name="data[Conteudo][texto]" rows="10">

</textarea>
				<script type="text/javascript">
				//<![CDATA[

					// Seta o numero de linguagems e joga no span com id count.
					document.getElementById( 'count' ).innerHTML = window.CKEDITOR_LANGS.length;

					var editor;

					function createEditor( languageCode )
					{
						if ( editor )
							editor.destroy();

						// Atualiza o <textarea id="data[Conteudo][texto]"> com o CKEDITOR
						// instacia, usando as configurações padrao.
						editor = CKEDITOR.replace( 'ConteudoTexto',
							{	
								skin : 'office2003', //skin do office 2003
								language : languageCode,
								

								on :
								{
									instanceReady : function()
									{
										// espera o editar para ler os idiomas
										
										var languages = document.getElementById( 'languages' );
										languages.value = this.langCode;
										languages.disabled = false;
									}
								}
							} );
					}

					// incia o editar com a linguagem padrao PT-BR:
					createEditor( '' );

				//]]>
				</script>				
<!-- fim do EDITOR -->

<?
echo $form->input('criacao',array('type'=>'hidden','value'=>date('Y/m/d h:m:i')));

echo $form->end('Cadastrar');
?>

 </div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você digitar menos que 5 caracteres em titulo, ele bloqueia, porém não exibe mensagem? Aparece algo?

 

Ele nao está bloqueando e nao está exibindo mensagem.

a mensagem que eu falei é que eu proprio coloquei caso houvesse falha ao cadastrar.

To perdidao todo mundo consegue validar com cakephp menos eu =\

 

Outra duvida você sabe ou tem algum codigo de exemplo de administração de menus?

 

 

abraços

e muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ye... muito estranho.

Eu lembro uma vez que tive problemas parecidos, porém ele só não exibia a mensagem, era problema de charset! Eu estava utilizando acentos nas mensagens, porem não estava em UTF-8... aí convertendo tudo deu certo. Acho que não dará certo, mas tente tirar as mensagens personalizadas....só para testar mesmo.

 

Sobre os menus.... como assim? Menus você deve fazer na mão mesmo... pelomenos menus estaticos, não vejo necessidade de usar um helper ou coisa do tipo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ye... muito estranho.

Eu lembro uma vez que tive problemas parecidos, porém ele só não exibia a mensagem, era problema de charset! Eu estava utilizando acentos nas mensagens, porem não estava em UTF-8... aí convertendo tudo deu certo. Acho que não dará certo, mas tente tirar as mensagens personalizadas....só para testar mesmo.

 

Sobre os menus.... como assim? Menus você deve fazer na mão mesmo... pelomenos menus estaticos, não vejo necessidade de usar um helper ou coisa do tipo.

 

 

Olá

ai olha esse aki que tb não está funcionando

 

//Model
class Sessao extends AppModel{
	var $name = "Sessao";
	var $hasMany="Cat";
	var $validate = array(
		'nome' => array('rule' => 'notEmpty')
		
	);
	
	

}

//View
<h1 class="titulo">Sessão - Cadastrar</h1>
<div class="formulario">
<?
 echo $form->create('Sessao',array('action'=>'admin_cadastrar'));

echo"<div class='input'><label for='SessaoNome'>Nome</label>";
echo "<input type='text' id='SessaoNome' onkeypress='Change(this.id)' name='data[Sessao][nome]' />";
echo "</div>";
echo $form->input('url',array('type'=>'text','error'=>array('nome','Favor informe o nome')));
echo $form->input('descricao',array('type'=>'textarea'));
echo $form->input('menu',array('type'=>'select','options'=>array('sim'=>'sim','nao'=>'nao')));
echo $form->input('ativo',array('type'=>'select','options'=>array('sim'=>'sim','nao'=>'nao')));
echo $form->input('criacao',array('type'=>'hidden','value'=>date("Y-m-d h:m:s")));
echo $form->end('Cadastrar');


?>
</div>

não sei porq nao esta funcionando;

Outra duvida como eu faço pra q quando eu excluir uma Sessão seja excluido tb uma categoria e seus artigos

 

o relacionamento está assim:

Model Sessao hasMany Categoria

Model Cat belongsTo Sessao

Model artigo belongsTo array('Sessao','Cat')

 

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para fazer o campo, use o FormHelper ao invés de fazer a mão, aí veja se a validação funciona.

 

Sobre a exclusão em cascata, veja isso e procure por "depend" http://book.cakephp.org/pt/view/78/Associations-Linking-Models-Together

 

msm eu fazendo a mao não está funcionando,

pow você sabe como eu coloco um evento no input tipo onclick ou onkeypress

 

abraços

Obrigado por continuar tentando me ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara.... ou algo está passando ou tem algo muito estranho aí.

Certifique-se de baixar a ultima versão. Em algumas vesões do Cake isso não funcionaria (como a 1.1).

http://cakeforge.org/frs/download.php/735/cake_1.2.5.zip

 

Para ver sua versão:

Configure::version();

E sobre utilizar o FormHelper, eu disse porque se você não utilizalos as mensagens de erros não serão mostradas.

Você também pode colocar onclick e onkeypress neles:

$form->input('campo', array('onclick' => 'teste()', 'onkeypress' => 'test2()');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara.... ou algo está passando ou tem algo muito estranho aí.

Certifique-se de baixar a ultima versão. Em algumas vesões do Cake isso não funcionaria (como a 1.1).

http://cakeforge.org/frs/download.php/735/cake_1.2.5.zip

 

Para ver sua versão:

Configure::version();

E sobre utilizar o FormHelper, eu disse porque se você não utilizalos as mensagens de erros não serão mostradas.

Você também pode colocar onclick e onkeypress neles:

$form->input('campo', array('onclick' => 'teste()', 'onkeypress' => 'test2()');
Olá amigo

minha versão é 1.2.5

enquanto ao utilizar o form helper eu utilizei e nao exibiu a mensagem e tentou cadastrar.

Muito obrigado pela ajuda com o onkeypress =D

To malucao com issu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos ver se conseguimos ver onde está o problema.

Ponhe isso em seu Model (que tem validação).

function beforeValidate(){
   if($this->validates())
      echo 'Validou!';
   else
      echo 'Não validou!';
}

Agora tente inserir algum registro neste model "quebrando" alguma validação e veja o que é exibido e insera uma vez tudo corretamente (passando da validação).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigao desculpa a demora

Agora ta dando erro

O Internet Explorer não pode exibir a página da Web

to ficando maluco com issu amigo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigao desculpa a demora

Agora ta dando erro

O Internet Explorer não pode exibir a página da Web

to ficando maluco com issu amigo

 

Ainda to com o problema to tentando mas a validação nao sai de jeito nenhum

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.