研究pbootcms在线留言

www.jswusn.com PHP 2024-08-20 10:11:02 24次浏览

研究pbootcms在线留言是怎么将数据存入数据库,并且以邮件方式将留言内容发送至邮箱。

1、判断表单提交方式是否为post,若不是,将提示错误信息

if ($_POST) {
    xxxx
} else {
    json(0, '留言提交失败,请使用POST方式提交!');
}


2、判断后台留言功能开关是否开启

if ($this->config('message_status') === '0') {
    json(0, '系统已经关闭留言功能,请到后台开启再试!');
}


3、判断前台用户提交字段在后台数据库中是否存在

// 读取字段
if (! $form = $this->model->getFormField(1)) {
    json(0, '接收表单不存在任何字段,请核对后重试!');
}


4、将用户提交数据转换成邮件主体内容

// 接收数据
$mail_body = '';
foreach ($form as $value) {
    $field_data = post($value->name);
    if (is_array($field_data)) { // 如果是多选等情况时转换
        $field_data = implode(',', $field_data);
    }
    $field_data = str_replace('pboot:if', '', $field_data);
    if ($value->required && ! $field_data) {
        json(0, $value->description . '不能为空!');
    } else {
        $data[$value->name] = $field_data;
        $mail_body .= $value->description . ':' . $field_data . '<br>';
    }
}


5、判断后台留言审核开关是否启用,若是没有启用,则设置留言数据的转态为关闭

$status = $this->config('message_verify') == '0' ? 1 : 0;


6、设置其余字段的信息

// 设置其他字段
if ($data) {
    $data['acode'] = request('acode', 'var') ?: $this->lg;
    $data['user_ip'] = ip2long(get_user_ip());
    $data['user_os'] = get_user_os();
    $data['user_bs'] = get_user_bs();
    $data['recontent'] = '';
    $data['status'] = $status;
    $data['create_user'] = 'api';
    $data['update_user'] = 'api';
}



7、将数据保存至数据库中

// 写入数据
if ($this->model->addMessage($value->table_name, $data)) {
    xxxxxxx
    json(1, '留言提交成功!');
} else {
    $this->log('API提交留言数据失败!');
    json(0, '留言提交失败!');
}


8、判断后台是否配置了邮箱信息,若是配置了,则发送邮件至后台配置的邮箱

if ($this->config('message_send_mail') && $this->config('message_send_to')) {
    $mail_subject = "【" . CMSNAME . "】您有新的" . $value->form_name . "信息,请注意查收!";
    $mail_body .= '<br>来自网站' . get_http_url() . '(' . date('Y-m-d H:i:s') . ')';
    sendmail($this->config(), $this->config('message_send_to'), $mail_subject, $mail_body);
}


至此表单留言方法已经ok了

以下是完整代码

// 新增留言
public function addmsg()
{
    if ($_POST) {
        
        if ($this->config('message_status') === '0') {
            json(0, '系统已经关闭留言功能,请到后台开启再试!');
        }
        
        // 读取字段
        if (! $form = $this->model->getFormField(1)) {
            json(0, '接收表单不存在任何字段,请核对后重试!');
        }
        
        // 接收数据
        $mail_body = '';
        foreach ($form as $value) {
            $field_data = post($value->name);
            if (is_array($field_data)) { // 如果是多选等情况时转换
                $field_data = implode(',', $field_data);
            }
            $field_data = str_replace('pboot:if', '', $field_data);
            if ($value->required && ! $field_data) {
                json(0, $value->description . '不能为空!');
            } else {
                $data[$value->name] = $field_data;
                $mail_body .= $value->description . ':' . $field_data . '<br>';
            }
        }
        
        $status = $this->config('message_verify') == '0' ? 1 : 0;
        
        // 设置其他字段
        if ($data) {
            $data['acode'] = request('acode', 'var') ?: $this->lg;
            $data['user_ip'] = ip2long(get_user_ip());
            $data['user_os'] = get_user_os();
            $data['user_bs'] = get_user_bs();
            $data['recontent'] = '';
            $data['status'] = $status;
            $data['create_user'] = 'api';
            $data['update_user'] = 'api';
        }
        
        // 写入数据
        if ($this->model->addMessage($value->table_name, $data)) {
            $this->log('API提交留言数据成功!');
            if ($this->config('message_send_mail') && $this->config('message_send_to')) {
                $mail_subject = "【" . CMSNAME . "】您有新的" . $value->form_name . "信息,请注意查收!";
                $mail_body .= '<br>来自网站' . get_http_url() . '(' . date('Y-m-d H:i:s') . ')';
                sendmail($this->config(), $this->config('message_send_to'), $mail_subject, $mail_body);
            }
            json(1, '留言提交成功!');
        } else {
            $this->log('API提交留言数据失败!');
            json(0, '留言提交失败!');
        }
    } else {
        json(0, '留言提交失败,请使用POST方式提交!');
    }
}


以下有调用模型中的方法

// 获取表单字段
public function getFormField($fcode)
{
    $field = array(
        'a.table_name',
        'a.form_name',
        'b.name',
        'b.required',
        'b.description'
    );
    
    $join = array(
        'ay_form_field b',
        'a.fcode=b.fcode',
        'LEFT'
    );
    
    return parent::table('ay_form a')->field($field)
        ->where("a.fcode='$fcode'")
        ->join($join)
        ->order('b.sorting ASC,b.id ASC')
        ->select();
}
// 新增留言
public function addMessage($table, $data)
{
    return parent::table('ay_message')->autoTime()->insert($data);
}



邮件发送方法:

/**
 * 快速发送邮件函数
 *
 * @param array $config
 *            邮件服务器连接数组,需包含 smtp_server、smtp_username、smtp_password、smtp_port、smtp_port
 * @param string $to
 *            邮件接收人
 * @param string $subject
 *            邮件主题
 * @param string $body
 *            邮件正文
 */
function sendmail(array $config, $to, $subject, $body)
{
    $smtp = new Smtp($config['smtp_server'], $config['smtp_username'], $config['smtp_password'], $config['smtp_port'], $config['smtp_ssl']);
    if ($smtp->sendMail($to, $subject, $body)) {
        return true;
    } else {
        return $smtp->error();
    }
}


技术分享

苏南名片

  • 联系人:吴经理
  • 电话:152-1887-1916
  • 邮箱:message@jswusn.com
  • 地址:江苏省苏州市相城区

热门文章

Copyright © 2018-2025 jswusn.com 版权所有

技术支持:苏州网站建设  苏ICP备18036849号