
研究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();
}
}









