我有这个方法:
public function signup_validation() {
//definizioni setting per email di conferma
$emailsetting = array('mailtype' => 'html' );
$emailfrom = 'misure@lagiumentabardata.netsons.org';
$emailsubject ='Conferma registrazione';
$this->load->library('form_validation');
$this->form_validation->set_rules('email','Email','required|trim|valid_email|is_unique[user.email]'); //check se la mail è davvero una mail valida e se esiste gia nel database $this->form_validation->set_rules('password','Password','required|trim'); $this->form_validation->set_rules('cpassword','Conferma Password','required|trim|matches[password]');
$this->form_validation->set_message('is_unique','email già esistente nel nostro database'); //override messaggio di errore
//check se il form è valido allora passa altrimenti ritorna al form. if ($this->form_validation->run() == true) {
//generare key
$key = sha1(uniqid());
//inviare una mail all'utente
$this->load->library('email', $emailsetting); //caricamento libreria
$this->load->model('model_users'); //caricamento modello per il controllo del db utente
$this->email->from($emailfrom,'La Giumenta Bardata');
$this->email->to($this->input->post('email'));
$this->email->subject($emailsubject);
$emailmessage = "<h1>ciao mondo</h1>
<a href='".base_url()."signup/register_user/$key'>click qui</a>"; //fare riferimento alla funzione register_user
$this->email->message($emailmessage);
//controllo scrittura dell'utente nel db
if ($this->model_users->add_temp_user($key) == true) { //passaggio chiave al modello che si occupa di aggiungerlo al DB
//invio email utente
if ($this->email->send() == true) {
echo "email inviata correttamente";
} else { echo "errore nell'invio stronzo";}
} else { echo "problemi nell'inserimento del db"; }
} else {
echo '<script>alert("TU NON PUOI PASSARE!");</script>';
$this->registrazione(); } }
在signup.php
控制器中。
首先,我不明白为什么如果我移动$emailmessage
变量,我设置所有变量($emailsetting
,$emailfrom
等等)我得到{{1}的错误变量未定义-.-
但是,真正的问题是我无法将$emailmessage
变量传递给模块:
$key
如何将变量从控制器传递到模块?我尝试了所有方法,从将 public function add_temp_user($key){
$data = array('email' => $this->input->post('email'),
'nome' => $this->input->post('nome'),
'cognome' => $this->input->post('cognome'),
'password' => md5($this->input->post('password')),
'userkey'=>$key
);
$query = $this->db->insert('temp_users',$data); //generazione query
//check se la query è stata eseguita correttamente
if ($query) {
return true;
} else {
return false;
}
}
设置为公共设置$key
并且没有任何效果......当应用需要调用模型时,我有一个未定义的__construct
变量..
感谢您的帮助
答案 0 :(得分:1)
您可以将$emailmessage =
移到其他设置的位置。但是$key = sha1(uniqid());
行必须在这些作业之前。
我在没有您的数据库的情况下尽可能地测试了这一点。似乎工作。 $key
无论如何都会进入模型。
请注意,我建立的链接<a href=...
略有不同,更好地利用了Codeigniter的功能。
public function signup_validation()
{
//generare key
$key = sha1(uniqid());
//definizioni setting per email di conferma
$emailsetting = array('mailtype' => 'html');
$emailfrom = 'misure@lagiumentabardata.netsons.org';
$emailsubject = 'Conferma registrazione';
$emailmessage = "<h1>ciao mondo</h1>
<a href='".base_url("signup/register_user/$key")."'>click qui</a>"; //fare riferimento alla funzione register_user
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|is_unique[user.email]'); //check se la mail è davvero una mail valida e se esiste gia nel database $this->form_validation->set_rules('password','Password','required|trim'); $this->form_validation->set_rules('cpassword','Conferma Password','required|trim|matches[password]');
$this->form_validation->set_message('is_unique', 'email già esistente nel nostro database'); //override messaggio di errore
//check se il form è valido allora passa altrimenti ritorna al form. if ($this->form_validation->run() == true) {
//inviare una mail all'utente
$this->load->library('email', $emailsetting); //caricamento libreria
$this->load->model('model_users'); //caricamento modello per il controllo del db utente
//use chaining here, much more efficient
$this->email
->from($emailfrom, 'La Giumenta Bardata')
->to($this->input->post('email'))
->subject($emailsubject)
->message($emailmessage);
//controllo scrittura dell'utente nel db
if($this->model_users->add_temp_user($key))
{ //passaggio chiave al modello che si occupa di aggiungerlo al DB
//invio email utente
if($this->email->send() == true)
{
echo "email inviata correttamente";
}
else
{
echo "errore nell'invio stronzo";
}
}
else
{
echo "problemi nell'inserimento del db";
}
//these lines are not connected to anything as you have them in your question.
// So I have commented them out
//else {
// echo '<script>alert("TU NON PUOI PASSARE!");</script>';
// $this->registrazione(); }
}
这是模型功能。
我捕获像input->post(NULL, TRUE);
这样的输入,因为它一次抓取所有输入。这消除了对input->
的多次调用。使用第二个参数= TRUE,输入被清理。
因为db->insert()
返回true或false,所以不需要if / then语句。
public function add_temp_user($key)
{
$posted = $this->input->post(NULL, TRUE);
$data = array('email' => $posted('email'),
'nome' => $posted('nome'),
'cognome' => $posted('cognome'),
'password' => md5($posted('password')),
'userkey' => $key
);
//tornare successo o il fallimento di ricerca
return $this->db->insert('temp_users', $data); //generazione query
}