Salve a tutti,
non riesco a venirne a capo con questa validazione tramite ajax.
Non riesco a capire se sia dovuto al fatto che ho installato tutto nel sottodominio del mio vps…ma tutto il resto dell’ app funziona bene … compresi dei menu dipendenti che ho in altri form.
Questo e il form (registrazione.php)
<?php
$this->pageTitle = 'Registrazione Nuovo Utente';
$this->breadcrumbs = array('Registrazione Utente');
?>
<?php $form=$this->beginWidget('CActiveForm', array(
'method'=>'POST',
'id'=>'form',
'action'=> Yii::app()->createUrl('Site/RegistrazioneUtente'),
'enableAjaxValidation'=>true,
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
));
?>
<div class='form'>
<table class="tabella_login" style="width: 40%; margin: auto;">
<tbody>
<tr>
<td colspan="2" class="tabella_info_header tabella_first_form">Registrazione Nuovo Utente</td>
</tr>
<tr>
<td class="tabella_info_campo_descrizione">
<?php echo $form->labelEx($model,'nome'); ?>
</td>
<td class="tabella_info_campo_data">
<?php echo $form->textField($model,'nome'); ?>
<?php echo $form->error($model,'nome', array('class'=>'text-error')); ?>
</td>
</tr>
<tr>
<td class="tabella_info_campo_descrizione">
<?php echo $form->labelEx($model,'cognome'); ?>
</td>
<td class="tabella_info_campo_data">
<?php echo $form->textField($model,'cognome'); ?>
<?php echo $form->error($model,'cognome', array('class'=>'text-error')); ?>
</td>
</tr>
<tr>
<td class="tabella_info_campo_descrizione">
<?php echo $form->labelEx($model,'codice_fiscale'); ?>
</td>
<td class="tabella_info_campo_data">
<?php echo $form->textField($model,'codice_fiscale'); ?>
<?php echo $form->error($model,'codice_fiscale', array('class'=>'text-error')); ?>
</td>
</tr>
<tr>
<td class="tabella_info_campo_descrizione">
<?php echo $form->labelEx($model,'email'); ?>
</td>
<td class="tabella_info_campo_data">
<?php echo $form->textField($model,'email'); ?>
<?php echo $form->error($model,'email', array('class'=>'text-error')); ?>
</td>
</tr>
<tr>
<td class="tabella_info_campo_descrizione">
<?php echo $form->labelEx($model,'username'); ?>
</td>
<td class="tabella_info_campo_data">
<?php echo $form->textField($model,'username'); ?>
<?php echo $form->error($model,'username', array('class'=>'text-error')); ?>
</td>
</tr>
<tr>
<td class="tabella_info_campo_descrizione">
<?php echo $form->labelEx($model,'password'); ?>
</td>
<td class="tabella_info_campo_data">
<?php echo $form->passwordField($model,'password'); ?>
<?php echo $form->error($model,'password', array('class'=>'text-error')); ?>
</td>
</tr>
<tr>
<td class="tabella_info_campo_descrizione">
<?php echo $form->labelEx($model,'ripeti_password'); ?>
</td>
<td class="tabella_info_campo_data">
<?php echo $form->passwordField($model,'ripeti_password'); ?>
<?php echo $form->error($model,'ripeti_password', array('class'=>'text-error')); ?>
</td>
</tr>
<tr class="tabella_info_footer">
<td colspan=2 class="tabella_chiusura_form">
<?php echo CHtml::submitButton('Regitrami', array('class'=>'btn btn-primary btn-small'));?>
<?php $this->endWidget(); ?>
</td>
</tr>
</tbody>
</table>
</div>
Queste sono le regole di validazione che voglio applicare (inserite nel model RegistrazioneUtente):
<?php
class RegistrazioneUtente extends CFormModel{
public $nome;
public $cognome;
public $codice_fiscale;
public $email;
public $username;
public $password;
public $ripeti_password;
public function rules(){
return array(
array(
'nome, cognome, email, codice_fiscale, username, password, ripeti_password', 'required', 'message' => 'Questo campo e obbligatorio',
),
array(
'nome',
'match',
'pattern' => '/^[a-z0-9_]+$/i',
'message'=>'Inserire solo lettere e numeri',
),
array(
'cognome',
'match',
'pattern' => '/^[a-z0-9_]+$/i',
'message'=>'Inserire solo lettere e numeri',
),
array(
'username',
'match',
'pattern' => '/^[a-z0-9_]+$/i',
'message'=>'Inserire solo lettere e numeri',
),
array(
'email',
'email',
'message'=>'Inserire email nel formato email Es: utente@tuaemail.it',
),
array(
'codice_fiscale',
'match',
'pattern' => '/^[a-z0-9_]+$/i',
'message'=>'Inserire solo lettere e numeri',
),
array(
'password',
'match',
'pattern' => '/^[a-z0-9@\_]+$/i',
'message'=>'Inserire solo lettere e numeri',
),
array(
'ripeti_password',
'compare',
'compareAttribute'=>'password',
'message'=>'Le password NON coincidono',
),
array('username', 'verifica_username'),
array('email', 'verifica_email'),
array('codice_fiscale', 'verifica_codicefiscale'),
);
}
////////////CONTROLLO SE L' USERNAME ESISTE GIA
public function verifica_username($attributes, $params)
{
$connsessione = Yii::app()->db;
$ricerca = "SELECT username FROM tb_user WHERE" ;
$ricerca .= "username='".$this->username."'";
$risultato = $connsessione->createCommand($ricerca);
$trovati = $risultato->query();
foreach($trovati as $trovato)
{
if($this->username === $trovato['username'])
{
$this->addError('username', 'Questo username è già utilizzato da un altro utente');
break;
}
}
}
////////////CONTROLLO SE L' EMAIL ESISTE GIA
public function verifica_email($attributes, $params)
{
$connsessione = Yii::app()->db;
$ricerca = "SELECT email FROM tb_user WHERE" ;
$ricerca.= "email='".$this->email."'";
$risultato = $connessione->createCommand($ricerca);
$trovati = $risultato->query();
foreach($trovati as $trovato)
{
if($this->email === $trovato['email'])
{
$this->addError('email', 'Questo username è già utilizzato da un altro utente');
break;
}
}
}
////////////CONTROLLO SE IL CODICE FISCALE ESISTE GIA
public function verifica_codicefiscale($attributes, $params)
{
$connsessione = Yii::app()->db;
$ricerca = "SELECT codice_fiscale FROM tb_user WHERE" ;
$ricerca .= "codice_fiscale='".$this->codice_fiscale."'";
$risultato = $connessione->createCommand($ricerca);
$trovati = $risultato->query();
foreach($trovati as $trovato)
{
if($this->codice_fiscale === $trovato['codice_fiscale'])
{
$this->addError('codice_fiscale', 'Questo codice fiscale è già associato ad un altro utente');
break;
}
}
}
}
Mentre questa è l’ action che ho nel SiteController (manca ancora tutto il codice da inserire in caso la validazione venga superata…quindi invio email etc…ma per ora questo particolare non interessa):
..................
public function actionRegistrazioneUtente()
{
$model=new RegistrazioneUtente;
//////VALIDAZIONE AJAX
if(isset($_POST['ajax']) && $_POST['ajax'] === 'form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
if (isset($_POST['RegistrazioneUtente']))
{
$model->attributes = $_POST['RegistrazioneUtente'];
if(!$model->validate())
{
$model->addError('ripeti_password', 'Errore durante l\' invio dei dati');
}
else
{
////SE PASSA LA VALIDAZIONE REGISTRA L'UTENTE
///ED INVIA EMAIL DI CONFERMA
///DA INSERIRE IL CODICE PER EFFETTUARE QUESTE OPERAZIONI
}
}
$this->render('registrazione', array('model'=>$model));
}
...............
Qualcuno può aiutarmi a risolvere perfavore ? Questo è l’ errore che vedo quando inserisco l’ username (con F12) su Google Chrome su Network->XHR:
POST http://testarea.miodominio.it/sottodomini/testarea/Site/RegistrazioneUtente.nup 500 (Internal Server Error)
Se controllo all’ interno del POST (sempre da Chrome) trovo:
CDbException
CDbCommand ha riportato un errore nell'esecuzione della query SQL: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '='Pippo'' at line 1. The SQL statement executed was: SELECT username FROM user WHEREusername='Pippo' (/var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/db/CDbCommand.php:543)
#0 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/db/CDbCommand.php(377): CDbCommand->queryInternal('', 0, Array)
#1 /var/www/clients/client1/web1/web/sottodomini/testarea/protected/models/RegistrazioneUtente.php(83): CDbCommand->query()
#2 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/validators/CInlineValidator.php(42): RegistrazioneUtente->verifica_username('username', Array)
#3 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/validators/CValidator.php(213): CInlineValidator->validateAttribute(Object(RegistrazioneUtente), 'username')
#4 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/base/CModel.php(159): CValidator->validate(Object(RegistrazioneUtente), NULL)
#5 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/web/widgets/CActiveForm.php(920): CModel->validate(NULL)
#6 /var/www/clients/client1/web1/web/sottodomini/testarea/protected/controllers/SiteController.php(43): CActiveForm::validate(Object(RegistrazioneUtente))
#7 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/web/actions/CInlineAction.php(49): SiteController->actionRegistrazioneUtente()
#8 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/web/CController.php(308): CInlineAction->runWithParams(Array)
#9 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/web/CController.php(286): CController->runAction(Object(CInlineAction))
#10 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/web/CController.php(265): CController->runActionWithFilters(Object(CInlineAction), Array)
#11 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/web/CWebApplication.php(282): CController->run('RegistrazioneUt...')
#12 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/web/CWebApplication.php(141): CWebApplication->runController('Site/Registrazi...')
#13 /var/www/clients/client1/web1/web/sottodomini/testarea/yii/framework/base/CApplication.php(180): CWebApplication->processRequest()
#14 /var/www/clients/client1/web1/web/sottodomini/testarea/index.php(24): CApplication->run()
#15 {main}
Sono sicuro che è un errore di punteggiatura nella regola di validazione (visto l’ errore che mi da), ma ho notato che anche quando inserisco gli altri campi (Esempio: Nome, Cognome etc) come passo al campo successivo mi da sempre ERORR 500 INTERNAL SERVER ERROR e quindi non riesco a capire dove sia l’ errore. Suppongo che non sia solo nella regola di validazione dei campi username, email, codice_fiscale a questo punto, ma credo vi sia un’ errore più grossolano.
Avendo però la mente offuscata dal batti e ribatti di codice che scrivo per tentare di risolvere…non sto campendo più una mazza!!! Se qualcuno può aiutarmi gliene sarei grato. Buon fine settimana a tutti!!!