谁一开始就是大神?

PHP 第82页

PHP

更新数据失败[2.0]

Marksea阅读(28)

今天碰见了一个问题,就是更新数据的时候失败,写不进去。

$taxonomy=Taxonomy::findOne($id);
if($taxonomy->load(Yii::$app->request->post())&&$taxonomy->save()){
    $this->redirect(['update','taxonomy'=>$taxonomy,'id'=>$id]);
}else{
    return $this->render('update',['taxonomy'=>$taxonomy]);
}

上面是控制器代码。post值是有的,但是load方法好像没有把内容加载进去,虽然save和load都返回了true,数据还是没有改变。求解答,不知道是不是思路混了

post来的值, 和表单名一致么?.

yii如何做复杂的查询?[1.1]

Lipony阅读(31)

例如:
一、
select u.username,count(a.id) num from user u left join article a on u.id = a.userid group by u.id order by num desc;
二、
/下面的查询user与userinfo一对一,user与userimage一对多/
select f.image from user u inner join userinfo f on u.id = f.userid and u.id = 123
union
select i.image from user u inner join userimage i on u.id = i.userid and u.id = 123;

类似于这些查询该怎么查?

yii 1
yii2
这个有讲的更明白点的方法么,我配置关系感觉有点乱。最后直接写的sql语句!
如果只是简单关联也可以用 \yii\db\Query
具体查看类手册 \yii\db\Query
比如
Yii 可以组合任何复杂的语句,但是你不要控制好Yii自动生成的括号,因为这会导致结果不一样。

十万火急:隐藏的index.php时遇到的问题。先谢谢大家啦![2.0]

Harryelephant阅读(29)

首先说说我怎么做的。(高级模板)
1:在 项目根目录/frontend/web下放置名为.htaccess内容的

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

的文件。
2:在 项目根目录/frontend/config/main.php文件中配置如下代码:

'components' => [
       //基本配置的代码
       'urlManager' => [
       		'enablePrettyUrl' => true,
       		'showScriptName' => false,
       		'rules'=>[
       			'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
       		],
	    ],
],

最后我的apache服务器的LoadModule rewrite_module modules/mod_rewrite.so这一行配置是有的。

遇到的问题是:访问网站首页以外其他文件是出现404错误
我是这样访问的。
若:域名是mi.com
http://mi.com 可以访问
http://mi.com/site/signup 报404错误
因为原本是这样的http://mi.com/frontend/web/index.php?r=site/signup,我在apache中设置了网站根目录/frontend/web为根目录,网址变成这样http://mi.com/index.php?r=site/signup
现在我隐藏index.php之后应当是http://mi.com/site/signup却没办法访问
恳请各位可以花2分钟看一下!谢谢大家了!

修改apache配置文件:
把域名解析到frontend/web/
楼主,我也遇到了同样的问题,我用的是basic模板,请问你是怎么解决的?
新手很有用

json_encode不能解析对象数组?[1.1]

SwiftJames阅读(29)

现在有一个问题:
$model = Test::model()->findAll();
echo json_encode($model);
输出结果为:[{},{},{}] 是空的?
$model是对象数组 是不是包含对象就会被清空?

1.1版本,用CJSON::encode($model)对mode进行encode,直接用json_encode无法encode model对象
asArray()

无法接收POST表单数据[2.0]

momoyak阅读(31)

我定义一个实体 无法获取POST过来的表单数据,代码如下:
1、Action

namespace app\controllers;

use app\models\FormModel;
use Yii;
use yii\web\Controller;
use yii\web\Request;
use yii\web\Response;


class FormController  extends Controller {

    public $enableCsrfValidation = false;

    public function  actionIndex()
    {
        $this->layout=false;
        return $this->render("index",[]);
    }

    public function  actionPost()
    {
        $model=new FormModel();
        $model->load($_POST);
        $model->attributes=$_POST;
        echo json_encode($model->name);
    }
}

2、Model

namespace app\models;

use Yii;
use yii\db\ActiveRecord;

class FormModel extends ActiveRecord {

    public static function tableName()
    {
        return 'formmodel';
    }

    public function rules()
    {
        return [
            [['name', 'name'], 'required'],
            ['id', 'id'],
        ];
    }

}

3、视图

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width"/>
    <title>用户登录</title>
    <script src="/static/js/vendor/jquery-2.1.3.min.js"></script>
</head>
<body>
<div>
    <form id="form1" method="post" action="/form/post">
        id:<input type="text" name="id"/><br/>
        name:<input type="text" name="name"/><br/>
        <input type="button" id="btn" value="sumbit"/>
    </form>
</div>

<script type="text/javascript">
    $(function () {
        $("#btn").click(function () {
            $.ajax({
                type: 'POST',
                url: "/form/post",
                data: $("#form1").serialize(),
                success: function (data) {
                },
                dataType: "html"
            });
        });
    });
</script>
</body>
</html>

4、视图对应表SQL

