【问题标题】:Creating a CAPTCHA with CodeIgniter使用 CodeIgniter 创建验证码
【发布时间】:2011-07-31 23:14:54
【问题描述】:

我正在尝试让我的注册页面显示验证码。我有一个注册控制器和一个注册视图。

这是我的控制器索引方法:

public function index()
{
    $this->load->helper('captcha');
    $cap = create_captcha(array(
        'img_path' => './captcha/',
        'img_url' => 'http://localhost/captcha/',
        'img_width' => 150,
        'img_height' => 40
    ));
    $data = array(
        'captcha_time' => $cap['time'],
        'ip_address' => $this->input->ip_address(),
        'word' => $cap['word']
    );
    $query = $this->db->insert_string('captcha', $data);
    $this->db->query($query);

    $this->load->view('header');
    $this->load->view('register', $cap);
    $this->load->view('footer');
}

以及我的注册视图中的相关位 (register.php):

<h3>Security question</h3>
<li>
    <label for="captcha">Enter the CAPTCHA code below</label>
    <?php echo $cap['image']; ?>
</li>

问题是,我收到了这个错误:

A PHP Error was encountered
Severity: Notice
Message: Undefined variable: cap
Filename: views/register.php
Line Number: 35

查看用户指南后,我从控制器传递到视图的数据似乎需要是数组或对象,而我做我想做的唯一方法是在我的验证码生成代码查看文件,它似乎并没有真正遵循 MVC 模式,是吗?

有人有什么建议吗?

【问题讨论】:

  • 我不知道codeigniter,但是从你写的来看,你不能只做$this-&gt;load-&gt;view('register', array('cap'=&gt;$cap));吗?然后你传递一个带有命名值的数组(我怀疑这是视图方法想要的)
  • 我已经尝试过了,我仍然收到Undefined variable: cap 错误。
  • 如果您有答案,请将其发布为答案并将其标记为已回答
  • stackoverflow.com/questions/10571804/… 检查可能会有所帮助

标签: php codeigniter captcha


【解决方案1】:

我看到了有关您的代码的两个注意事项:

1) 我知道这是一个控制器功能,所以如果你想传递给视图,“cap”变量应该这样做:

$data['cap'] = $cap;
$this->load->view('register', $data);

Loadview() 函数的第一个参数是函数名,第二个参数是一个数组,其中包含要发送到视图的所有参数,第三个参数是是否要将视图作为原始字符串返回 (默认为 false)。

2) 如果您想遵循 MVC 模式,您应该将 DB 调用封装在支持 Codeigniter 的模型中:http://codeigniter.com/user_guide/general/models.html

在你的台词中

$query = $this->db->insert_string('captcha', $data);
$this->db->query($query);

我知道您想将验证码信息保存在 BBDD 中,不是吗? 因此,您应该更好地使用验证码模型发送信息:

  • 在 models/captcha_model.php 中创建一个模型:

       class Captcha_model extends CI_Model {
          function insert_captcha($captcha){
          //...
          //return true if it works; false otherwise
          }
      }
    
  • 在控制器功能中你可以使用它:

    $this->load->model('captcha_model');
    $this->captcha_model->insert_captcha($captcha);
    

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    相关资源
    最近更新 更多