Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Yii框架上使用ajax添加记录时,firebug报告出现错误500_Php_Jquery_Mysql_Ajax_Yii - Fatal编程技术网

Php 在Yii框架上使用ajax添加记录时,firebug报告出现错误500

Php 在Yii框架上使用ajax添加记录时,firebug报告出现错误500,php,jquery,mysql,ajax,yii,Php,Jquery,Mysql,Ajax,Yii,我尝试在yii框架上使用ajax。当我尝试将记录添加到数据库时,失败了。按钮始终在加载状态下冻结。显示记录很好,数据已显示,但在尝试添加新记录或编辑记录时无法显示。对于删除记录,它正在工作 下面是AjaxController.php: <?php class AjaxController extends Controller { public $layout = "null"; public function actionIndex() { $this

我尝试在yii框架上使用ajax。当我尝试将记录添加到数据库时,失败了。按钮始终在加载状态下冻结。显示记录很好,数据已显示,但在尝试添加新记录或编辑记录时无法显示。对于删除记录,它正在工作

下面是
AjaxController.php

<?php
class AjaxController extends Controller {

    public $layout = "null";

    public function actionIndex() {
        $this -> render('index');
    }

    public function actionCreate() {            
        if (Yii::app() -> request -> isAjaxRequest) {
            $modelProduk = new Produk;
            if ($_POST) {
                $modelProduk['nama_produk'] = $_POST['namaproduk'];
                $modelProduk['jumlah_produk'] = $_POST['jumlahproduk'];
                $modelProduk['harga_produk'] = $_POST['hargaproduk'];
                $modelProduk -> save();
            }
            $this -> render('create');
        }
    }

    public function actionIndexproduk() {

        $criteria = new CDbCriteria( array('order' => 'id_produk DESC'));
        $count = Produk::model() -> count($criteria);
        $pages = new CPagination($count);
        $pages -> pageSize = 2;
        $pages -> applyLimit($criteria);
        $dataProduk = Produk::model() -> findAll($criteria);
        $this -> render('indexproduk', array('dataProduk' => $dataProduk, 'pages' => $pages, ));
    }

    public function actionUpdate($id) {
        if (Yii::app() -> request -> isAjaxRequest) {
            $dataProduk = Produk::model() -> findByPk($id);
            if ($_POST) {
                $dataProduk -> nama_produk = $_POST['namaproduk'];
                $dataProduk -> jumlah_produk = $_POST['jumlahproduk'];
                $dataProduk -> harga_produk = $_POST['hargaproduk'];
                $dataProduk -> save();
            }
            $this -> render('update', array('dataProduk' => $dataProduk));
        }
    }

    public function actionDelete($id) {
        if (Yii::app() -> request -> isAjaxRequest) { 
            Produk::model() -> deleteByPk($id);
        }
    }

    public function actionSearch($criteria = '') {
        $criteria = new CDbCriteria( array(
            'select' => '*',
            'condition' => "nama_produk LIKE '%$criteria%'",
            'order' => 'id_produk DESC', ));

        $count = Produk::model() -> count($criteria);
        $pages = new CPagination($count);
        $pages -> pageSize = 2;
        $pages -> applyLimit($criteria);
        $model = Produk::model() -> findAll($criteria);
        $this -> render('indexProduk', array('dataProduk' => $model, 'pages' => $pages));
    }
}
?>
<?php
class Produk extends CActiveRecord {

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public function tableName() {
        return 'produk';
    }

    public function rules() {
        return array( 
            array('nama_produk ,jumlah_produk, harga_produk', 'required',),
            array('jumlah_produk,harga_produk','numerical','integerOnly'=>true,),
        );
    }

    public function attributeLabels() {
        return array(
            'nama_produk' => 'Nama Produk', 
            'jumlah_produk'=>'Jumlah Produk',
            'harga_produk'=>'Harga Produk',
        );
    }

}
?>
这是
indexproduk.php
中的代码行:

<form action="" method="post" id="formSearch">
    <input type="text" name="criteria" id="criteria" />
    <input type="button" value="Search" id="buttonSearch" />
</form>

<table border="1" cellpadding="5">
    <tr>         
        <th>Nama Produk</th>
        <th>Jumlah Produk</th>
        <th>Harga Produk</th>
        <th>#</th>
    </tr>
    <?php foreach ($dataProduk as $produk){?>
    <tr>
        <td><?php echo $produk -> nama_produk;?></td>
        <td><?php echo $produk -> jumlah_produk;?></td>
        <td><?php echo $produk -> harga_produk;?></td>
        <td>
        <a href="#" class="update" id="<?php echo $produk->id_produk;?>">Edit</a> ||
        <a href="#" class="delete" id="<?php echo $produk->id_produk;?>">Delete</a>
        </td>
    </tr>
    <?php }?>
</table>
<br>
<?php     
    $this->widget('CLinkPager', array(
        'header'=>'',       
        'maxButtonCount'=>5,
        'pages' => $pages,       
    )) 
?>

<script>
    $(document).ready(function(){

        //search
        $("#buttonSearch").click(function(){
        var criteria = $('#criteria').val();
        $("#data").load('<?php echo Yii::app()->request->baseUrl;?>/ajax/search/criteria/'+criteria);
        });

        $('li a').click(function(){
            /*ambil value dari attribut href 
            dan load ke <div id=”data” */
            $('#data').load($(this).attr('href'));
            return false;
        });

        $('.update').click(function(){              
            var id =$(this).attr('id'); 
             $('#form').load('<?php echo Yii::app()->request->baseUrl;?>/ajax/update/'+id);
            return false;
        });         

        $('.delete').click(function(){
        var id =$(this).attr('id'); 
        $.ajax({
           type:'POST',
             url:'<?php echo Yii::app()->request->baseUrl;?>/ajax/delete/'+id,
             success:function(data){
              $('#data').load('<?php echo Yii::app()->request->baseUrl;?>/ajax/indexproduk');
             }
          });
          return false;
        });    
    });
</script>
模型
Produk.php

<?php
class AjaxController extends Controller {

    public $layout = "null";

    public function actionIndex() {
        $this -> render('index');
    }

    public function actionCreate() {            
        if (Yii::app() -> request -> isAjaxRequest) {
            $modelProduk = new Produk;
            if ($_POST) {
                $modelProduk['nama_produk'] = $_POST['namaproduk'];
                $modelProduk['jumlah_produk'] = $_POST['jumlahproduk'];
                $modelProduk['harga_produk'] = $_POST['hargaproduk'];
                $modelProduk -> save();
            }
            $this -> render('create');
        }
    }

    public function actionIndexproduk() {

        $criteria = new CDbCriteria( array('order' => 'id_produk DESC'));
        $count = Produk::model() -> count($criteria);
        $pages = new CPagination($count);
        $pages -> pageSize = 2;
        $pages -> applyLimit($criteria);
        $dataProduk = Produk::model() -> findAll($criteria);
        $this -> render('indexproduk', array('dataProduk' => $dataProduk, 'pages' => $pages, ));
    }

    public function actionUpdate($id) {
        if (Yii::app() -> request -> isAjaxRequest) {
            $dataProduk = Produk::model() -> findByPk($id);
            if ($_POST) {
                $dataProduk -> nama_produk = $_POST['namaproduk'];
                $dataProduk -> jumlah_produk = $_POST['jumlahproduk'];
                $dataProduk -> harga_produk = $_POST['hargaproduk'];
                $dataProduk -> save();
            }
            $this -> render('update', array('dataProduk' => $dataProduk));
        }
    }

    public function actionDelete($id) {
        if (Yii::app() -> request -> isAjaxRequest) { 
            Produk::model() -> deleteByPk($id);
        }
    }

    public function actionSearch($criteria = '') {
        $criteria = new CDbCriteria( array(
            'select' => '*',
            'condition' => "nama_produk LIKE '%$criteria%'",
            'order' => 'id_produk DESC', ));

        $count = Produk::model() -> count($criteria);
        $pages = new CPagination($count);
        $pages -> pageSize = 2;
        $pages -> applyLimit($criteria);
        $model = Produk::model() -> findAll($criteria);
        $this -> render('indexProduk', array('dataProduk' => $model, 'pages' => $pages));
    }
}
?>
<?php
class Produk extends CActiveRecord {

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public function tableName() {
        return 'produk';
    }

    public function rules() {
        return array( 
            array('nama_produk ,jumlah_produk, harga_produk', 'required',),
            array('jumlah_produk,harga_produk','numerical','integerOnly'=>true,),
        );
    }

    public function attributeLabels() {
        return array(
            'nama_produk' => 'Nama Produk', 
            'jumlah_produk'=>'Jumlah Produk',
            'harga_produk'=>'Harga Produk',
        );
    }

}
?>

仅供参考:我使用的是XAMPP1.8.3,PHP版本为5.5.15,Windows 8和Mozilla Firefox 32.0.1

期待在这里看到专家的建议

编辑:这里是firebug报告

Here what i got from firebug :

<h1>PHP Error [2]</h1>
<p>include(jumlah_produk.php): failed to open stream: No such file or directory (I:\xampp\htdocs\yii\framework\YiiBase.php:427)</p>
<pre>#0 I:\xampp\htdocs\yii\framework\YiiBase.php(427): CWebApplication->handleError()
#1 I:\xampp\htdocs\yii\framework\YiiBase.php(427): autoload()
#2 I:\xampp\htdocs\yii\framework\YiiBase.php(302): autoload()
#3 I:\xampp\htdocs\yii\framework\validators\CValidator.php(186): import()
#4 I:\xampp\htdocs\yii\framework\base\CModel.php(287): createValidator()
#5 I:\xampp\htdocs\yii\framework\base\CModel.php(260): Produk->createValidators()
#6 I:\xampp\htdocs\yii\framework\base\CModel.php(158): Produk->getValidators()
#7 I:\xampp\htdocs\yii\framework\db\ar\CActiveRecord.php(805): Produk->validate()
#8 I:\xampp\htdocs\yiites\protected\controllers\AjaxController.php(18): Produk->save()
#9 I:\xampp\htdocs\yii\framework\web\actions\CInlineAction.php(49): AjaxController->actionCreate()
#10 I:\xampp\htdocs\yii\framework\web\CController.php(308): CInlineAction->runWithParams()
#11 I:\xampp\htdocs\yii\framework\web\CController.php(286): AjaxController->runAction()
#12 I:\xampp\htdocs\yii\framework\web\CController.php(265): AjaxController->runActionWithFilters()
#13 I:\xampp\htdocs\yii\framework\web\CWebApplication.php(282): AjaxController->run()
#14 I:\xampp\htdocs\yii\framework\web\CWebApplication.php(141): CWebApplication->runController()
#15 I:\xampp\htdocs\yii\framework\base\CApplication.php(180): CWebApplication->processRequest()
#16 I:\xampp\htdocs\yiites\index.php(12): CWebApplication->run()
</pre>
以下是我从firebug获得的信息:
PHP错误[2]
include(jumlah_produk.php):无法打开流:没有这样的文件或目录(I:\xampp\htdocs\yii\framework\YiiBase.php:427)

#0 I:\xampp\htdocs\yii\framework\YiiBase.php(427):CWebApplication->handleError() #1 I:\xampp\htdocs\yii\framework\YiiBase.php(427):自动加载() #2 I:\xampp\htdocs\yii\framework\YiiBase.php(302):自动加载() #3 I:\xampp\htdocs\yii\framework\validators\CValidator.php(186):import() #4 I:\xampp\htdocs\yii\framework\base\CModel.php(287):createValidator() #5 I:\xampp\htdocs\yii\framework\base\CModel.php(260):Produk->createValidators() #6 I:\xampp\htdocs\yii\framework\base\CModel.php(158):Produk->getValidators() #7 I:\xampp\htdocs\yii\framework\db\ar\CActiveRecord.php(805):Produk->validate() #8 I:\xampp\htdocs\yiites\protected\controllers\AjaxController.php(18):Produk->save() #9 I:\xampp\htdocs\yii\framework\web\actions\CInlineAction.php(49):AjaxController->actionCreate() #10 I:\xampp\htdocs\yii\framework\web\CController.php(308):CInlineAction->runWithParams() #11 I:\xampp\htdocs\yii\framework\web\CController.php(286):AjaxController->runAction() #12 I:\xampp\htdocs\yii\framework\web\CController.php(265):AjaxController->runActionWithFilters() #13 I:\xampp\htdocs\yii\framework\web\CWebApplication.php(282):AjaxController->run() #14 I:\xampp\htdocs\yii\framework\web\CWebApplication.php(141):CWebApplication->runController() #15 I:\xampp\htdocs\yii\framework\base\capapplication.php(180):CWebApplication->processRequest() #16 I:\xampp\htdocs\yiites\index.php(12):CWebApplication->run()
可能您的型号无效。 在保存或处理sav e函数的返回之前,您应该始终验证您的模型,如

500上的错误输出是什么?在index.php中打开调试模式,可能在顶部添加错误报告(E_ALL),并在php.ini中启用启动错误以进行调试

另一个坏主意是在ajax回复中重新注册jquery,这会杀死主页的dom,所以要非常小心


另外->呈现呈现整个html页面。您可能只想在ajax结果上呈现部分,然后返回该部分以替换现有页面内容。

因此出现了服务器端错误,当您查看时,服务器日志说了什么?我编辑了问题,添加了firebug的模型代码和报告。Yii正在查找名为
jumlah_produk.php
的文件,该文件不存在。在创建操作中,关于
$modelProduk['nama_produk']
的三行应该是
$modelProduk->nama_produk
,因为这是模型的一个属性。不知道这是否是错误。@chris---嗨,chris,我现在解决了。实际上,我之前的模型有输入错误,我将函数规则设置为绝对数组,我将所有数组值用“”括起来。这导致ajax停止。现在它可以正常工作了$modelProduk->nama_produk不是错误,对于名为jumlah_produk.php的文件,它是从Yii core自动生成的。如果在第247行打开YiiBase.php,您将看到($className.'.php');顺便说一句,谢谢你的评论。我现在添加了模型,以前忘记添加了。
if($model->save())
 // all good
}
else
{
// something bad happened :(
}