Witam,
Framework na którym operuje to Yii jak widać w tytule. Problem dotyczy wstawienia danych do bazy, które są przesłane z formularza. A więc tak mam formularz
register.php (widok)
<?php if(Yii::app()->user->hasFlash('register')): ?>
<div class="flash-success"> <?php echo Yii::app()->user->getFlash('register'); ?>
<?php else: ?>
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'register-form-register-form',
'enableAjaxValidation'=>true,
)); ?>
<p class="note">Fields with
<span class="required">*
</span> are required.
</p>
<?php echo $form->errorSummary($model); ?>
<?php echo $form->labelEx($model,'username'); ?>
<?php echo $form->textField($model,'username'); ?>
<?php echo $form->error($model,'username'); ?>
<?php echo $form->labelEx($model,'password'); ?>
<?php echo $form->textField($model,'password'); ?>
<?php echo $form->error($model,'password'); ?>
<?php echo $form->labelEx($model,'email'); ?>
<?php echo $form->textField($model,'email'); ?>
<?php echo $form->error($model,'email'); ?>
<div class="row buttons"> <?php echo CHtml::submitButton('Submit'); ?>
<?php $this->endWidget(); ?>
<?php endif; ?>
następnie dane przesyłane są do
SiteController.php (kontrolera) w którym odbywa się walidacja
<?php
class SiteController extends Controller
{
//inne metody
.
.
.
//rejestracja
public function actionRegister()
{
$model=new RegisterForm;
if(isset($_POST['RegisterForm'])) {
$model->attributes=$_POST['RegisterForm'];
if($model->validate())
{
//wywolanie metody wykonujacej zapytanie
$model->wstaw();
Yii::app()->user->setFlash('register','dziekujemy za rejestracje.');
$this->refresh();
}
}
$this->render('register',array('model'=>$model)); }
}
i wywoływane jest metoda
wstaw z
RegisterForm.php (modelu), która ma za zadanie wstawić dane do bazy.
class RegisterForm extends CActiveRecord
{
//inne metody
.
.
.
public function wstaw()
{
$connection=Yii::app()->db;
$sql="INSERT INTO tbl_user (username,password,email) VALUES(:username,:password,:email)";
$command=$connection->createCommand($sql);
$command->bindParam(":username",$username,PDO::PARAM_STR);
$command->bindParam(":password",$password,PDO::PARAM_STR);
$command->bindParam(":email",$email,PDO::PARAM_STR);
$command->execute();
}
}
Niestety otrzymuję wyjątek
CDbException o treści.
Cytat
CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'username' cannot be null. The SQL statement executed was: INSERT INTO tbl_user (username,password,email) VALUES(:username,:password,:email)
Nie bardzo wiem jak to ugryźć, na pierwszy rzut oka wydaje się być wszystko w porządku. Może ktoś bardziej doświadczony posłuży radą (IMG:
style_emoticons/default/smile.gif) .
EDIT:Rozwiązałem to w inny sposób, a dokładniej za pomocą konstruktora zapytań:
$command = Yii::app()->db->createCommand()
->insert('tbl_user', array( 'username'=>$this->username,
'password'=>MD5($this->password),
'email'=>$this->email,
));
Natomiast chętnie dowiem się dlaczego nie działa poprzedni kod.
Ten post edytował cod3r 28.09.2012, 22:50:10