2017-02-17 5 views
1
Failed to prepare SQL: INSERT INTO `form` (`name`, `email`, `age`, `height`, `weight`, `city`, `techies`, `english_level`, `images`) VALUES (:qp0, :qp1, :qp2, :qp3, :qp4, :qp5, :qp6, :qp7, :qp8) 

私のyii2データベースにフォームからデータを入れようとすると、そのエラーが発生します。その目的のためにモデルを作成し、コントローラでアクションを作成し、データを送信するためにActiveFormで表示しました。今すぐ私はそのフォームからデータを取得し、それを私のdbに入れてください。 エラーは、この行で発生します。私のyii2サイトで未定義のオフセット1

if (($loaded = $Form->load(Yii::$app->request->post())) && $Form->save()) 

それは私のコントローラのアクションのための1つの行です:

public function actionForm() 
{ 
    $Form = new Form(); 
    if(!$Form->validate()){ 
     var_dump("fuck"); 
    } 
    if (($loaded = $Form->load(Yii::$app->request->post())) && $Form->save()) { 
       return 'ok'; 
    }elseif($loaded){ 
var_dump($Form->getErrors()); 
} 

    return $this->render('form',array(
     'Form' => $Form, 
    )); 
} 

私のリクエストデータ:

$_GET = [ 
    'r' => 'site/form', 
]; 

$_POST = [ 
    '_csrf' => 'MGhXNV82cTdkBTFPC3k4VAVRZUEoBDxZUi4cRSpnAUZaMTxxbwZEBQ==', 
    'Form' => [ 
     'name' => 'Rost', 
     'email' => '[email protected]', 
     'age' => '22', 
     'height' => '12', 
     'weight' => '1212', 
     'city' => '1212', 
     'techies' => 'yes_camera', 
     'english_level' => 'starter', 
     'images' => [ 
      '', 
     ], 
    ], 
]; 

$_FILES = [ 
    'Form' => [ 
     'name' => [ 
      'images' => [ 
       'user.png', 
      ], 
     ], 
     'type' => [ 
      'images' => [ 
       'image/png', 
      ], 
     ], 
     'tmp_name' => [ 
      'images' => [ 
       'W:\\XAMPP\\tmp\\php649A.tmp', 
      ], 
     ], 
     'error' => [ 
      'images' => [ 
       0, 
      ], 
     ], 
     'size' => [ 
      'images' => [ 
       445, 
      ], 
     ], 
    ], 
]; 

と私はGIIによって生成されたモデルを持っています。

<?php 

namespace app\models; 

use Yii; 

/** 
* This is the model class for table "form". 
* 
* @property integer $id 
* @property string $name 
* @property string $email 
* @property integer $age 
* @property integer $height 
* @property integer $weight 
* @property string $city 
* @property string $techies 
* @property string $english_level 
* @property string $images 
* @property resource $photo_1 
* @property resource $photo_2 
* @property resource $photo_3 
* @property resource $photo_4 
* @property resource $photo_5 
*/ 
class Form extends \yii\db\ActiveRecord 
{ 
    /** 
    * @inheritdoc 
    */ 
    public static function tableName() 
    { 
     return 'form'; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      [['name', 'email', 'age', 'height', 'weight', 'city', 'techies', 'english_level'], 'required'], 
      [['name', 'email', 'city', 'techies', 'english_level'], 'string'], 
      [['images', 'photo_1', 'photo_2', 'photo_3', 'photo_4', 'photo_5'], 'file'], 
      [['age', 'height', 'weight'], 'integer'], 
     ]; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function attributeLabels() 
    { 
     return [ 
      'id' => 'ID', 
      'name' => 'Name', 
      'email' => 'Email', 
      'age' => 'Age', 
      'height' => 'Height', 
      'weight' => 'Weight', 
      'city' => 'City', 
      'techies' => 'Techies', 
      'english_level' => 'English Level', 
      'photo_1' => 'Photo 1', 
      'photo_2' => 'Photo 2', 
      'photo_3' => 'Photo 3', 
      'photo_4' => 'Photo 4', 
      'photo_5' => 'Photo 5', 
     ]; 
    } 
} 
+0

[「イメージの」]キーが配列され、クエリで 'images'列がある - あなたは空に保存しようとしていますそこに配列があるか、この列に何らかの処理が含まれていますか? – Bizley

+0

サーバーのある場所、たとえば - @ frontend/web/imagesに画像を保存し、画像の名前のみをデータベースの列に保存することをお勧めします。あなたのパフォーマンスに打撃を与えてそのようなBlobを取得する。 –

答えて

0

問題は、投稿内の画像の値を送信することが配列であることです。値をデータベースに保存する前に、その値をjsonでエンコードする必要があります。あなたのフォームモデルで

上書きロード機能:私はあなたの$ _POST参照

public function load($data, $formName = null) 
    { 
     $scope = $formName === null ? $this->formName() : $formName; 
     if($scope) { 
      $data[$scope]['images'] = \yii\helpers\Json::encode($data[$scope]['images']); 
     } 
     else { 
      $data['images'] = \yii\helpers\Json::encode($data['images']); 
     } 
     return parent::load($data, $formName); // TODO: Change the autogenerated stub 
    } 
関連する問題