CREATE TABLE `formmodel` (
  `id` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

错误:

Exception 'ReflectionException' with message 'Class id does not exist' 

in E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\di\Container.php:415

Stack trace:
#0 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\di\Container.php(415): ReflectionClass->__construct('id')
#1 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\di\Container.php(358): yii\di\Container->getDependencies('id')
#2 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\di\Container.php(151): yii\di\Container->build('id', Array, Array)
#3 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\BaseYii.php(344): yii\di\Container->get('id', Array, Array)
#4 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\validators\Validator.php(204): yii\BaseYii::createObject(Array)
#5 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\base\Model.php(422): yii\validators\Validator::createValidator('id', Object(app\models\FormModel), Array, Array)
#6 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\base\Model.php(386): yii\base\Model->createValidators()
#7 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\base\Model.php(184): yii\base\Model->getValidators()
#8 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\base\Model.php(715): yii\base\Model->scenarios()
#9 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\base\Model.php(659): yii\base\Model->safeAttributes()
#10 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\base\Component.php(169): yii\base\Model->setAttributes(Array)
#11 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\vendor\yiisoft\yii2\db\BaseActiveRecord.php(266): yii\base\Component->__set('attributes', Array)
#12 E:\Soft\PHP\yii\yii-basic-app-2.0.3\basic\controllers\FormController.php(25): yii\db\BaseActiveRecord->__set('attributes', Array)
#13 [internal function]: app\controllers\FormController->actionPost()

表单名称命名不符合yii规范,
改为
url: "/form/post",有错误
1.检查点击是否做ajax提交了
2.后台试着输出POST过去的数据,看看是不是你php代码有问题
$model=new FormModel();这个有东西么?

哪位帅哥把这2个c#方法,给转成php5.5的方法。谢谢!!![2.0]

CGqueen阅读(29)

php水平实在不行。只有请教各位了。 希望有朋友帮忙下。 不胜感激。

public static string Decrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
            int num = Text.Length / 2;
            byte[] buffer = new byte[num];
            for (int i = 0; i < num; i++)
            {
                int num3 = Convert.ToInt32(Text.Substring(i * 2, 2), 0x10);
                buffer[i] = (byte) num3;
            }
            provider.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            provider.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            MemoryStream stream = new MemoryStream();
            CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write);
            stream2.Write(buffer, 0, buffer.Length);
            stream2.FlushFinalBlock();
            return Encoding.Default.GetString(stream.ToArray());
        }
 
 public static string Encrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
            byte[] bytes = Encoding.Default.GetBytes(Text);
            provider.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            provider.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            MemoryStream stream = new MemoryStream();
            CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);
            stream2.Write(bytes, 0, bytes.Length);
            stream2.FlushFinalBlock();
            StringBuilder builder = new StringBuilder();
            foreach (byte num in stream.ToArray())
            {
                builder.AppendFormat("{0:X2}", num);
            }
            return builder.ToString();
        }

额,重点是你看了C#代码了么,有些定义类中,根本不存在无法引用。
如果明白自己的功能需求,何必硬要在网上百度来的C#代码进行PHP转换,倒不如自己思考用PHP写。
直接问需求是什么好了。
\Yii::$app->security->encryptByPassword/decryptByPassword和你需要的功能类似,如果只是跟你一样的需求做加密解密,这两个函数应该跟你的功能类似。
但是不保证这两组函数能够解密加密你提供的C#加密解密得到的编码。
因为就你提供的这组加解密函数来看,无法确定其采用的加解密算法(DES也有好几种变形),无法确定采用何种算法的情况下PHP函数要能和C#打通只能自己慢慢试了..

更新数据表的结构缓存[2.0]

GraceKeo阅读(31)

配置db组件的时候设置了enableSchemaCache为true开启了缓存,我现在修改了某个表的结构,要如何更新这个表的缓存呢。现在我是用Cache组件的flush方法吧所有的缓存都删除一下。但这样觉得不太好,有没有只删除某个表的缓存或者只删除数据表结构缓存的。

Yii::$app->db->schema->refresh(); flush all the schema cache
Yii::$app->db->schema->refreshTableSchema($tableName); clear the particular table schema cache

yii2如何注册echarts的js库[2.0]

momoLion阅读(33)

这里发现一个可以直接调用echarts的插件,使用composer即可。但是需要使用外网的echarts,我想做成调用本地echarts的形式,有没有哪位同仁知道在vendor文件夹下放echarts怎么调用echarts?

使用bower安装echarts 然后自己为echarts写一个EchartsAsset 把相关的js注册进去 然后在试图文件中 register即可
通过配置yii\web\AssetManager::bundles 属性,可以自定义资源包。可以参考Yii2权威指南里Assets章节的自定义资源包部分。

ajax修改下拉框内的值[2.0]

Anilove阅读(29)

article文件夹 index.php代码

[
    'attribute' => 'cate',
    'format' => 'raw',
    'value' => function($model){
        return Html::dropDownList("cates[{$model->id}]",$model->cate,\common\models\Article::$cates)    
    }
],

我想做成下拉框内的值改变时,触发一个方法 把数据库内的值改掉,用ajax怎么写啊?
求大神代码指点

return Html::dropDownList("cates[{$model->id}]",$model->cate,\common\models\Article::$cates,['onchange' => "update($model->id)"])
再去控制器里写对应的更新操作
大概流程就是这样 代码可能会有些小问题 你自己再调试下

登录

找回密码

注册